(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'test parsing of svndiff0 files\n'> <'\n'> 
                <'Using the "test-svn-fe -d" helper, check that svn-fe correctly\n'> <'interprets deltas using various facilities (some from the spec,\n'> 
                <'some only learned from practice).\n'>
              )
            }
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.Simple
      redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<empty>})]
      do_fork: F
    )
    (command.Simple
      words: [{<printf>} {<foo>}]
      redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<preimage>})]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'reject empty delta'>)} 
      {(SQ <'\n'> <'\ttest_must_fail test-svn-fe -d preimage empty 0\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'delta can empty file'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ" | q_to_nul >clear.delta &&\n'> 
          <'\ttest-svn-fe -d preimage clear.delta 4 >actual &&\n'> <'\ttest_cmp empty actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'reject svndiff2'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVN\\002" >bad.filetype &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage bad.filetype 4\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'one-window empty delta'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%s" "QQQQQ" | q_to_nul >clear.onewindow &&\n'> 
          <'\ttest-svn-fe -d preimage clear.onewindow 9 >actual &&\n'> <'\ttest_cmp empty actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'reject incomplete window header'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%s" "QQQQQ" | q_to_nul >clear.onewindow &&\n'> 
          <'\tprintf "SVNQ%s" "QQ" | q_to_nul >clear.partialwindow &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.onewindow 6 &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage clear.partialwindow 6\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'reject declared delta longer than actual delta'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%s" "QQQQQ" | q_to_nul >clear.onewindow &&\n'> 
          <'\tprintf "SVNQ%s" "QQ" | q_to_nul >clear.partialwindow &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.onewindow 14 &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage clear.partialwindow 9\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'two-window empty delta'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%s%s" "QQQQQ" "QQQQQ" | q_to_nul >clear.twowindow &&\n'> 
          <'\ttest-svn-fe -d preimage clear.twowindow 14 >actual &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.twowindow 13 &&\n'> <'\ttest_cmp empty actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'noisy zeroes'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%s" \\\n'> 
          <'\t\t"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQQQQQ" |\n'> <'\t\ttr R "\\200" |\n'> <'\t\tq_to_nul >clear.noisy &&\n'> <'\tlen=$(wc -c <clear.noisy) &&\n'> 
          <'\ttest-svn-fe -d preimage clear.noisy $len &&\n'> <'\ttest_cmp empty actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'reject variable-length int in magic'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNRQ" | tr R "\\200" | q_to_nul >clear.badmagic &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage clear.badmagic 5\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'reject truncated integer'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%s%s" "QQQQQ" "QQQQRRQ" |\n'> <'\t\ttr R "\\200" |\n'> 
          <'\t\tq_to_nul >clear.fullint &&\n'> <'\tprintf "SVNQ%s%s" "QQQQQ" "QQQQRR" |\n'> <'\t\ttr RT "\\201" |\n'> 
          <'\t\tq_to_nul >clear.partialint &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.fullint 15 &&\n'> 
          <'\ttest-svn-fe -d preimage clear.fullint 16 &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.partialint 15\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'nonempty (but unused) preimage view'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b" "Q\\003QQQ" | q_to_nul >clear.readpreimage &&\n'> 
          <'\ttest-svn-fe -d preimage clear.readpreimage 9 >actual &&\n'> <'\ttest_cmp empty actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'preimage view: right endpoint cannot backtrack'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%b" "Q\\003QQQ" "Q\\002QQQ" |\n'> 
          <'\t\tq_to_nul >clear.backtrack &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.backtrack 14\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'preimage view: left endpoint can advance'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%b" "Q\\003QQQ" "\\001\\002QQQ" |\n'> 
          <'\t\tq_to_nul >clear.preshrink &&\n'> <'\tprintf "SVNQ%b%b" "Q\\003QQQ" "\\001\\001QQQ" |\n'> <'\t\tq_to_nul >clear.shrinkbacktrack &&\n'> 
          <'\ttest-svn-fe -d preimage clear.preshrink 14 >actual &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.shrinkbacktrack 14 &&\n'> 
          <'\ttest_cmp empty actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'preimage view: offsets compared by value'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%b" "\\001\\001QQQ" "\\0200Q\\003QQQ" |\n'> 
          <'\t\tq_to_nul >clear.noisybacktrack &&\n'> <'\tprintf "SVNQ%b%b" "\\001\\001QQQ" "\\0200\\001\\002QQQ" |\n'> 
          <'\t\tq_to_nul >clear.noisyadvance &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.noisybacktrack 15 &&\n'> 
          <'\ttest-svn-fe -d preimage clear.noisyadvance 15 &&\n'> <'\ttest_cmp empty actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'preimage view: reject truncated preimage'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b" "\\010QQQQ" | q_to_nul >clear.lateemptyread &&\n'> 
          <'\tprintf "SVNQ%b" "\\010\\001QQQ" | q_to_nul >clear.latenonemptyread &&\n'> <'\tprintf "SVNQ%b" "\\001\\010QQQ" | q_to_nul >clear.longread &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage clear.lateemptyread 9 &&\n'> <'\ttest_must_fail test-svn-fe -d preimage clear.latenonemptyread 9 &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage clear.longread 9\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'forbid unconsumed inline data'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%s%b%s" "QQQQ\\003" "bar" "QQQQ\\001" "x" |\n'> 
          <'\t\tq_to_nul >inline.clear &&\n'> <'\ttest_must_fail test-svn-fe -d preimage inline.clear 18 >actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'reject truncated inline data'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%s" "QQQQ\\003" "b" | q_to_nul >inline.trunc &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage inline.trunc 10\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'reject truncated inline data (after instruction section)'>)} 
      {
        (SQ <'\n'> 
          <'\tprintf "SVNQ%b%b%s" "QQ\\001\\001\\003" "\\0201" "b" | q_to_nul >insn.trunc &&\n'> <'\ttest_must_fail test-svn-fe -d preimage insn.trunc 11\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <copyfrom_data>)} 
      {
        (SQ <'\n'> <'\techo hi >expect &&\n'> 
          <'\tprintf "SVNQ%b%b%b" "QQ\\003\\001\\003" "\\0203" "hi\\n" | q_to_nul >copydat &&\n'> <'\ttest-svn-fe -d preimage copydat 13 >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'multiple copyfrom_data'>)} 
      {
        (SQ <'\n'> <'\techo hi >expect &&\n'> 
          <'\tprintf "SVNQ%b%b%b%b%b" "QQ\\003\\002\\003" "\\0201\\0202" "hi\\n" \\\n'> <'\t\t"QQQ\\002Q" "\\0200Q" | q_to_nul >copy.multi &&\n'> <'\tlen=$(wc -c <copy.multi) &&\n'> 
          <'\ttest-svn-fe -d preimage copy.multi $len >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'incomplete multiple insn'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%b%b" "QQ\\003\\002\\003" "\\0203\\0200" "hi\\n" |\n'> 
          <'\t\tq_to_nul >copy.partial &&\n'> <'\tlen=$(wc -c <copy.partial) &&\n'> <'\ttest_must_fail test-svn-fe -d preimage copy.partial $len\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'catch attempt to copy missing data'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%b%s%b%s" "QQ\\002\\002\\001" "\\0201\\0201" "X" \\\n'> 
          <'\t\t\t"QQQQ\\002" "YZ" |\n'> <'\t\tq_to_nul >copy.incomplete &&\n'> <'\tlen=$(wc -c <copy.incomplete) &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage copy.incomplete $len\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'copyfrom target to repeat data'>)} 
      {
        (SQ <'\n'> <'\tprintf foofoo >expect &&\n'> 
          <'\tprintf "SVNQ%b%b%s" "QQ\\006\\004\\003" "\\0203\\0100\\003Q" "foo" |\n'> <'\t\tq_to_nul >copytarget.repeat &&\n'> <'\tlen=$(wc -c <copytarget.repeat) &&\n'> 
          <'\ttest-svn-fe -d preimage copytarget.repeat $len >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'copyfrom target out of order'>)} 
      {
        (SQ <'\n'> <'\tprintf foooof >expect &&\n'> <'\tprintf "SVNQ%b%b%s" \\\n'> 
          <'\t\t"QQ\\006\\007\\003" "\\0203\\0101\\002\\0101\\001\\0101Q" "foo" |\n'> <'\t\tq_to_nul >copytarget.reverse &&\n'> <'\tlen=$(wc -c <copytarget.reverse) &&\n'> 
          <'\ttest-svn-fe -d preimage copytarget.reverse $len >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'catch copyfrom future'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%b%s" "QQ\\004\\004\\003" "\\0202\\0101\\002\\0201" "XYZ" |\n'> 
          <'\t\tq_to_nul >copytarget.infuture &&\n'> <'\tlen=$(wc -c <copytarget.infuture) &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage copytarget.infuture $len\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'copy to sustain'>)} 
      {
        (SQ <'\n'> <'\tprintf XYXYXYXYXYXZ >expect &&\n'> 
          <'\tprintf "SVNQ%b%b%s" "QQ\\014\\004\\003" "\\0202\\0111Q\\0201" "XYZ" |\n'> <'\t\tq_to_nul >copytarget.sustain &&\n'> <'\tlen=$(wc -c <copytarget.sustain) &&\n'> 
          <'\ttest-svn-fe -d preimage copytarget.sustain $len >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'catch copy that overflows'>)} 
      {
        (SQ <'\n'> <'\tprintf "SVNQ%b%b%s" "QQ\\003\\003\\001" "\\0201\\0177Q" X |\n'> 
          <'\t\tq_to_nul >copytarget.overflow &&\n'> <'\tlen=$(wc -c <copytarget.overflow) &&\n'> 
          <'\ttest_must_fail test-svn-fe -d preimage copytarget.overflow $len\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'copyfrom source'>)} 
      {
        (SQ <'\n'> <'\tprintf foo >expect &&\n'> 
          <'\tprintf "SVNQ%b%b" "Q\\003\\003\\002Q" "\\003Q" | q_to_nul >copysource.all &&\n'> <'\ttest-svn-fe -d preimage copysource.all 11 >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'copy backwards'>)} 
      {
        (SQ <'\n'> <'\tprintf oof >expect &&\n'> 
          <'\tprintf "SVNQ%b%b" "Q\\003\\003\\006Q" "\\001\\002\\001\\001\\001Q" |\n'> <'\t\tq_to_nul >copysource.rev &&\n'> <'\ttest-svn-fe -d preimage copysource.rev 15 >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'offsets are relative to window'>)} 
      {
        (SQ <'\n'> <'\tprintf fo >expect &&\n'> 
          <'\tprintf "SVNQ%b%b%b%b" "Q\\003\\001\\002Q" "\\001Q" \\\n'> <'\t\t"\\002\\001\\001\\002Q" "\\001Q" |\n'> <'\t\tq_to_nul >copysource.two &&\n'> 
          <'\ttest-svn-fe -d preimage copysource.two 18 >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'example from notes/svndiff'>)} 
      {
        (SQ <'\n'> <'\tprintf aaaaccccdddddddd >expect &&\n'> <'\tprintf aaaabbbbcccc >source &&\n'> 
          <'\tprintf "SVNQ%b%b%s" "Q\\014\\020\\007\\001" \\\n'> <'\t\t"\\004Q\\004\\010\\0201\\0107\\010" d |\n'> <'\t\tq_to_nul >delta.example &&\n'> 
          <'\tlen=$(wc -c <delta.example) &&\n'> <'\ttest-svn-fe -d source delta.example $len >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)