(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:'common tail optimization' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:z)
              op: assign_op.Equal
              rhs: {(zzzzzzzz)}
              spids: [15]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:18)
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:z)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') 
                    ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') 
                    ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z')
                  )
                }
              spids: [22]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:34)
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:z)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') 
                    ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') 
                    ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z')
                  )
                }
              spids: [38]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:50)
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:z)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') 
                    ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z')
                  )
                }
              spids: [54]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:62)
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:z2047)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:67)
                    command_list: 
                      (command.CommandList
                        children: [
                          (C {(expr)} {(DQ ($ Id.VSub_DollarName '$z'))} {(Id.Lit_Other ':')} 
                            {(SQ (Token id:Id.Lit_Chars val:'.\\(.*\\)' span_id:77))}
                          )
                        ]
                      )
                  )
                }
              spids: [66]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:81)
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:x)
              op: assign_op.Equal
              rhs: {(zzzzzzzzzz)}
              spids: [87]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:90)
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:y)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') 
                    ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') 
                    ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x')
                  )
                }
              spids: [94]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:108)
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:z)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') 
                    ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') 
                    ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y')
                  )
                }
              spids: [112]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:126)
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:z1000)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$z')}
          spids: [130]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:z100)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$y')}
          spids: [133]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:z10)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$x')}
          spids: [136]
        )
      ]
    )
    (command.ShFunction
      name: zs
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:count)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [147]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:153)
              cond: [(C {(test)} {(DQ ($ Id.VSub_DollarName '$count'))} {(-ge)} {(1000)})]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:count)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Minus
                                    left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$count')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1000)})
                                  )
                              )
                            }
                          spids: [169]
                        )
                      ]
                    )
                    (C {(printf)} {(DQ ('%s'))} {($ Id.VSub_DollarName '$z1000')})
                  ]
                )
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:192)
              cond: [(C {(test)} {(DQ ($ Id.VSub_DollarName '$count'))} {(-ge)} {(100)})]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:count)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Minus
                                    left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$count')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 100)})
                                  )
                              )
                            }
                          spids: [208]
                        )
                      ]
                    )
                    (C {(printf)} {(DQ ('%s'))} {($ Id.VSub_DollarName '$z100')})
                  ]
                )
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:231)
              cond: [(C {(test)} {(DQ ($ Id.VSub_DollarName '$count'))} {(-ge)} {(10)})]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:count)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Minus
                                    left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$count')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 10)})
                                  )
                              )
                            }
                          spids: [247]
                        )
                      ]
                    )
                    (C {(printf)} {(DQ ('%s'))} {($ Id.VSub_DollarName '$z10')})
                  ]
                )
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:270)
              cond: [(C {(test)} {(DQ ($ Id.VSub_DollarName '$count'))} {(-ge)} {(1)})]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:count)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Minus
                                    left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$count')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [286]
                        )
                      ]
                    )
                    (C {(printf)} {(DQ (z))})
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: zc
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {(sed)} {(-e)} {(DQ ('/^index/d'))} {(-e)} 
                  {(DQ (s/) ($ Id.VSub_DollarName '$z1000') (/Q/g))} {(-e)} {(DQ (s/QQQQQQQQQ/Z9000/g))} {(-e)} {(DQ (s/QQQQQQQQ/Z8000/g))} {(-e)} {(DQ (s/QQQQQQQ/Z7000/g))} 
                  {(-e)} {(DQ (s/QQQQQQ/Z6000/g))} {(-e)} {(DQ (s/QQQQQ/Z5000/g))} {(-e)} {(DQ (s/QQQQ/Z4000/g))} {(-e)} 
                  {(DQ (s/QQQ/Z3000/g))} {(-e)} {(DQ (s/QQ/Z2000/g))} {(-e)} {(DQ (s/Q/Z1000/g))} {(-e)} 
                  {(DQ (s/) ($ Id.VSub_DollarName '$z100') (/Q/g))} {(-e)} {(DQ (s/QQQQQQQQQ/Z900/g))} {(-e)} {(DQ (s/QQQQQQQQ/Z800/g))} {(-e)} {(DQ (s/QQQQQQQ/Z700/g))} {(-e)} 
                  {(DQ (s/QQQQQQ/Z600/g))} {(-e)} {(DQ (s/QQQQQ/Z500/g))} {(-e)} {(DQ (s/QQQQ/Z400/g))} {(-e)} {(DQ (s/QQQ/Z300/g))} {(-e)} 
                  {(DQ (s/QQ/Z200/g))} {(-e)} {(DQ (s/Q/Z100/g))} {(-e)} {(DQ (s/000Z//g))} {(-e)} {(DQ (s/) ($ Id.VSub_DollarName '$z10') (/Q/g))} 
                  {(-e)} {(DQ (s/QQQQQQQQQ/Z90/g))} {(-e)} {(DQ (s/QQQQQQQQ/Z80/g))} {(-e)} {(DQ (s/QQQQQQQ/Z70/g))} {(-e)} 
                  {(DQ (s/QQQQQQ/Z60/g))} {(-e)} {(DQ (s/QQQQQ/Z50/g))} {(-e)} {(DQ (s/QQQQ/Z40/g))} {(-e)} {(DQ (s/QQQ/Z30/g))} {(-e)} 
                  {(DQ (s/QQ/Z20/g))} {(-e)} {(DQ (s/Q/Z10/g))} {(-e)} {(DQ (s/00Z//g))} {(-e)} {(DQ (s/z/Q/g))} {(-e)} {(DQ (s/QQQQQQQQQ/Z9/g))} 
                  {(-e)} {(DQ (s/QQQQQQQQ/Z8/g))} {(-e)} {(DQ (s/QQQQQQQ/Z7/g))} {(-e)} {(DQ (s/QQQQQQ/Z6/g))} {(-e)} 
                  {(DQ (s/QQQQQ/Z5/g))} {(-e)} {(DQ (s/QQQQ/Z4/g))} {(-e)} {(DQ (s/QQQ/Z3/g))} {(-e)} {(DQ (s/QQ/Z2/g))} {(-e)} {(DQ (s/Q/Z1/g))} 
                  {(-e)} {(DQ (s/0Z//g))}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:677)
            )
          ]
        )
    )
    (command.ShFunction
      name: expect_pattern
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:cnt)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [690]
                )
              ]
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:698)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 774
                  stdin_parts: [
                    ('diff --git a/file-a')
                    ($ Id.VSub_DollarName '$cnt')
                    (' b/file-a')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('--- a/file-a')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('+++ b/file-a')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('@@ -1 +1 @@\n')
                    (-Z)
                    (${ Id.VSub_Name cnt)
                    ('a\n')
                    ('+Z')
                    (${ Id.VSub_Name cnt)
                    ('A\n')
                    ('diff --git a/file-b')
                    ($ Id.VSub_DollarName '$cnt')
                    (' b/file-b')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('--- a/file-b')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('+++ b/file-b')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('@@ -1 +1 @@\n')
                    ('-b\n')
                    ('+B\n')
                    ('diff --git a/file-c')
                    ($ Id.VSub_DollarName '$cnt')
                    (' b/file-c')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('--- a/file-c')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('+++ b/file-c')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('@@ -1 +1 @@\n')
                    (-cZ)
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    (Id.Lit_Other '\\')
                    (' No newline at end of file\n')
                    ('+CZ')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    (Id.Lit_Other '\\')
                    (' No newline at end of file\n')
                    ('diff --git a/file-d')
                    ($ Id.VSub_DollarName '$cnt')
                    (' b/file-d')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('--- a/file-d')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('+++ b/file-d')
                    ($ Id.VSub_DollarName '$cnt')
                    ('\n')
                    ('@@ -1 +1 @@\n')
                    ('-d\n')
                    ('+D\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:sample)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'1023 1024 1025 2047 4095' span_id:780))}
          spids: [778]
        )
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:789) (Token id:Id.Lit_Chars val:'\n' span_id:790) 
          (Token id:Id.Lit_Chars val:'\tfor n in $sample\n' span_id:791) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:792) 
          (Token id:Id.Lit_Chars val:'\t\t( zs $n ; echo a ) >file-a$n &&\n' span_id:793) (Token id:Id.Lit_Chars val:'\t\t( echo b; zs $n; echo ) >file-b$n &&\n' span_id:794) 
          (Token id:Id.Lit_Chars val:'\t\t( printf c; zs $n ) >file-c$n &&\n' span_id:795) (Token id:Id.Lit_Chars val:'\t\t( echo d; zs $n ) >file-d$n &&\n' span_id:796) 
          (Token id:Id.Lit_Chars val:'\n' span_id:797) (Token id:Id.Lit_Chars val:'\t\tgit add file-a$n file-b$n file-c$n file-d$n &&\n' span_id:798) 
          (Token id:Id.Lit_Chars val:'\n' span_id:799) (Token id:Id.Lit_Chars val:'\t\t( zs $n ; echo A ) >file-a$n &&\n' span_id:800) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t( echo B; zs $n; echo ) >file-b$n &&\n'
            span_id: 801
          ) (Token id:Id.Lit_Chars val:'\t\t( printf C; zs $n ) >file-c$n &&\n' span_id:802) 
          (Token id:Id.Lit_Chars val:'\t\t( echo D; zs $n ) >file-d$n &&\n' span_id:803) (Token id:Id.Lit_Chars val:'\n' span_id:804) 
          (Token id:Id.Lit_Chars val:'\t\texpect_pattern $n || return 1\n' span_id:805) (Token id:Id.Lit_Chars val:'\n' span_id:806) 
          (Token id:Id.Lit_Chars val:'\tdone >expect\n' span_id:807)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff -U0' span_id:814))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:818) (Token id:Id.Lit_Chars val:'\n' span_id:819) 
          (Token id:Id.Lit_Chars val:'\tfor n in $sample\n' span_id:820) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:821) 
          (Token id:Id.Lit_Chars val:'\t\tgit diff -U0 file-?$n\n' span_id:822) (Token id:Id.Lit_Chars val:'\tdone | zc >actual &&\n' span_id:823) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:824) (Token id:Id.Lit_Chars val:'\n' span_id:825)
        )
      }
    )
    (C {(test_done)})
  ]
)