(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'merging with large rename matrix' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: count
      body: 
        (command.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: (Token id:Id.KW_While val:while span_id:25)
              cond: [
                (command.Sentence
                  child: (C {(test)} {($ Id.VSub_DollarName '$i')} {(-le)} {($ Id.VSub_Number '$1')})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:34)
                )
              ]
              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: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$i')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [44]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup (initial)' span_id:63))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\ttouch file &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\tgit tag initial\n' span_id:71)
        )
      }
    )
    (command.ShFunction
      name: make_text
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {($ Id.VSub_Number '$1') (Id.Lit_Other ':')} {($ Id.VSub_Number '$2')})
            (command.ForEach
              iter_name: i
              iter_words: [
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:96)
                    command_list: (command.CommandList children:[(C {(count)} {(20)})])
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(echo)} {($ Id.VSub_Number '$1') (Id.Lit_Other ':')} 
                      {($ Id.VSub_DollarName '$i')}
                    )
                  ]
                )
            )
            (C {(echo)} {($ Id.VSub_Number '$1') (Id.Lit_Other ':')} {($ Id.VSub_Number '$3')})
          ]
        )
    )
    (command.ShFunction
      name: test_rename
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ('rename (') ($ Id.VSub_Number '$1') (', ') ($ Id.VSub_Number '$2') (')'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:145) 
                  (Token id:Id.Lit_Chars val:'\tn=' span_id:146)
                ) ($ Id.VSub_Number '$1') 
                (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:150) 
                  (Token id:Id.Lit_Chars val:'\texpect=' span_id:151)
                ) ($ Id.VSub_Number '$2') 
                (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:155) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tgit checkout -f master &&\n'
                    span_id: 156
                  ) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D test$n &&\n' span_id:157) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tgit reset --hard initial &&\n'
                    span_id: 158
                  ) (Token id:Id.Lit_Chars val:'\tfor i in $(count $n); do\n' span_id:159) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tmake_text $i initial initial >$i\n'
                    span_id: 160
                  ) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:161) 
                  (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\tgit commit -m add=$n &&\n' span_id:163) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tfor i in $(count $n); do\n'
                    span_id: 164
                  ) (Token id:Id.Lit_Chars val:'\t\tmake_text $i changed initial >$i\n' span_id:165) 
                  (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\tgit commit -a -m change=$n &&\n' span_id:167) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tgit checkout -b test$n HEAD^ &&\n'
                    span_id: 168
                  ) (Token id:Id.Lit_Chars val:'\tfor i in $(count $n); do\n' span_id:169) 
                  (Token id:Id.Lit_Chars val:'\t\tgit rm $i\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\tmake_text $i initial changed >$i.moved\n' span_id:171) 
                  (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:173) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\tgit commit -m change+rename=$n &&\n'
                    span_id: 174
                  ) (Token id:Id.Lit_Chars val:'\tcase "$expect" in\n' span_id:175) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tok) git merge master ;;\n'
                    span_id: 176
                  ) (Token id:Id.Lit_Chars val:'\t\t *) test_must_fail git merge master ;;\n' span_id:177) 
                  (Token id:Id.Lit_Chars val:'\tesac\n' span_id:178) (Token id:Id.Lit_Chars val:'\t' span_id:179)
                )
              }
            )
          ]
        )
    )
    (C {(test_rename)} {(5)} {(ok)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'set diff.renamelimit to 4' span_id:195))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\tgit config diff.renamelimit 4\n' span_id:200)
        )
      }
    )
    (C {(test_rename)} {(4)} {(ok)})
    (C {(test_rename)} {(5)} {(fail)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'set merge.renamelimit to 5' span_id:219))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:223) 
          (Token id:Id.Lit_Chars val:'\tgit config merge.renamelimit 5\n' span_id:224)
        )
      }
    )
    (C {(test_rename)} {(5)} {(ok)})
    (C {(test_rename)} {(6)} {(fail)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup large simple rename' span_id:243))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:247) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --unset merge.renamelimit &&\n'
            span_id: 248
          ) (Token id:Id.Lit_Chars val:'\tgit config --unset diff.renamelimit &&\n' span_id:249) 
          (Token id:Id.Lit_Chars val:'\n' span_id:250) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'\tfor i in $(count 200); do\n' span_id:252) (Token id:Id.Lit_Chars val:'\t\tmake_text foo bar baz >$i\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:255) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m create-files &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\n' span_id:257) 
          (Token id:Id.Lit_Chars val:'\tgit branch simple-change &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\tgit checkout -b simple-rename &&\n' span_id:259) 
          (Token id:Id.Lit_Chars val:'\n' span_id:260) (Token id:Id.Lit_Chars val:'\tmkdir builtin &&\n' span_id:261) 
          (Token id:Id.Lit_Chars val:'\tgit mv [0-9]* builtin/ &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\tgit commit -m renamed &&\n' span_id:263) 
          (Token id:Id.Lit_Chars val:'\n' span_id:264) (Token id:Id.Lit_Chars val:'\tgit checkout simple-change &&\n' span_id:265) 
          (Token id:Id.Lit_Chars val:'\t>unrelated-change &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\tgit add unrelated-change &&\n' span_id:267) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m unrelated-change\n' span_id:268)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'massive simple rename does not spam added files' span_id:275))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:279) 
          (Token id:Id.Lit_Chars val:'\tsane_unset GIT_MERGE_VERBOSITY &&\n' span_id:280) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge --no-stat simple-rename | grep -v Removing >output &&\n'
            span_id: 281
          ) (Token id:Id.Lit_Chars val:'\ttest_line_count -lt 5 output\n' span_id:282)
        )
      }
    )
    (C {(test_done)})
  ]
)