(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:'log family learns --stdin' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: check
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: cmd
              iter_words: [{(rev-list)} {(DQ ('log --stat'))}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.ForEach
                          iter_name: i
                          iter_words: [{(DQ ($ Id.VSub_At '$@'))}]
                          do_arg_iter: F
                          body: 
                            (command.DoGroup
                              children: [
                                (C {(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} 
                                  {($ Id.VSub_DollarName '$i')}
                                )
                              ]
                            )
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:75)
                              fd: -1
                              arg_word: {(input)}
                            )
                          ]
                        )
                        (C {(test_expect_success)} 
                          {(DQ ('check ') ($ Id.VSub_DollarName '$cmd') (' ') ($ Id.VSub_Star '$*'))} 
                          {
                            (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) 
                              (Token
                                id: Id.Lit_Chars
                                val: '\t\t\tgit $cmd $(cat input) >expect &&\n'
                                span_id: 92
                              ) (Token id:Id.Lit_Chars val:'\t\t\tgit $cmd --stdin <input >actual &&\n' span_id:93) 
                              (Token
                                id: Id.Lit_Chars
                                val: '\t\t\tsed -e "s/^/input /" input &&\n'
                                span_id: 94
                              ) (Token id:Id.Lit_Chars val:'\t\t\tsed -e "s/^/output /" expect &&\n' span_id:95) 
                              (Token
                                id: Id.Lit_Chars
                                val: '\t\t\ttest_cmp expect actual\n'
                                span_id: 96
                              ) (Token id:Id.Lit_Chars val:'\t\t' span_id:97)
                            )
                          }
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:them)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'1 2 3 4 5 6 7' span_id:108))}
          spids: [106]
        )
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:118) (Token id:Id.Lit_Chars val:'\t\tfor i in 0 $them\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:120) (Token id:Id.Lit_Chars val:'\t\t\tfor j in $them\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\t\t\tdo\n' span_id:122) (Token id:Id.Lit_Chars val:'\t\t\t\techo $i.$j >file-$j &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\t\t\t\tgit add file-$j || exit\n' span_id:124) (Token id:Id.Lit_Chars val:'\t\t\tdone &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\t\t\ttest_tick &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m $i || exit\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\t\tdone &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\t\tfor i in $them\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:130) (Token id:Id.Lit_Chars val:'\t\t\tgit checkout -b side-$i master~$i &&\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\t\t\techo updated $i >file-$i &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\t\t\tgit add file-$i &&\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\t\t\ttest_tick &&\n' span_id:134) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m side-$i || exit\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:136) (Token id:Id.Lit_Chars val:'\t)\n' span_id:137)
        )
      }
    )
    (C {(check)} {(master)})
    (C {(check)} {(side-1)} {(Id.Lit_Other '^') (side-4)})
    (C {(check)} {(side-1)} {(Id.Lit_Other '^') (side-7)} {(--)})
    (C {(check)} {(side-1)} {(Id.Lit_Other '^') (side-7)} {(--)} {(file-1)})
    (C {(check)} {(side-1)} {(Id.Lit_Other '^') (side-7)} {(--)} {(file-2)})
    (C {(check)} {(side-3)} {(Id.Lit_Other '^') (side-4)} {(--)} {(file-3)})
    (C {(check)} {(side-3)} {(Id.Lit_Other '^') (side-2)})
    (C {(check)} {(side-3)} {(Id.Lit_Other '^') (side-2)} {(--)} {(file-1)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'not only --stdin' span_id:216))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:220) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\t7\n' span_id:222) (Token id:Id.Lit_Chars val:'\n' span_id:223) 
          (Token id:Id.Lit_Chars val:'\tfile-1\n' span_id:224) (Token id:Id.Lit_Chars val:'\tfile-2\n' span_id:225) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\t^master^\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\t--\n' span_id:229) (Token id:Id.Lit_Chars val:'\tfile-2\n' span_id:230) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:231) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --pretty=tformat:%s --name-only --stdin master -- file-1 \\\n'
            span_id: 232
          ) (Token id:Id.Lit_Chars val:'\t\t<input >actual &&\n' span_id:233) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:234)
        )
      }
    )
    (C {(test_done)})
  ]
)