(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"Test diff indent heuristic.\n"> <"\n">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/diff-lib.sh)})
    (FuncDef
      name: compare_diff
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(sed)} {(-e)} {(DQ ("/^index /d"))}]
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: -1
                  arg_word: {(DQ ($ VSub_Number "$1"))}
                  spids: [44]
                )
                (Redir op_id:Redir_Great fd:-1 arg_word:{(.tmp-1)} spids:[49])
              ]
            )
            (SimpleCommand
              words: [{(sed)} {(-e)} {(DQ ("/^index /d"))}]
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: -1
                  arg_word: {(DQ ($ VSub_Number "$2"))}
                  spids: [61]
                )
                (Redir op_id:Redir_Great fd:-1 arg_word:{(.tmp-2)} spids:[66])
              ]
            )
            (AndOr
              children: [(C {(test_cmp)} {(.tmp-1)} {(.tmp-2)}) (C {(rm)} {(-f)} {(.tmp-1)} {(.tmp-2)})]
              op_id: Op_DAmp
            )
          ]
          spids: [33]
        )
      spids: [28 32]
    )
    (FuncDef
      name: compare_blame
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [
                {(sed)}
                {(-n)}
                {(-e)}
                {(DQ ("1,4d"))}
                {(-e)}
                {(DQ ("s/^") (EscapedLiteralPart token:<Lit_EscapedChar "\\+">) (//p))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: -1
                  arg_word: {(DQ ($ VSub_Number "$1"))}
                  spids: [121]
                )
                (Redir op_id:Redir_Great fd:-1 arg_word:{(.tmp-1)} spids:[126])
              ]
            )
            (SimpleCommand
              words: [{(sed)} {(-ne)} {(DQ ("s/^[^^][^)]*) *//p"))}]
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: -1
                  arg_word: {(DQ ($ VSub_Number "$2"))}
                  spids: [138]
                )
                (Redir op_id:Redir_Great fd:-1 arg_word:{(.tmp-2)} spids:[143])
              ]
            )
            (AndOr
              children: [(C {(test_cmp)} {(.tmp-1)} {(.tmp-2)}) (C {(rm)} {(-f)} {(.tmp-1)} {(.tmp-2)})]
              op_id: Op_DAmp
            )
          ]
          spids: [100]
        )
      spids: [95 99]
    )
    (C {(test_expect_success)} {(SQ <prepare>)} 
      {
        (SQ <"\n"> <"\tcat <<-\\EOF >spaces.txt &&\n"> <"\t1\n"> <"\t2\n"> <"\ta\n"> <"\n"> <"\tb\n"> 
          <"\t3\n"> <"\t4\n"> <"\tEOF\n"> <"\n"> <"\tcat <<-\\EOF >functions.c &&\n"> <"\t1\n"> <"\t2\n"> 
          <"\t/* function */\n"> <"\tfoo() {\n"> <"\t    foo\n"> <"\t}\n"> <"\n"> <"\t3\n"> <"\t4\n"> <"\tEOF\n"> <"\n"> 
          <"\tgit add spaces.txt functions.c &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m initial &&\n"> <"\tgit branch old &&\n"> <"\n"> 
          <"\tcat <<-\\EOF >spaces.txt &&\n"> <"\t1\n"> <"\t2\n"> <"\ta\n"> <"\n"> <"\tb\n"> <"\ta\n"> <"\n"> <"\tb\n"> <"\t3\n"> <"\t4\n"> <"\tEOF\n"> <"\n"> 
          <"\tcat <<-\\EOF >functions.c &&\n"> <"\t1\n"> <"\t2\n"> <"\t/* function */\n"> <"\tbar() {\n"> <"\t    foo\n"> <"\t}\n"> <"\n"> 
          <"\t/* function */\n"> <"\tfoo() {\n"> <"\t    foo\n"> <"\t}\n"> <"\n"> <"\t3\n"> <"\t4\n"> <"\tEOF\n"> <"\n"> 
          <"\tgit add spaces.txt functions.c &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m initial &&\n"> <"\tgit branch new &&\n"> <"\n"> 
          <"\ttr \"_\" \" \" <<-\\EOF >spaces-expect &&\n"> <"\tdiff --git a/spaces.txt b/spaces.txt\n"> <"\t--- a/spaces.txt\n"> <"\t+++ b/spaces.txt\n"> 
          <"\t@@ -3,5 +3,8 @@\n"> <"\t a\n"> <"\t_\n"> <"\t b\n"> <"\t+a\n"> <"\t+\n"> <"\t+b\n"> <"\t 3\n"> <"\t 4\n"> <"\tEOF\n"> <"\n"> 
          <"\ttr \"_\" \" \" <<-\\EOF >spaces-compacted-expect &&\n"> <"\tdiff --git a/spaces.txt b/spaces.txt\n"> <"\t--- a/spaces.txt\n"> <"\t+++ b/spaces.txt\n"> 
          <"\t@@ -2,6 +2,9 @@\n"> <"\t 2\n"> <"\t a\n"> <"\t_\n"> <"\t+b\n"> <"\t+a\n"> <"\t+\n"> <"\t b\n"> <"\t 3\n"> <"\t 4\n"> <"\tEOF\n"> 
          <"\n"> <"\ttr \"_\" \" \" <<-\\EOF >functions-expect &&\n"> <"\tdiff --git a/functions.c b/functions.c\n"> 
          <"\t--- a/functions.c\n"> <"\t+++ b/functions.c\n"> <"\t@@ -1,6 +1,11 @@\n"> <"\t 1\n"> <"\t 2\n"> <"\t /* function */\n"> 
          <"\t+bar() {\n"> <"\t+    foo\n"> <"\t+}\n"> <"\t+\n"> <"\t+/* function */\n"> <"\t foo() {\n"> <"\t     foo\n"> <"\t }\n"> 
          <"\tEOF\n"> <"\n"> <"\ttr \"_\" \" \" <<-\\EOF >functions-compacted-expect\n"> 
          <"\tdiff --git a/functions.c b/functions.c\n"> <"\t--- a/functions.c\n"> <"\t+++ b/functions.c\n"> <"\t@@ -1,5 +1,10 @@\n"> <"\t 1\n"> <"\t 2\n"> 
          <"\t+/* function */\n"> <"\t+bar() {\n"> <"\t+    foo\n"> <"\t+}\n"> <"\t+\n"> <"\t /* function */\n"> <"\t foo() {\n"> 
          <"\t     foo\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff: ugly spaces">)} 
      {
        (SQ <"\n"> <"\tgit diff old new -- spaces.txt >out &&\n"> 
          <"\tcompare_diff spaces-expect out\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff: nice spaces with --indent-heuristic">)} 
      {
        (SQ <"\n"> <"\tgit diff --indent-heuristic old new -- spaces.txt >out-compacted &&\n"> 
          <"\tcompare_diff spaces-compacted-expect out-compacted\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff: nice spaces with diff.indentHeuristic">)} 
      {
        (SQ <"\n"> 
          <"\tgit -c diff.indentHeuristic=true diff old new -- spaces.txt >out-compacted2 &&\n"> <"\tcompare_diff spaces-compacted-expect out-compacted2\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff: --no-indent-heuristic overrides config">)} 
      {
        (SQ <"\n"> 
          <
"\tgit -c diff.indentHeuristic=true diff --no-indent-heuristic old new -- spaces.txt >out2 &&\n"
          > <"\tcompare_diff spaces-expect out2\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff: --indent-heuristic with --patience">)} 
      {
        (SQ <"\n"> 
          <"\tgit diff --indent-heuristic --patience old new -- spaces.txt >out-compacted3 &&\n"> <"\tcompare_diff spaces-compacted-expect out-compacted3\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff: --indent-heuristic with --histogram">)} 
      {
        (SQ <"\n"> 
          <"\tgit diff --indent-heuristic --histogram old new -- spaces.txt >out-compacted4 &&\n"> <"\tcompare_diff spaces-compacted-expect out-compacted4\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff: ugly functions">)} 
      {
        (SQ <"\n"> <"\tgit diff old new -- functions.c >out &&\n"> 
          <"\tcompare_diff functions-expect out\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff: nice functions with --indent-heuristic">)} 
      {
        (SQ <"\n"> <"\tgit diff --indent-heuristic old new -- functions.c >out-compacted &&\n"> 
          <"\tcompare_diff functions-compacted-expect out-compacted\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"blame: ugly spaces">)} 
      {
        (SQ <"\n"> <"\tgit blame old..new -- spaces.txt >out-blame &&\n"> 
          <"\tcompare_blame spaces-expect out-blame\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"blame: nice spaces with --indent-heuristic">)} 
      {
        (SQ <"\n"> <"\tgit blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted &&\n"> 
          <"\tcompare_blame spaces-compacted-expect out-blame-compacted\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"blame: nice spaces with diff.indentHeuristic">)} 
      {
        (SQ <"\n"> 
          <
"\tgit -c diff.indentHeuristic=true blame old..new -- spaces.txt >out-blame-compacted2 &&\n"
          > <"\tcompare_blame spaces-compacted-expect out-blame-compacted2\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"blame: --no-indent-heuristic overrides config">)} 
      {
        (SQ <"\n"> 
          <
"\tgit -c diff.indentHeuristic=true blame --no-indent-heuristic old..new -- spaces.txt >out-blame2 &&\n"
          > <"\tgit blame old..new -- spaces.txt >out-blame &&\n"> <"\tcompare_blame spaces-expect out-blame2\n">
        )
      }
    )
    (C {(test_done)})
  ]
)