(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:'git apply in reverse\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:30) (Token id:Id.Lit_Chars val:'\n' span_id:31) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor i in a b c d e f g h i j k l m n; do echo $i; done >file1 &&\n'
            span_id: 32
          ) (Token id:Id.Lit_Chars val:'\tperl -pe "y/ijk/\\\\000\\\\001\\\\002/" <file1 >file2 &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit add file1 file2 &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit tag initial &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\n' span_id:38) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor i in a b c g h i J K L m o n p q; do echo $i; done >file1 &&\n'
            span_id: 39
          ) (Token id:Id.Lit_Chars val:'\tperl -pe "y/mon/\\\\000\\\\001\\\\002/" <file1 >file2 &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\n' span_id:41) (Token id:Id.Lit_Chars val:'\tgit commit -a -m second &&\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\tgit tag second &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\n' span_id:44) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --binary initial second >patch\n'
            span_id: 45
          ) (Token id:Id.Lit_Chars val:'\n' span_id:46)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'apply in forward' span_id:53))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:57) (Token id:Id.Lit_Chars val:'\n' span_id:58) 
          (Token
            id: Id.Lit_Chars
            val: '\tT0=$(git rev-parse "second^{tree}") &&\n'
            span_id: 59
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\tgit apply --index --binary patch &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tT1=$(git write-tree) &&\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\ttest "$T0" = "$T1"\n' span_id:63)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'apply in reverse' span_id:70))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id:Id.Lit_Chars val:'\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard second &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\tgit apply --reverse --binary --index patch &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\tgit diff >diff &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\ttest_cmp /dev/null diff\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\n' span_id:80)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup separate repository lacking postimage' span_id:87))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) (Token id:Id.Lit_Chars val:'\n' span_id:92) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit archive --format=tar --prefix=initial/ initial | $TAR xf - &&\n'
            span_id: 93
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:94) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcd initial && git init && git add .\n'
            span_id: 95
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\n' span_id:97) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit archive --format=tar --prefix=second/ second | $TAR xf - &&\n'
            span_id: 98
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:99) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcd second && git init && git add .\n'
            span_id: 100
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:101) (Token id:Id.Lit_Chars val:'\n' span_id:102)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'apply in forward without postimage' span_id:109))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:113) (Token id:Id.Lit_Chars val:'\n' span_id:114) 
          (Token
            id: Id.Lit_Chars
            val: '\tT0=$(git rev-parse "second^{tree}") &&\n'
            span_id: 115
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\t\tcd initial &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\t\tgit apply --index --binary ../patch &&\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\t\tT1=$(git write-tree) &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\t\ttest "$T0" = "$T1"\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:121)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'apply in reverse without postimage' span_id:128))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:132) (Token id:Id.Lit_Chars val:'\n' span_id:133) 
          (Token
            id: Id.Lit_Chars
            val: '\tT0=$(git rev-parse "initial^{tree}") &&\n'
            span_id: 134
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\t\tcd second &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\t\tgit apply --index --binary --reverse ../patch &&\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\t\tT1=$(git write-tree) &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\t\ttest "$T0" = "$T1"\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:140)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'reversing a whitespace introduction' span_id:147))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/a/a /" < file1 > file1.new &&\n'
            span_id: 152
          ) (Token id:Id.Lit_Chars val:'\tmv file1.new file1 &&\n' span_id:153) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff | git apply --reverse --whitespace=error\n'
            span_id: 154
          )
        )
      }
    )
    (C {(test_done)})
  ]
)