(command.CommandList
  children: [
    (command.FuncDef
      name: test_diff_frobnitz
      body: 
        (command.BraceGroup
          children: [
            (command.SimpleCommand
              words: [{(cat)}]
              redirects: [
                (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(file1)})
                (redir.HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
                  here_end_span_id: 57
                  stdin_parts: [
                    ('#include <stdio.h>\n')
                    ('\n')
                    ('// Frobs foo heartily\n')
                    ('int frobnitz(int foo)\n')
                    ('{\n')
                    ('    int i;\n')
                    ('    for(i = 0; i < 10; i++)\n')
                    ('    {\n')
                    ('        printf("Your answer is: ");\n')
                    ('        printf("%d\\n", foo);\n')
                    ('    }\n')
                    ('}\n')
                    ('\n')
                    ('int fact(int n)\n')
                    ('{\n')
                    ('    if(n > 1)\n')
                    ('    {\n')
                    ('        return fact(n-1) * n;\n')
                    ('    }\n')
                    ('    return 1;\n')
                    ('}\n')
                    ('\n')
                    ('int main(int argc, char **argv)\n')
                    ('{\n')
                    ('    frobnitz(fact(10));\n')
                    ('}\n')
                  ]
                )
              ]
            )
            (command.SimpleCommand
              words: [{(cat)}]
              redirects: [
                (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(file2)})
                (redir.HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
                  here_end_span_id: 94
                  stdin_parts: [
                    ('#include <stdio.h>\n')
                    ('\n')
                    ('int fib(int n)\n')
                    ('{\n')
                    ('    if(n > 2)\n')
                    ('    {\n')
                    ('        return fib(n-1) + fib(n-2);\n')
                    ('    }\n')
                    ('    return 1;\n')
                    ('}\n')
                    ('\n')
                    ('// Frobs foo heartily\n')
                    ('int frobnitz(int foo)\n')
                    ('{\n')
                    ('    int i;\n')
                    ('    for(i = 0; i < 10; i++)\n')
                    ('    {\n')
                    ('        printf("%d\\n", foo);\n')
                    ('    }\n')
                    ('}\n')
                    ('\n')
                    ('int main(int argc, char **argv)\n')
                    ('{\n')
                    ('    frobnitz(fib(10));\n')
                    ('}\n')
                  ]
                )
              ]
            )
            (command.SimpleCommand
              words: [{(cat)}]
              redirects: [
                (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expect)})
                (redir.HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
                  here_end_span_id: 147
                  stdin_parts: [
                    ('diff --git a/file1 b/file2\n')
                    ('index 6faa5a3..e3af329 100644\n')
                    ('--- a/file1\n')
                    ('+++ b/file2\n')
                    ('@@ -1,26 +1,25 @@\n')
                    (' #include <stdio.h>\n')
                    (' \n')
                    ('+int fib(int n)\n')
                    ('+{\n')
                    ('+    if(n > 2)\n')
                    ('+    {\n')
                    ('+        return fib(n-1) + fib(n-2);\n')
                    ('+    }\n')
                    ('+    return 1;\n')
                    ('+}\n')
                    ('+\n')
                    (' // Frobs foo heartily\n')
                    (' int frobnitz(int foo)\n')
                    (' {\n')
                    ('     int i;\n')
                    ('     for(i = 0; i < 10; i++)\n')
                    ('     {\n')
                    ('-        printf("Your answer is: ");\n')
                    ('         printf("%d\\n", foo);\n')
                    ('     }\n')
                    (' }\n')
                    (' \n')
                    ('-int fact(int n)\n')
                    ('-{\n')
                    ('-    if(n > 1)\n')
                    ('-    {\n')
                    ('-        return fact(n-1) * n;\n')
                    ('-    }\n')
                    ('-    return 1;\n')
                    ('-}\n')
                    ('-\n')
                    (' int main(int argc, char **argv)\n')
                    (' {\n')
                    ('-    frobnitz(fact(10));\n')
                    ('+    frobnitz(fib(10));\n')
                    (' }\n')
                  ]
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:STRATEGY spids:[150])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [150]
                )
              ]
              spids: [150]
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$STRATEGY') (' diff'))} 
              {
                (SQ <'\n'> 
                  <
'\t\ttest_must_fail git diff --no-index "--$STRATEGY" file1 file2 > output &&\n'
                  > <'\t\ttest_cmp expect output\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Name '$STRATEGY') (' diff output is valid'))} 
              {
                (SQ <'\n'> <'\t\tmv file2 expect &&\n'> <'\t\tgit apply < output &&\n'> 
                  <'\t\ttest_cmp expect file2\n'> <'\t'>
                )
              }
            )
          ]
          spids: [19]
        )
      spids: [15 18]
    )
    (command.FuncDef
      name: test_diff_unique
      body: 
        (command.BraceGroup
          children: [
            (command.SimpleCommand
              words: [{(cat)}]
              redirects: [
                (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(uniq1)})
                (redir.HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
                  here_end_span_id: 211
                  stdin_parts: [('1\n') ('2\n') ('3\n') ('4\n') ('5\n') ('6\n')]
                )
              ]
            )
            (command.SimpleCommand
              words: [{(cat)}]
              redirects: [
                (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(uniq2)})
                (redir.HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
                  here_end_span_id: 229
                  stdin_parts: [('a\n') ('b\n') ('c\n') ('d\n') ('e\n') ('f\n')]
                )
              ]
            )
            (command.SimpleCommand
              words: [{(cat)}]
              redirects: [
                (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expect)})
                (redir.HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
                  here_end_span_id: 258
                  stdin_parts: [
                    ('diff --git a/uniq1 b/uniq2\n')
                    ('index b414108..0fdf397 100644\n')
                    ('--- a/uniq1\n')
                    ('+++ b/uniq2\n')
                    ('@@ -1,6 +1,6 @@\n')
                    ('-1\n')
                    ('-2\n')
                    ('-3\n')
                    ('-4\n')
                    ('-5\n')
                    ('-6\n')
                    ('+a\n')
                    ('+b\n')
                    ('+c\n')
                    ('+d\n')
                    ('+e\n')
                    ('+f\n')
                  ]
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:STRATEGY spids:[261])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [261]
                )
              ]
              spids: [261]
            )
            (C {(test_expect_success)} {(SQ <'completely different files'>)} 
              {
                (SQ <'\n'> 
                  <
'\t\ttest_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output &&\n'
                  > <'\t\ttest_cmp expect output\n'> <'\t'>
                )
              }
            )
          ]
          spids: [193]
        )
      spids: [189 192]
    )
  ]
)