(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'diff hunk fusing'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <f>
      name: f
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'i='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'i='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'i='> name:i)
                  op: assign_op.Equal
                  rhs: {<1>}
                )
              ]
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Simple
                      blame_tok: <test>
                      more_env: []
                      words: [{<test>} {($ Id.VSub_DollarName i)} {<-le>} {($ Id.VSub_Number 2)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {($ Id.VSub_DollarName i)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'i='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'i='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'i='> name:i)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <expr>
                                    more_env: []
                                    words: [
                                      {<expr>}
                                      {($ Id.VSub_DollarName i)}
                                      {<Id.Lit_Other '+'>}
                                      {<1>}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {($ Id.VSub_Number 3)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <t>
      name: t
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_Pound '#')})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <4>
                  pattern: (pat.Words words:[{<4>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Sentence
                      child: 
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'hunks='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'hunks='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'hunks='> name:hunks)
                              op: assign_op.Equal
                              rhs: {($ Id.VSub_Number 4)}
                            )
                          ]
                          redirects: []
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'cmd='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'cmd='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmd='> name:cmd)
                          op: assign_op.Equal
                          rhs: {(DQ <'diff -U'> ($ Id.VSub_Number 3))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <5>
                  pattern: (pat.Words words:[{<5>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Sentence
                      child: 
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'hunks='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'hunks='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'hunks='> name:hunks)
                              op: assign_op.Equal
                              rhs: {($ Id.VSub_Number 5)}
                            )
                          ]
                          redirects: []
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'cmd='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'cmd='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmd='> name:cmd)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'diff -U'> ($ Id.VSub_Number 3) <' --inter-hunk-context='> 
                                ($ Id.VSub_Number 4)
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'label='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'label='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'label='> name:label)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName cmd) <', '> ($ Id.VSub_Number 1) <' common '> 
                        ($ Id.VSub_Number 2)
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'file='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'file='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file)
                  op: assign_op.Equal
                  rhs: {<f> ($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'expected='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'expected='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected='> name:expected)
                  op: assign_op.Equal
                  rhs: 
                    {<expected.> ($ Id.VSub_DollarName file) <.> ($ Id.VSub_Number 3) <.> 
                      ($ Id.VSub_DollarName hunks)
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Pipeline
                          negated: <Id.KW_Bang '!'>
                          children: [
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [{<test>} {<-f>} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: []
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <f>
                      more_env: []
                      words: [{<f>} {<A>} {($ Id.VSub_Number 1)} {<B>}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName file)}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <git>
                      more_env: []
                      words: [{<git>} {<add>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <git>
                      more_env: []
                      words: [{<git>} {<commit>} {<-q>} {<-m.>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <f>
                      more_env: []
                      words: [{<f>} {<X>} {($ Id.VSub_Number 1)} {<Y>}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName file)}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [146 157]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <test_expect_success>
              more_env: []
              words: [
                {<test_expect_success>}
                {
                  (DQ ($ Id.VSub_DollarName label) <': count hunks ('> ($ Id.VSub_DollarName hunks) 
                    <')'>
                  )
                }
                {
                  (DQ <'\n'> <'\t\ttest '> 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Pipeline
                          children: [
                            (command.Simple
                              blame_tok: <git>
                              more_env: []
                              words: [{<git>} {($ Id.VSub_DollarName cmd)} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <grep>
                              more_env: []
                              words: [{<grep>} {(SQ <'^@@ '>)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <wc>
                              more_env: []
                              words: [{<wc>} {<-l>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
                        )
                      right: <Id.Eof_RParen _>
                    ) <' = '> ($ Id.VSub_DollarName hunks) <'\n'> <'\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {($ Id.VSub_DollarName expected)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test_expect_success>
                  more_env: []
                  words: [
                    {<test_expect_success>}
                    {(DQ ($ Id.VSub_DollarName label) <': check output'>)}
                    {
                      (DQ <'\n'> <'\t\tgit '> ($ Id.VSub_DollarName cmd) <' '> 
                        ($ Id.VSub_DollarName file) <' | grep -v \'^index \' >actual &&\n'> <'\t\ttest_cmp '> ($ Id.VSub_DollarName expected) <' actual\n'> 
                        <'\t'>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <cat>
          more_env: []
          words: [{<cat>}]
          redirects: [
            (Redir
              op: <Id.Redir_DLess '<<'>
              loc: (redir_loc.Fd fd:0)
              arg: 
                (redir_param.HereDoc
                  here_begin: {<EOF>}
                  here_end_tok: <Id.Undefined_Tok ''>
                  stdin_parts: [
                    <'diff --git a/f1 b/f1\n'>
                    <'--- a/f1\n'>
                    <'+++ b/f1\n'>
                    <'@@ -1,3 +1,3 @@\n'>
                    <'-A\n'>
                    <'+X\n'>
                    <' 1\n'>
                    <'-B\n'>
                    <'+Y\n'>
                  ]
                )
            )
            (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected.f1.0.1>})
          ]
          do_fork: T
        )
        (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <cat>
          more_env: []
          words: [{<cat>}]
          redirects: [
            (Redir
              op: <Id.Redir_DLess '<<'>
              loc: (redir_loc.Fd fd:0)
              arg: 
                (redir_param.HereDoc
                  here_begin: {<EOF>}
                  here_end_tok: <Id.Undefined_Tok ''>
                  stdin_parts: [
                    <'diff --git a/f1 b/f1\n'>
                    <'--- a/f1\n'>
                    <'+++ b/f1\n'>
                    <'@@ -1 +1 @@\n'>
                    <'-A\n'>
                    <'+X\n'>
                    <'@@ -3 +3 @@ A\n'>
                    <'-B\n'>
                    <'+Y\n'>
                  ]
                )
            )
            (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected.f1.0.2>})
          ]
          do_fork: T
        )
        (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<1>} {<line>} {<0>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<1>} {<line>} {<0>} {<0>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<1>} {<line>} {<0>} {<1>} {<1>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<1>} {<line>} {<0>} {<2>} {<1>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<1>} {<line>} {<1>} {<1>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<2>} {<lines>} {<0>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<2>} {<lines>} {<0>} {<0>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<2>} {<lines>} {<0>} {<1>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<2>} {<lines>} {<0>} {<2>} {<1>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<2>} {<lines>} {<1>} {<1>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<3>} {<lines>} {<1>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<3>} {<lines>} {<1>} {<0>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<3>} {<lines>} {<1>} {<1>} {<1>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<3>} {<lines>} {<1>} {<2>} {<1>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<9>} {<lines>} {<3>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<9>} {<lines>} {<3>} {<2>} {<2>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <t>
      more_env: []
      words: [{<t>} {<9>} {<lines>} {<3>} {<3>} {<1>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)