(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'merging with large rename matrix'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShFunction
      name: count
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:i)
                  op: assign_op.Equal
                  rhs: {<1>}
                  spids: [21]
                )
              ]
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: [
                (command.Sentence
                  child: (C {<test>} {($ Id.VSub_DollarName '$i')} {<-le>} {($ Id.VSub_Number '$1')})
                  terminator: <Id.Op_Semi _>
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {<echo>} {($ Id.VSub_DollarName '$i')})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:i)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: {($ Id.VSub_DollarName '$i')}
                                    right: {<Id.Lit_Digits 1>}
                                  )
                              )
                            }
                          spids: [44]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (C {<test_expect_success>} {(SQ <'setup (initial)'>)} 
      {
        (SQ <'\n'> <'\ttouch file &&\n'> <'\tgit add . &&\n'> <'\tgit commit -m initial &&\n'> 
          <'\tgit tag initial\n'>
        )
      }
    )
    (command.ShFunction
      name: make_text
      body: 
        (BraceGroup
          children: [
            (C {<echo>} {($ Id.VSub_Number '$1') <Id.Lit_Colon ':'>} {($ Id.VSub_Number '$2')})
            (command.ForEach
              iter_name: i
              iter_words: [
                {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<count>} {<20>}))}
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {<echo>} {($ Id.VSub_Number '$1') <Id.Lit_Colon ':'>} 
                      {($ Id.VSub_DollarName '$i')}
                    )
                  ]
                )
            )
            (C {<echo>} {($ Id.VSub_Number '$1') <Id.Lit_Colon ':'>} {($ Id.VSub_Number '$3')})
          ]
        )
    )
    (command.ShFunction
      name: test_rename
      body: 
        (BraceGroup
          children: [
            (C {<test_expect_success>} 
              {(DQ <'rename ('> ($ Id.VSub_Number '$1') <', '> ($ Id.VSub_Number '$2') <')'>)} 
              {(SQ <'\n'> <'\tn='>) ($ Id.VSub_Number '$1') (SQ <' &&\n'> <'\texpect='>) 
                ($ Id.VSub_Number '$2') 
                (SQ <' &&\n'> <'\tgit checkout -f master &&\n'> 
                  <'\ttest_might_fail git branch -D test$n &&\n'> <'\tgit reset --hard initial &&\n'> <'\tfor i in $(count $n); do\n'> 
                  <'\t\tmake_text $i initial initial >$i\n'> <'\tdone &&\n'> <'\tgit add . &&\n'> <'\tgit commit -m add=$n &&\n'> <'\tfor i in $(count $n); do\n'> 
                  <'\t\tmake_text $i changed initial >$i\n'> <'\tdone &&\n'> <'\tgit commit -a -m change=$n &&\n'> <'\tgit checkout -b test$n HEAD^ &&\n'> 
                  <'\tfor i in $(count $n); do\n'> <'\t\tgit rm $i\n'> <'\t\tmake_text $i initial changed >$i.moved\n'> <'\tdone &&\n'> 
                  <'\tgit add . &&\n'> <'\tgit commit -m change+rename=$n &&\n'> <'\tcase "$expect" in\n'> <'\t\tok) git merge master ;;\n'> 
                  <'\t\t *) test_must_fail git merge master ;;\n'> <'\tesac\n'> <'\t'>
                )
              }
            )
          ]
        )
    )
    (C {<test_rename>} {<5>} {<ok>})
    (C {<test_expect_success>} {(SQ <'set diff.renamelimit to 4'>)} 
      {(SQ <'\n'> <'\tgit config diff.renamelimit 4\n'>)}
    )
    (C {<test_rename>} {<4>} {<ok>})
    (C {<test_rename>} {<5>} {<fail>})
    (C {<test_expect_success>} {(SQ <'set merge.renamelimit to 5'>)} 
      {(SQ <'\n'> <'\tgit config merge.renamelimit 5\n'>)}
    )
    (C {<test_rename>} {<5>} {<ok>})
    (C {<test_rename>} {<6>} {<fail>})
    (C {<test_expect_success>} {(SQ <'setup large simple rename'>)} 
      {
        (SQ <'\n'> <'\tgit config --unset merge.renamelimit &&\n'> 
          <'\tgit config --unset diff.renamelimit &&\n'> <'\n'> <'\tgit reset --hard initial &&\n'> <'\tfor i in $(count 200); do\n'> 
          <'\t\tmake_text foo bar baz >$i\n'> <'\tdone &&\n'> <'\tgit add . &&\n'> <'\tgit commit -m create-files &&\n'> <'\n'> 
          <'\tgit branch simple-change &&\n'> <'\tgit checkout -b simple-rename &&\n'> <'\n'> <'\tmkdir builtin &&\n'> 
          <'\tgit mv [0-9]* builtin/ &&\n'> <'\tgit commit -m renamed &&\n'> <'\n'> <'\tgit checkout simple-change &&\n'> 
          <'\t>unrelated-change &&\n'> <'\tgit add unrelated-change &&\n'> <'\tgit commit -m unrelated-change\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'massive simple rename does not spam added files'>)} 
      {
        (SQ <'\n'> <'\tsane_unset GIT_MERGE_VERBOSITY &&\n'> 
          <'\tgit merge --no-stat simple-rename | grep -v Removing >output &&\n'> <'\ttest_line_count -lt 5 output\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)