(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git apply handling criss-cross rename patch.">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: create_file
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:cnt) op:Equal rhs:{(0)} spids:[21])]
              spids: [21]
            )
            (While
              cond: [(C {(test)} {($ VSub_Name "$cnt")} {(-le)} {(100)})]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:cnt)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Plus
                                    left: (ArithWord w:{($ VSub_Name "$cnt")})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [40 47]
                              )
                            }
                          spids: [39]
                        )
                      ]
                      spids: [39]
                    )
                    (SimpleCommand
                      words: [{(echo)} {(DQ ($ VSub_Number "$2"))}]
                      redirects: [
                        (Redir
                          op_id: Redir_DGreat
                          fd: -1
                          arg_word: {(DQ ($ VSub_Number "$1"))}
                          spids: [56]
                        )
                      ]
                    )
                  ]
                  spids: [36 63]
                )
            )
          ]
          spids: [18]
        )
      spids: [14 17]
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <"\n"> <"\t# Ensure that file sizes are different, because on Windows\n"> 
          <"\t# lstat() does not discover inode numbers, and we need\n"> <"\t# other properties to discover swapped files\n"> 
          <"\t# (mtime is not always different, either).\n"> <"\tcreate_file file1 \"some content\" &&\n"> <"\tcreate_file file2 \"some other content\" &&\n"> 
          <"\tcreate_file file3 \"again something else\" &&\n"> <"\tgit add file1 file2 file3 &&\n"> <"\tgit commit -m 1\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"criss-cross rename">)} 
      {
        (SQ <"\n"> <"\tmv file1 tmp &&\n"> <"\tmv file2 file1 &&\n"> <"\tmv tmp file2 &&\n"> 
          <"\tcp file1 file1-swapped &&\n"> <"\tcp file2 file2-swapped\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff -M -B">)} 
      {(SQ <"\n"> <"\tgit diff -M -B > diff &&\n"> <"\tgit reset --hard\n"> <"\n">)}
    )
    (C {(test_expect_success)} {(SQ <apply>)} 
      {
        (SQ <"\n"> <"\tgit apply diff &&\n"> <"\ttest_cmp file1 file1-swapped &&\n"> 
          <"\ttest_cmp file2 file2-swapped\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"criss-cross rename">)} 
      {
        (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tmv file1 tmp &&\n"> <"\tmv file2 file1 &&\n"> 
          <"\tmv file3 file2 &&\n"> <"\tmv tmp file3 &&\n"> <"\tcp file1 file1-swapped &&\n"> <"\tcp file2 file2-swapped &&\n"> 
          <"\tcp file3 file3-swapped\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff -M -B">)} 
      {(SQ <"\n"> <"\tgit diff -M -B > diff &&\n"> <"\tgit reset --hard\n">)}
    )
    (C {(test_expect_success)} {(SQ <apply>)} 
      {
        (SQ <"\n"> <"\tgit apply diff &&\n"> <"\ttest_cmp file1 file1-swapped &&\n"> 
          <"\ttest_cmp file2 file2-swapped &&\n"> <"\ttest_cmp file3 file3-swapped\n">
        )
      }
    )
    (C {(test_done)})
  ]
)