(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:'apply with fuzz and offset' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: dotest
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:name)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [23]
                    )
                  ]
                )
                (C {(shift)})
                (C {(test_expect_success)} {(DQ ($ Id.VSub_DollarName '$name'))} 
                  {
                    (DQ ('\n') ('\t\tgit checkout-index -f -q -u file &&\n') ('\t\tgit apply ') 
                      ($ Id.VSub_Star '$*') (' &&\n') ('\t\ttest_cmp expect file\n') ('\t')
                    )
                  }
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) (Token id:Id.Lit_Chars val:'\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\tfor i in 1 2 3 4 5 6 7 8 9 10 11 12\n' span_id:61) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:62) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tdone >file &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\tgit update-index --add file &&\n' span_id:65) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor i in 1 2 3 4 5 6 7 a b c d e 8 9 10 11 12\n'
            span_id: 66
          ) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:67) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\tdone >file &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tcat file >expect &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\tgit diff >O0.diff &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/@@ -5,6 +5,11 @@/@@ -2,6 +2,11 @@/" >O1.diff O0.diff &&\n'
            span_id: 73
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/@@ -5,6 +5,11 @@/@@ -7,6 +7,11 @@/" >O2.diff O0.diff &&\n'
            span_id: 74
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/@@ -5,6 +5,11 @@/@@ -19,6 +19,11 @@/" >O3.diff O0.diff &&\n'
            span_id: 75
          ) (Token id:Id.Lit_Chars val:'\n' span_id:76) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/^ 5/ S/" >F0.diff O0.diff &&\n'
            span_id: 77
          ) (Token id:Id.Lit_Chars val:'\tsed -e "s/^ 5/ S/" >F1.diff O1.diff &&\n' span_id:78) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/^ 5/ S/" >F2.diff O2.diff &&\n'
            span_id: 79
          ) (Token id:Id.Lit_Chars val:'\tsed -e "s/^ 5/ S/" >F3.diff O3.diff\n' span_id:80) 
          (Token id:Id.Lit_Chars val:'\n' span_id:81)
        )
      }
    )
    (C {(dotest)} {(SQ (Token id:Id.Lit_Chars val:'unmodified patch' span_id:88))} {(O0.diff)})
    (C {(dotest)} {(SQ (Token id:Id.Lit_Chars val:'minus offset' span_id:97))} {(O1.diff)})
    (C {(dotest)} {(SQ (Token id:Id.Lit_Chars val:'plus offset' span_id:106))} {(O2.diff)})
    (C {(dotest)} {(SQ (Token id:Id.Lit_Chars val:'big offset' span_id:115))} {(O3.diff)})
    (C {(dotest)} {(SQ (Token id:Id.Lit_Chars val:'fuzz with no offset' span_id:124))} {(-C2)} 
      {(F0.diff)}
    )
    (C {(dotest)} {(SQ (Token id:Id.Lit_Chars val:'fuzz with minus offset' span_id:135))} {(-C2)} 
      {(F1.diff)}
    )
    (C {(dotest)} {(SQ (Token id:Id.Lit_Chars val:'fuzz with plus offset' span_id:146))} {(-C2)} 
      {(F2.diff)}
    )
    (C {(dotest)} {(SQ (Token id:Id.Lit_Chars val:'fuzz with big offset' span_id:157))} {(-C2)} 
      {(F3.diff)}
    )
    (C {(test_done)})
  ]
)