(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:'combined diff' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/diff-lib.sh)})
    (command.ShFunction
      name: setup_helper
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
              ]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:one)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [30]
                    )
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:branch)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$2')}
                      spids: [33]
                    )
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:side)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$3')}
                      spids: [36]
                    )
                  ]
                )
                (C {(git)} {(branch)} {($ Id.VSub_DollarName '$side')} {($ Id.VSub_DollarName '$branch')})
                (command.ForEach
                  iter_name: l
                  iter_words: [{($ Id.VSub_DollarName '$one')} {(two)} {(three)} {(fyra)}]
                  do_arg_iter: F
                  body: (command.DoGroup children:[(C {(echo)} {($ Id.VSub_DollarName '$l')})])
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:79)
                      fd: -1
                      arg_word: {(file)}
                    )
                  ]
                )
                (C {(git)} {(add)} {(file)})
                (C {(test_tick)})
                (C {(git)} {(commit)} {(-m)} {($ Id.VSub_DollarName '$branch')})
                (C {(git)} {(checkout)} {($ Id.VSub_DollarName '$side')})
                (command.ForEach
                  iter_name: l
                  iter_words: [{($ Id.VSub_DollarName '$one')} {(two)} {(three)} {(quatro)}]
                  do_arg_iter: F
                  body: (command.DoGroup children:[(C {(echo)} {($ Id.VSub_DollarName '$l')})])
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:144)
                      fd: -1
                      arg_word: {(file)}
                    )
                  ]
                )
                (C {(git)} {(add)} {(file)})
                (C {(test_tick)})
                (C {(git)} {(commit)} {(-m)} {($ Id.VSub_DollarName '$side')})
                (C {(test_must_fail)} {(git)} {(merge)} {($ Id.VSub_DollarName '$branch')})
                (command.ForEach
                  iter_name: l
                  iter_words: [{($ Id.VSub_DollarName '$one')} {(three)} {(four)}]
                  do_arg_iter: F
                  body: (command.DoGroup children:[(C {(echo)} {($ Id.VSub_DollarName '$l')})])
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:209)
                      fd: -1
                      arg_word: {(file)}
                    )
                  ]
                )
                (C {(git)} {(add)} {(file)})
                (C {(test_tick)})
                (C {(git)} {(commit)} {(-m)} 
                  {
                    (DQ ('merge ') ($ Id.VSub_DollarName '$branch') (' into ') 
                      ($ Id.VSub_DollarName '$side')
                    )
                  }
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: verify_helper
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:it)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [253]
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(sed)}
                    {(-e)}
                    {
                      (SQ (Token id:Id.Lit_Chars val:'\n' span_id:269) 
                        (Token
                          id: Id.Lit_Chars
                          val: '\t\t1,/^@@@/d\n'
                          span_id: 270
                        ) (Token id:Id.Lit_Chars val:'\t\t/^ -/d\n' span_id:271) 
                        (Token
                          id: Id.Lit_Chars
                          val: '\t\ts/^\\(.\\)./\\1/\n'
                          span_id: 272
                        ) (Token id:Id.Lit_Chars val:'\t' span_id:273)
                      )
                    }
                    {(DQ ($ Id.VSub_DollarName '$it'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:280)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$it') (.actual.1))}
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(sed)}
                    {(-e)}
                    {
                      (SQ (Token id:Id.Lit_Chars val:'\n' span_id:294) 
                        (Token
                          id: Id.Lit_Chars
                          val: '\t\t1,/^@@@/d\n'
                          span_id: 295
                        ) (Token id:Id.Lit_Chars val:'\t\t/^- /d\n' span_id:296) 
                        (Token
                          id: Id.Lit_Chars
                          val: '\t\ts/^.\\(.\\)/\\1/\n'
                          span_id: 297
                        ) (Token id:Id.Lit_Chars val:'\t' span_id:298)
                      )
                    }
                    {(DQ ($ Id.VSub_DollarName '$it'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:305)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$it') (.actual.2))}
                    )
                  ]
                )
                (command.Pipeline
                  children: [
                    (C {(git)} {(diff)} {(DQ ($ Id.VSub_DollarName '$it') ('^'))} 
                      {(DQ ($ Id.VSub_DollarName '$it'))} {(--)}
                    )
                    (command.Simple
                      words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'1,/^@@/d' span_id:337))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:340)
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_DollarName '$it') (.expect.1))}
                        )
                      ]
                    )
                  ]
                  negated: F
                )
                (C {(test_cmp)} {(DQ ($ Id.VSub_DollarName '$it') (.expect.1))} 
                  {(DQ ($ Id.VSub_DollarName '$it') (.actual.1))}
                )
                (command.Pipeline
                  children: [
                    (C {(git)} {(diff)} {(DQ ($ Id.VSub_DollarName '$it') ('^2'))} 
                      {(DQ ($ Id.VSub_DollarName '$it'))} {(--)}
                    )
                    (command.Simple
                      words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'1,/^@@/d' span_id:387))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:390)
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_DollarName '$it') (.expect.2))}
                        )
                      ]
                    )
                  ]
                  negated: F
                )
                (C {(test_cmp)} {(DQ ($ Id.VSub_DollarName '$it') (.expect.2))} 
                  {(DQ ($ Id.VSub_DollarName '$it') (.actual.2))}
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:419) 
          (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:420) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:421) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:422) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:423) 
          (Token id:Id.Lit_Chars val:'\n' span_id:424) (Token id:Id.Lit_Chars val:'\tgit branch withone &&\n' span_id:425) 
          (Token id:Id.Lit_Chars val:'\tgit branch sansone &&\n' span_id:426) (Token id:Id.Lit_Chars val:'\n' span_id:427) 
          (Token id:Id.Lit_Chars val:'\tgit checkout withone &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\tsetup_helper one withone sidewithone &&\n' span_id:429) 
          (Token id:Id.Lit_Chars val:'\n' span_id:430) (Token id:Id.Lit_Chars val:'\tgit checkout sansone &&\n' span_id:431) 
          (Token id:Id.Lit_Chars val:'\tsetup_helper "" sansone sidesansone\n' span_id:432)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check combined output (1)' span_id:439))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:443) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show sidewithone -- >sidewithone &&\n'
            span_id: 444
          ) (Token id:Id.Lit_Chars val:'\tverify_helper sidewithone\n' span_id:445)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check combined output (2)' span_id:452))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:456) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show sidesansone -- >sidesansone &&\n'
            span_id: 457
          ) (Token id:Id.Lit_Chars val:'\tverify_helper sidesansone\n' span_id:458)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diagnose truncated file' span_id:465))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:469) 
          (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:470) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:471) 
          (Token id:Id.Lit_Chars val:'\tgit commit --amend -C HEAD &&\n' span_id:472) (Token id:Id.Lit_Chars val:'\tgit show >out &&\n' span_id:473) 
          (Token id:Id.Lit_Chars val:'\tgrep "diff --cc file" out\n' span_id:474)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for --cc --raw' span_id:481))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:485) 
          (Token
            id: Id.Lit_Chars
            val: '\tblob=$(echo file | git hash-object --stdin -w) &&\n'
            span_id: 486
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tbase_tree=$(echo "100644 blob $blob\tfile" | git mktree) &&\n'
            span_id: 487
          ) (Token id:Id.Lit_Chars val:'\ttrees= &&\n' span_id:488) 
          (Token id:Id.Lit_Chars val:'\tfor i in $(test_seq 1 40)\n' span_id:489) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:490) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tblob=$(echo file$i | git hash-object --stdin -w) &&\n'
            span_id: 491
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttrees="$trees$(echo "100644 blob $blob\tfile" | git mktree)$LF"\n'
            span_id: 492
          ) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:493)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check --cc --raw with four trees' span_id:500))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:504) 
          (Token
            id: Id.Lit_Chars
            val: '\tfour_trees=$(echo "$trees" | sed -e 4q) &&\n'
            span_id: 505
          ) (Token id:Id.Lit_Chars val:'\tgit diff --cc --raw $four_trees $base_tree >out &&\n' span_id:506) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Check for four leading colons in the output:\n'
            span_id: 507
          ) (Token id:Id.Lit_Chars val:'\tgrep "^::::[^:]" out\n' span_id:508)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check --cc --raw with forty trees' span_id:515))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:519) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --cc --raw $trees $base_tree >out &&\n'
            span_id: 520
          ) (Token id:Id.Lit_Chars val:'\t# Check for forty leading colons in the output:\n' span_id:521) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^::::::::::::::::::::::::::::::::::::::::[^:]" out\n'
            span_id: 522
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup combined ignore spaces' span_id:529))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:533) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\t>test &&\n' span_id:535) 
          (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:536) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:537) 
          (Token id:Id.Lit_Chars val:'\n' span_id:538) (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >test &&\n' span_id:539) 
          (Token id:Id.Lit_Chars val:'\talways coalesce\n' span_id:540) (Token id:Id.Lit_Chars val:'\teol space coalesce Q\n' span_id:541) 
          (Token id:Id.Lit_Chars val:'\tspace  change coalesce\n' span_id:542) (Token id:Id.Lit_Chars val:'\tall spa ces coalesce\n' span_id:543) 
          (Token id:Id.Lit_Chars val:'\teol spaces Q\n' span_id:544) (Token id:Id.Lit_Chars val:'\tspace  change\n' span_id:545) 
          (Token id:Id.Lit_Chars val:'\tall spa ces\n' span_id:546) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:547) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "test space change" -a &&\n'
            span_id: 548
          ) (Token id:Id.Lit_Chars val:'\n' span_id:549) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b side HEAD^ &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >test &&\n' span_id:551) 
          (Token id:Id.Lit_Chars val:'\talways coalesce\n' span_id:552) (Token id:Id.Lit_Chars val:'\teol space coalesce\n' span_id:553) 
          (Token id:Id.Lit_Chars val:'\tspace change coalesce\n' span_id:554) (Token id:Id.Lit_Chars val:'\tall spaces coalesce\n' span_id:555) 
          (Token id:Id.Lit_Chars val:'\teol spaces\n' span_id:556) (Token id:Id.Lit_Chars val:'\tspace change\n' span_id:557) 
          (Token id:Id.Lit_Chars val:'\tall spaces\n' span_id:558) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:559) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "test other space changes" -a &&\n'
            span_id: 560
          ) (Token id:Id.Lit_Chars val:'\n' span_id:561) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:562) (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >test &&\n' span_id:563) 
          (Token id:Id.Lit_Chars val:'\teol spaces Q\n' span_id:564) (Token id:Id.Lit_Chars val:'\tspace  change\n' span_id:565) 
          (Token id:Id.Lit_Chars val:'\tall spa ces\n' span_id:566) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:567) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m merged -a\n' span_id:568)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check combined output (no ignore space)' span_id:575))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:579) 
          (Token id:Id.Lit_Chars val:'\tgit show >actual.tmp &&\n' span_id:580) (Token id:Id.Lit_Chars val:'\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n' span_id:581) 
          (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:582) (Token id:Id.Lit_Chars val:'\t--always coalesce\n' span_id:583) 
          (Token id:Id.Lit_Chars val:'\t- eol space coalesce\n' span_id:584) (Token id:Id.Lit_Chars val:'\t- space change coalesce\n' span_id:585) 
          (Token id:Id.Lit_Chars val:'\t- all spaces coalesce\n' span_id:586) (Token id:Id.Lit_Chars val:'\t- eol spaces\n' span_id:587) 
          (Token id:Id.Lit_Chars val:'\t- space change\n' span_id:588) (Token id:Id.Lit_Chars val:'\t- all spaces\n' span_id:589) 
          (Token id:Id.Lit_Chars val:'\t -eol space coalesce Q\n' span_id:590) (Token id:Id.Lit_Chars val:'\t -space  change coalesce\n' span_id:591) 
          (Token id:Id.Lit_Chars val:'\t -all spa ces coalesce\n' span_id:592) (Token id:Id.Lit_Chars val:'\t+ eol spaces Q\n' span_id:593) 
          (Token id:Id.Lit_Chars val:'\t+ space  change\n' span_id:594) (Token id:Id.Lit_Chars val:'\t+ all spa ces\n' span_id:595) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:596) (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual\n' span_id:597)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check combined output (ignore space at eol)' span_id:604))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:608) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show --ignore-space-at-eol >actual.tmp &&\n'
            span_id: 609
          ) (Token id:Id.Lit_Chars val:'\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n' span_id:610) 
          (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:611) (Token id:Id.Lit_Chars val:'\t--always coalesce\n' span_id:612) 
          (Token id:Id.Lit_Chars val:'\t--eol space coalesce\n' span_id:613) (Token id:Id.Lit_Chars val:'\t- space change coalesce\n' span_id:614) 
          (Token id:Id.Lit_Chars val:'\t- all spaces coalesce\n' span_id:615) (Token id:Id.Lit_Chars val:'\t -space  change coalesce\n' span_id:616) 
          (Token id:Id.Lit_Chars val:'\t -all spa ces coalesce\n' span_id:617) (Token id:Id.Lit_Chars val:'\t  eol spaces Q\n' span_id:618) 
          (Token id:Id.Lit_Chars val:'\t- space change\n' span_id:619) (Token id:Id.Lit_Chars val:'\t- all spaces\n' span_id:620) 
          (Token id:Id.Lit_Chars val:'\t+ space  change\n' span_id:621) (Token id:Id.Lit_Chars val:'\t+ all spa ces\n' span_id:622) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:623) (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual\n' span_id:624)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check combined output (ignore space change)' span_id:631))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:635) 
          (Token id:Id.Lit_Chars val:'\tgit show -b >actual.tmp &&\n' span_id:636) (Token id:Id.Lit_Chars val:'\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n' span_id:637) 
          (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:638) (Token id:Id.Lit_Chars val:'\t--always coalesce\n' span_id:639) 
          (Token id:Id.Lit_Chars val:'\t--eol space coalesce\n' span_id:640) (Token id:Id.Lit_Chars val:'\t--space change coalesce\n' span_id:641) 
          (Token id:Id.Lit_Chars val:'\t- all spaces coalesce\n' span_id:642) (Token id:Id.Lit_Chars val:'\t -all spa ces coalesce\n' span_id:643) 
          (Token id:Id.Lit_Chars val:'\t  eol spaces Q\n' span_id:644) (Token id:Id.Lit_Chars val:'\t  space  change\n' span_id:645) 
          (Token id:Id.Lit_Chars val:'\t- all spaces\n' span_id:646) (Token id:Id.Lit_Chars val:'\t+ all spa ces\n' span_id:647) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:648) (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual\n' span_id:649)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check combined output (ignore all spaces)' span_id:656))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:660) 
          (Token id:Id.Lit_Chars val:'\tgit show -w >actual.tmp &&\n' span_id:661) (Token id:Id.Lit_Chars val:'\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n' span_id:662) 
          (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:663) (Token id:Id.Lit_Chars val:'\t--always coalesce\n' span_id:664) 
          (Token id:Id.Lit_Chars val:'\t--eol space coalesce\n' span_id:665) (Token id:Id.Lit_Chars val:'\t--space change coalesce\n' span_id:666) 
          (Token id:Id.Lit_Chars val:'\t--all spaces coalesce\n' span_id:667) (Token id:Id.Lit_Chars val:'\t  eol spaces Q\n' span_id:668) 
          (Token id:Id.Lit_Chars val:'\t  space  change\n' span_id:669) (Token id:Id.Lit_Chars val:'\t  all spa ces\n' span_id:670) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:671) (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual\n' span_id:672)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'combine diff coalesce simple' span_id:679))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:683) 
          (Token id:Id.Lit_Chars val:'\t>test &&\n' span_id:684) (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:685) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:686) (Token id:Id.Lit_Chars val:'\ttest_seq 4 >test &&\n' span_id:687) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m empty1 &&\n' span_id:688) (Token id:Id.Lit_Chars val:'\tgit branch side1 &&\n' span_id:689) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:690) (Token id:Id.Lit_Chars val:'\ttest_seq 5 >test &&\n' span_id:691) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m empty2 &&\n' span_id:692) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge side1 &&\n' span_id:693) 
          (Token id:Id.Lit_Chars val:'\t>test &&\n' span_id:694) (Token id:Id.Lit_Chars val:'\tgit commit -a -m merge &&\n' span_id:695) 
          (Token id:Id.Lit_Chars val:'\tgit show >actual.tmp &&\n' span_id:696) (Token id:Id.Lit_Chars val:'\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n' span_id:697) 
          (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:698) (Token id:Id.Lit_Chars val:'\t--1\n' span_id:699) (Token id:Id.Lit_Chars val:'\t--2\n' span_id:700) 
          (Token id:Id.Lit_Chars val:'\t--3\n' span_id:701) (Token id:Id.Lit_Chars val:'\t--4\n' span_id:702) (Token id:Id.Lit_Chars val:'\t- 5\n' span_id:703) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:704) (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual\n' span_id:705)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'combine diff coalesce tricky' span_id:712))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:716) 
          (Token id:Id.Lit_Chars val:'\t>test &&\n' span_id:717) (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:718) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m initial --allow-empty &&\n'
            span_id: 719
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >test &&\n' span_id:720) 
          (Token id:Id.Lit_Chars val:'\t3\n' span_id:721) (Token id:Id.Lit_Chars val:'\t1\n' span_id:722) (Token id:Id.Lit_Chars val:'\t2\n' span_id:723) 
          (Token id:Id.Lit_Chars val:'\t3\n' span_id:724) (Token id:Id.Lit_Chars val:'\t4\n' span_id:725) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:726) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m empty1 &&\n' span_id:727) (Token id:Id.Lit_Chars val:'\tgit branch -f side1 &&\n' span_id:728) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:729) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >test &&\n' span_id:730) 
          (Token id:Id.Lit_Chars val:'\t1\n' span_id:731) (Token id:Id.Lit_Chars val:'\t3\n' span_id:732) (Token id:Id.Lit_Chars val:'\t5\n' span_id:733) 
          (Token id:Id.Lit_Chars val:'\t4\n' span_id:734) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:735) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m empty2 &&\n' span_id:736) (Token id:Id.Lit_Chars val:'\tgit branch -f side2 &&\n' span_id:737) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge side1 &&\n' span_id:738) (Token id:Id.Lit_Chars val:'\t>test &&\n' span_id:739) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m merge &&\n' span_id:740) (Token id:Id.Lit_Chars val:'\tgit show >actual.tmp &&\n' span_id:741) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n'
            span_id: 742
          ) (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:743) 
          (Token id:Id.Lit_Chars val:'\t -3\n' span_id:744) (Token id:Id.Lit_Chars val:'\t--1\n' span_id:745) (Token id:Id.Lit_Chars val:'\t -2\n' span_id:746) 
          (Token id:Id.Lit_Chars val:'\t--3\n' span_id:747) (Token id:Id.Lit_Chars val:'\t- 5\n' span_id:748) (Token id:Id.Lit_Chars val:'\t--4\n' span_id:749) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:750) (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual &&\n' span_id:751) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -f side1 &&\n' span_id:752) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge side2 &&\n' span_id:753) 
          (Token id:Id.Lit_Chars val:'\t>test &&\n' span_id:754) (Token id:Id.Lit_Chars val:'\tgit commit -a -m merge &&\n' span_id:755) 
          (Token id:Id.Lit_Chars val:'\tgit show >actual.tmp &&\n' span_id:756) (Token id:Id.Lit_Chars val:'\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n' span_id:757) 
          (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:758) (Token id:Id.Lit_Chars val:'\t- 3\n' span_id:759) (Token id:Id.Lit_Chars val:'\t--1\n' span_id:760) 
          (Token id:Id.Lit_Chars val:'\t- 2\n' span_id:761) (Token id:Id.Lit_Chars val:'\t--3\n' span_id:762) (Token id:Id.Lit_Chars val:'\t -5\n' span_id:763) 
          (Token id:Id.Lit_Chars val:'\t--4\n' span_id:764) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:765) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual\n' span_id:766)
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'combine diff coalesce three parents' span_id:773))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:777) 
          (Token id:Id.Lit_Chars val:'\t>test &&\n' span_id:778) (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:779) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m initial --allow-empty &&\n'
            span_id: 780
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >test &&\n' span_id:781) 
          (Token id:Id.Lit_Chars val:'\t3\n' span_id:782) (Token id:Id.Lit_Chars val:'\t1\n' span_id:783) (Token id:Id.Lit_Chars val:'\t2\n' span_id:784) 
          (Token id:Id.Lit_Chars val:'\t3\n' span_id:785) (Token id:Id.Lit_Chars val:'\t4\n' span_id:786) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:787) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m empty1 &&\n' span_id:788) (Token id:Id.Lit_Chars val:'\tgit checkout -B side1 &&\n' span_id:789) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:790) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >test &&\n' span_id:791) 
          (Token id:Id.Lit_Chars val:'\t1\n' span_id:792) (Token id:Id.Lit_Chars val:'\t3\n' span_id:793) (Token id:Id.Lit_Chars val:'\t7\n' span_id:794) 
          (Token id:Id.Lit_Chars val:'\t5\n' span_id:795) (Token id:Id.Lit_Chars val:'\t4\n' span_id:796) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:797) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m empty2 &&\n' span_id:798) (Token id:Id.Lit_Chars val:'\tgit branch -f side2 &&\n' span_id:799) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:800) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >test &&\n' span_id:801) 
          (Token id:Id.Lit_Chars val:'\t3\n' span_id:802) (Token id:Id.Lit_Chars val:'\t1\n' span_id:803) (Token id:Id.Lit_Chars val:'\t6\n' span_id:804) 
          (Token id:Id.Lit_Chars val:'\t5\n' span_id:805) (Token id:Id.Lit_Chars val:'\t4\n' span_id:806) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:807) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m empty3 &&\n' span_id:808) (Token id:Id.Lit_Chars val:'\t>test &&\n' span_id:809) 
          (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:810) (Token id:Id.Lit_Chars val:'\tTREE=$(git write-tree) &&\n' span_id:811) 
          (Token
            id: Id.Lit_Chars
            val: '\tCOMMIT=$(git commit-tree -p HEAD -p side1 -p side2 -m merge $TREE) &&\n'
            span_id: 812
          ) (Token id:Id.Lit_Chars val:'\tgit show $COMMIT >actual.tmp &&\n' span_id:813) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n'
            span_id: 814
          ) (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:815) 
          (Token id:Id.Lit_Chars val:'\t-- 3\n' span_id:816) (Token id:Id.Lit_Chars val:'\t---1\n' span_id:817) (Token id:Id.Lit_Chars val:'\t-  6\n' span_id:818) 
          (Token id:Id.Lit_Chars val:'\t - 2\n' span_id:819) (Token id:Id.Lit_Chars val:'\t --3\n' span_id:820) (Token id:Id.Lit_Chars val:'\t  -7\n' span_id:821) 
          (Token id:Id.Lit_Chars val:'\t- -5\n' span_id:822) (Token id:Id.Lit_Chars val:'\t---4\n' span_id:823) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:824) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual\n' span_id:825)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'combine diff missing delete bug' span_id:844))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:848) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m initial --allow-empty &&\n'
            span_id: 849
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >test &&\n' span_id:850) 
          (Token id:Id.Lit_Chars val:'\t1\n' span_id:851) (Token id:Id.Lit_Chars val:'\t2\n' span_id:852) (Token id:Id.Lit_Chars val:'\t3\n' span_id:853) 
          (Token id:Id.Lit_Chars val:'\t4\n' span_id:854) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:855) 
          (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:856) (Token id:Id.Lit_Chars val:'\tgit commit -a -m side1 &&\n' span_id:857) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B side1 &&\n' span_id:858) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:859) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >test &&\n' span_id:860) (Token id:Id.Lit_Chars val:'\t0\n' span_id:861) (Token id:Id.Lit_Chars val:'\t1\n' span_id:862) 
          (Token id:Id.Lit_Chars val:'\t2\n' span_id:863) (Token id:Id.Lit_Chars val:'\t3\n' span_id:864) 
          (Token id:Id.Lit_Chars val:'\t4modified\n' span_id:865) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:866) 
          (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:867) (Token id:Id.Lit_Chars val:'\tgit commit -m side2 &&\n' span_id:868) 
          (Token id:Id.Lit_Chars val:'\tgit branch -f side2 &&\n' span_id:869) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge --no-commit side1 &&\n' span_id:870) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >test &&\n' span_id:871) (Token id:Id.Lit_Chars val:'\t1\n' span_id:872) (Token id:Id.Lit_Chars val:'\t2\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'\t3\n' span_id:874) (Token id:Id.Lit_Chars val:'\t4modified\n' span_id:875) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:876) (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:877) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m merge &&\n' span_id:878) (Token id:Id.Lit_Chars val:'\tgit diff-tree -c -p HEAD >actual.tmp &&\n' span_id:879) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "1,/^@@@/d" < actual.tmp >actual &&\n'
            span_id: 880
          ) (Token id:Id.Lit_Chars val:'\ttr -d Q <<-\\EOF >expected &&\n' span_id:881) 
          (Token id:Id.Lit_Chars val:'\t- 0\n' span_id:882) (Token id:Id.Lit_Chars val:'\t  1\n' span_id:883) (Token id:Id.Lit_Chars val:'\t  2\n' span_id:884) 
          (Token id:Id.Lit_Chars val:'\t  3\n' span_id:885) (Token id:Id.Lit_Chars val:'\t -4\n' span_id:886) 
          (Token id:Id.Lit_Chars val:'\t +4modified\n' span_id:887) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:888) 
          (Token id:Id.Lit_Chars val:'\tcompare_diff_patch expected actual\n' span_id:889)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'combine diff gets tree sorting right' span_id:896))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:900) 
          (Token
            id: Id.Lit_Chars
            val: '\t# create a directory and a file that sort differently in trees\n'
            span_id: 901
          ) (Token id:Id.Lit_Chars val:'\t# versus byte-wise (implied "/" sorts after ".")\n' span_id:902) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -f master &&\n' span_id:903) (Token id:Id.Lit_Chars val:'\tmkdir foo &&\n' span_id:904) 
          (Token id:Id.Lit_Chars val:'\techo base >foo/one &&\n' span_id:905) (Token id:Id.Lit_Chars val:'\techo base >foo/two &&\n' span_id:906) 
          (Token id:Id.Lit_Chars val:'\techo base >foo.ext &&\n' span_id:907) (Token id:Id.Lit_Chars val:'\tgit add foo foo.ext &&\n' span_id:908) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:909) (Token id:Id.Lit_Chars val:'\n' span_id:910) 
          (Token
            id: Id.Lit_Chars
            val: '\t# one side modifies a file in the directory, along with the root\n'
            span_id: 911
          ) (Token id:Id.Lit_Chars val:'\t# file...\n' span_id:912) 
          (Token id:Id.Lit_Chars val:'\techo master >foo/one &&\n' span_id:913) (Token id:Id.Lit_Chars val:'\techo master >foo.ext &&\n' span_id:914) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m master &&\n' span_id:915) (Token id:Id.Lit_Chars val:'\n' span_id:916) 
          (Token
            id: Id.Lit_Chars
            val: '\t# the other side modifies the other file in the directory\n'
            span_id: 917
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -b other HEAD^ &&\n' span_id:918) 
          (Token id:Id.Lit_Chars val:'\techo other >foo/two &&\n' span_id:919) (Token id:Id.Lit_Chars val:'\tgit commit -a -m other &&\n' span_id:920) 
          (Token id:Id.Lit_Chars val:'\n' span_id:921) 
          (Token
            id: Id.Lit_Chars
            val: '\t# And now we merge. The files in the subdirectory will resolve cleanly,\n'
            span_id: 922
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# meaning that a combined diff will not find them interesting. But it\n'
            span_id: 923
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# will find the tree itself interesting, because it had to be merged.\n'
            span_id: 924
          ) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:925) 
          (Token id:Id.Lit_Chars val:'\tgit merge other &&\n' span_id:926) (Token id:Id.Lit_Chars val:'\n' span_id:927) 
          (Token id:Id.Lit_Chars val:'\tprintf "MM\\tfoo\\n" >expect &&\n' span_id:928) (Token id:Id.Lit_Chars val:'\tgit diff-tree -c --name-status -t HEAD >actual.tmp &&\n' span_id:929) 
          (Token id:Id.Lit_Chars val:'\tsed 1d <actual.tmp >actual &&\n' span_id:930) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:931)
        )
      }
    )
    (C {(test_done)})
  ]
)