(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:'merge-recursive rename options\n' span_id:6) 
                (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:'Test rename detection by examining rename/delete conflicts.\n' span_id:8) 
                (Token id:Id.Lit_Chars val:'\n' span_id:9) (Token id:Id.Lit_Chars val:'* (HEAD -> rename) rename\n' span_id:10) 
                (Token id:Id.Lit_Chars val:'| * (master) delete\n' span_id:11) (Token id:Id.Lit_Chars val:'|/\n' span_id:12) (Token id:Id.Lit_Chars val:'* base\n' span_id:13) 
                (Token id:Id.Lit_Chars val:'\n' span_id:14) (Token id:Id.Lit_Chars val:'git diff --name-status base master\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'D\t0-old\n' span_id:16) (Token id:Id.Lit_Chars val:'D\t1-old\n' span_id:17) 
                (Token id:Id.Lit_Chars val:'D\t2-old\n' span_id:18) (Token id:Id.Lit_Chars val:'D\t3-old\n' span_id:19) (Token id:Id.Lit_Chars val:'\n' span_id:20) 
                (Token
                  id: Id.Lit_Chars
                  val: 'git diff --name-status -M01 base rename\n'
                  span_id: 21
                ) (Token id:Id.Lit_Chars val:'R025    0-old   0-new\n' span_id:22) 
                (Token id:Id.Lit_Chars val:'R050    1-old   1-new\n' span_id:23) (Token id:Id.Lit_Chars val:'R075    2-old   2-new\n' span_id:24) 
                (Token id:Id.Lit_Chars val:'R100    3-old   3-new\n' span_id:25) (Token id:Id.Lit_Chars val:'\n' span_id:26) 
                (Token
                  id: Id.Lit_Chars
                  val: 
'Actual similarity indices are parsed from diff output. We rely on the fact that\n'
                  span_id: 27
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: 
'they are rounded down (see, e.g., Documentation/diff-generate-patch.txt, which\n'
                  span_id: 28
                ) (Token id:Id.Lit_Chars val:'mentions this in a different context).\n' span_id:29)
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: get_expected_stages
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(git)} {(checkout)} {(rename)} {(--)} {($ Id.VSub_Number '$1') (-new)})
                (command.Simple
                  words: [{(git)} {(ls-files)} {(--stage)} {($ Id.VSub_Number '$1') (-new)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:69)
                      fd: -1
                      arg_word: {(expected-stages-undetected-) ($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (command.Simple
                  words: [{(sed)} {(DQ ('s/ 0\t/ 2\t/'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:82)
                      fd: -1
                      arg_word: {(expected-stages-undetected-) ($ Id.VSub_Number '$1')}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:88)
                      fd: -1
                      arg_word: {(expected-stages-detected-) ($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (C {(git)} {(read-tree)} {(-u)} {(--reset)} {(HEAD)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: rename_detected
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(git)}
                    {(ls-files)}
                    {(--stage)}
                    {($ Id.VSub_Number '$1') (-old)}
                    {($ Id.VSub_Number '$1') (-new)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:128)
                      fd: -1
                      arg_word: {(stages-actual-) ($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (C {(test_cmp)} {(expected-stages-detected-) ($ Id.VSub_Number '$1')} 
                  {(stages-actual-) ($ Id.VSub_Number '$1')}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: rename_undetected
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(git)}
                    {(ls-files)}
                    {(--stage)}
                    {($ Id.VSub_Number '$1') (-old)}
                    {($ Id.VSub_Number '$1') (-new)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:166)
                      fd: -1
                      arg_word: {(stages-actual-) ($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (C {(test_cmp)} {(expected-stages-undetected-) ($ Id.VSub_Number '$1')} 
                  {(stages-actual-) ($ Id.VSub_Number '$1')}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_common
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(git)} {(ls-files)} {(--stage)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:198)
                      fd: -1
                      arg_word: {(stages-actual)}
                    )
                  ]
                )
                (C {(test_line_count)} {(Id.Lit_Equals '=')} {(4)} {(stages-actual)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_threshold_0
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(check_common)})
                (C {(rename_detected)} {(0)})
                (C {(rename_detected)} {(1)})
                (C {(rename_detected)} {(2)})
                (C {(rename_detected)} {(3)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_threshold_1
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(check_common)})
                (C {(rename_undetected)} {(0)})
                (C {(rename_detected)} {(1)})
                (C {(rename_detected)} {(2)})
                (C {(rename_detected)} {(3)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_threshold_2
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(check_common)})
                (C {(rename_undetected)} {(0)})
                (C {(rename_undetected)} {(1)})
                (C {(rename_detected)} {(2)})
                (C {(rename_detected)} {(3)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_exact_renames
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(check_common)})
                (C {(rename_undetected)} {(0)})
                (C {(rename_undetected)} {(1)})
                (C {(rename_undetected)} {(2)})
                (C {(rename_detected)} {(3)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_no_renames
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(check_common)})
                (C {(rename_undetected)} {(0)})
                (C {(rename_undetected)} {(1)})
                (C {(rename_undetected)} {(2)})
                (C {(rename_undetected)} {(3)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup repo' span_id:423))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:427) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >3-old &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\t33a\n' span_id:429) (Token id:Id.Lit_Chars val:'\t33b\n' span_id:430) 
          (Token id:Id.Lit_Chars val:'\t33c\n' span_id:431) (Token id:Id.Lit_Chars val:'\t33d\n' span_id:432) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:433) 
          (Token id:Id.Lit_Chars val:'\tsed s/33/22/ <3-old >2-old &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\tsed s/33/11/ <3-old >1-old &&\n' span_id:435) 
          (Token id:Id.Lit_Chars val:'\tsed s/33/00/ <3-old >0-old &&\n' span_id:436) (Token id:Id.Lit_Chars val:'\tgit add [0-3]-old &&\n' span_id:437) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:438) (Token id:Id.Lit_Chars val:'\tgit rm [0-3]-old &&\n' span_id:439) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m delete &&\n' span_id:440) (Token id:Id.Lit_Chars val:'\tgit checkout -b rename HEAD^ &&\n' span_id:441) 
          (Token id:Id.Lit_Chars val:'\tcp 3-old 3-new &&\n' span_id:442) (Token id:Id.Lit_Chars val:'\tsed 1,1s/./x/ <2-old >2-new &&\n' span_id:443) 
          (Token id:Id.Lit_Chars val:'\tsed 1,2s/./x/ <1-old >1-new &&\n' span_id:444) (Token id:Id.Lit_Chars val:'\tsed 1,3s/./x/ <0-old >0-new &&\n' span_id:445) 
          (Token id:Id.Lit_Chars val:'\tgit add [0-3]-new &&\n' span_id:446) (Token id:Id.Lit_Chars val:'\tgit rm [0-3]-old &&\n' span_id:447) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m rename &&\n' span_id:448) (Token id:Id.Lit_Chars val:'\tget_expected_stages 0 &&\n' span_id:449) 
          (Token id:Id.Lit_Chars val:'\tget_expected_stages 1 &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\tget_expected_stages 2 &&\n' span_id:451) 
          (Token id:Id.Lit_Chars val:'\tget_expected_stages 3 &&\n' span_id:452) (Token id:Id.Lit_Chars val:'\tcheck_50="false" &&\n' span_id:453) 
          (Token id:Id.Lit_Chars val:'\ttail="HEAD^ -- HEAD master"\n' span_id:454)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup thresholds' span_id:461))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:465) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-status -M01 HEAD^ HEAD >diff-output &&\n'
            span_id: 466
          ) (Token id:Id.Lit_Chars val:'\ttest_debug "cat diff-output" &&\n' span_id:467) 
          (Token id:Id.Lit_Chars val:'\ttest_line_count = 4 diff-output &&\n' span_id:468) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "R[0-9][0-9][0-9]\t\\([0-3]\\)-old\t\\1-new" diff-output \\\n'
            span_id: 469
          ) (Token id:Id.Lit_Chars val:'\t\t>grep-output &&\n' span_id:470) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp diff-output grep-output &&\n' span_id:471) 
          (Token
            id: Id.Lit_Chars
            val: '\tth0=$(sed -n "s/R\\(...\\)\t0-old\t0-new/\\1/p" <diff-output) &&\n'
            span_id: 472
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tth1=$(sed -n "s/R\\(...\\)\t1-old\t1-new/\\1/p" <diff-output) &&\n'
            span_id: 473
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tth2=$(sed -n "s/R\\(...\\)\t2-old\t2-new/\\1/p" <diff-output) &&\n'
            span_id: 474
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tth3=$(sed -n "s/R\\(...\\)\t3-old\t3-new/\\1/p" <diff-output) &&\n'
            span_id: 475
          ) (Token id:Id.Lit_Chars val:'\ttest "$th0" -lt "$th1" &&\n' span_id:476) 
          (Token id:Id.Lit_Chars val:'\ttest "$th1" -lt "$th2" &&\n' span_id:477) (Token id:Id.Lit_Chars val:'\ttest "$th2" -lt "$th3" &&\n' span_id:478) 
          (Token id:Id.Lit_Chars val:'\ttest "$th3" = 100 &&\n' span_id:479) (Token id:Id.Lit_Chars val:'\tif test 50 -le "$th0"\n' span_id:480) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:481) (Token id:Id.Lit_Chars val:'\t\tcheck_50=check_threshold_0\n' span_id:482) 
          (Token id:Id.Lit_Chars val:'\telif test 50 -le "$th1"\n' span_id:483) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:484) 
          (Token id:Id.Lit_Chars val:'\t\tcheck_50=check_threshold_1\n' span_id:485) (Token id:Id.Lit_Chars val:'\telif test 50 -le "$th2"\n' span_id:486) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:487) (Token id:Id.Lit_Chars val:'\t\tcheck_50=check_threshold_2\n' span_id:488) 
          (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:489) (Token id:Id.Lit_Chars val:'\tth0="$th0%" &&\n' span_id:490) 
          (Token id:Id.Lit_Chars val:'\tth1="$th1%" &&\n' span_id:491) (Token id:Id.Lit_Chars val:'\tth2="$th2%" &&\n' span_id:492) 
          (Token id:Id.Lit_Chars val:'\tth3="$th3%"\n' span_id:493)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'assumption for tests: rename detection with diff'
            span_id: 500
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:504) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-status -M$th0 --diff-filter=R HEAD^ HEAD \\\n'
            span_id: 505
          ) (Token id:Id.Lit_Chars val:'\t\t>diff-output-0 &&\n' span_id:506) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-status -M$th1 --diff-filter=R HEAD^ HEAD \\\n'
            span_id: 507
          ) (Token id:Id.Lit_Chars val:'\t\t>diff-output-1 &&\n' span_id:508) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-status -M$th2 --diff-filter=R HEAD^ HEAD \\\n'
            span_id: 509
          ) (Token id:Id.Lit_Chars val:'\t\t>diff-output-2 &&\n' span_id:510) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-status -M100% --diff-filter=R HEAD^ HEAD \\\n'
            span_id: 511
          ) (Token id:Id.Lit_Chars val:'\t\t>diff-output-3 &&\n' span_id:512) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_line_count = 4 diff-output-0 &&\n'
            span_id: 513
          ) (Token id:Id.Lit_Chars val:'\ttest_line_count = 3 diff-output-1 &&\n' span_id:514) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_line_count = 2 diff-output-2 &&\n'
            span_id: 515
          ) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 diff-output-3\n' span_id:516)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'default similarity threshold is 50%' span_id:523))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:527) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:528) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge-recursive $tail &&\n' span_id:529) 
          (Token id:Id.Lit_Chars val:'\t$check_50\n' span_id:530)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'low rename threshold' span_id:537))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:541) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:542) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --find-renames=$th0 $tail &&\n'
            span_id: 543
          ) (Token id:Id.Lit_Chars val:'\tcheck_threshold_0\n' span_id:544)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'medium rename threshold' span_id:551))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:555) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:556) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --find-renames=$th1 $tail &&\n'
            span_id: 557
          ) (Token id:Id.Lit_Chars val:'\tcheck_threshold_1\n' span_id:558)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'high rename threshold' span_id:565))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:569) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:570) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --find-renames=$th2 $tail &&\n'
            span_id: 571
          ) (Token id:Id.Lit_Chars val:'\tcheck_threshold_2\n' span_id:572)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'exact renames only' span_id:579))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:583) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:584) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --find-renames=100% $tail &&\n'
            span_id: 585
          ) (Token id:Id.Lit_Chars val:'\tcheck_exact_renames\n' span_id:586)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rename threshold is truncated' span_id:593))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:597) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:598) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --find-renames=200% $tail &&\n'
            span_id: 599
          ) (Token id:Id.Lit_Chars val:'\tcheck_exact_renames\n' span_id:600)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'disabled rename detection' span_id:607))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:611) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:612) (Token id:Id.Lit_Chars val:'\tgit merge-recursive --no-renames $tail &&\n' span_id:613) 
          (Token id:Id.Lit_Chars val:'\tcheck_no_renames\n' span_id:614)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'last wins in --find-renames=<m> --find-renames=<n>'
            span_id: 621
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:625) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:626) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge-recursive \\\n' span_id:627) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t--find-renames=$th0 --find-renames=$th2 $tail &&\n'
            span_id: 628
          ) (Token id:Id.Lit_Chars val:'\tcheck_threshold_2\n' span_id:629)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--find-renames resets threshold' span_id:636))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:640) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:641) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge-recursive \\\n' span_id:642) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t--find-renames=$th0 --find-renames $tail &&\n'
            span_id: 643
          ) (Token id:Id.Lit_Chars val:'\t$check_50\n' span_id:644)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'last wins in --no-renames --find-renames' span_id:651))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:655) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:656) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --no-renames --find-renames $tail &&\n'
            span_id: 657
          ) (Token id:Id.Lit_Chars val:'\t$check_50\n' span_id:658)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'last wins in --find-renames --no-renames' span_id:665))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:669) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:670) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-recursive --find-renames --no-renames $tail &&\n'
            span_id: 671
          ) (Token id:Id.Lit_Chars val:'\tcheck_no_renames\n' span_id:672)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'assumption for further tests: trivial merge succeeds'
            span_id: 679
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:683) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:684) (Token id:Id.Lit_Chars val:'\tgit merge-recursive HEAD -- HEAD HEAD &&\n' span_id:685) 
          (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached &&\n' span_id:686) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-recursive --find-renames=$th0 HEAD -- HEAD HEAD &&\n'
            span_id: 687
          ) (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached &&\n' span_id:688) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-recursive --find-renames=$th2 HEAD -- HEAD HEAD &&\n'
            span_id: 689
          ) (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached &&\n' span_id:690) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-recursive --find-renames=100% HEAD -- HEAD HEAD &&\n'
            span_id: 691
          ) (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached &&\n' span_id:692) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-recursive --no-renames HEAD -- HEAD HEAD &&\n'
            span_id: 693
          ) (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached\n' span_id:694)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--find-renames rejects negative argument' span_id:701))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:705) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:706) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --find-renames=-25 \\\n'
            span_id: 707
          ) (Token id:Id.Lit_Chars val:'\t\tHEAD -- HEAD HEAD &&\n' span_id:708) 
          (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached\n' span_id:709)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--find-renames rejects non-numbers' span_id:716))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:720) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:721) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --find-renames=0xf \\\n'
            span_id: 722
          ) (Token id:Id.Lit_Chars val:'\t\tHEAD -- HEAD HEAD &&\n' span_id:723) 
          (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached\n' span_id:724)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'rename-threshold=<n> is a synonym for find-renames=<n>'
            span_id: 731
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:735) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:736) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --rename-threshold=$th0 $tail &&\n'
            span_id: 737
          ) (Token id:Id.Lit_Chars val:'\tcheck_threshold_0\n' span_id:738)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'last wins in --no-renames --rename-threshold=<n>'
            span_id: 745
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:749) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:750) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_must_fail git merge-recursive --no-renames --rename-threshold=$th0 $tail &&\n'
            span_id: 751
          ) (Token id:Id.Lit_Chars val:'\tcheck_threshold_0\n' span_id:752)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'last wins in --rename-threshold=<n> --no-renames'
            span_id: 759
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:763) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:764) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-recursive --rename-threshold=$th0 --no-renames $tail &&\n'
            span_id: 765
          ) (Token id:Id.Lit_Chars val:'\tcheck_no_renames\n' span_id:766)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--rename-threshold=<n> rejects negative argument'
            span_id: 773
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:777) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:778) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --rename-threshold=-25 \\\n'
            span_id: 779
          ) (Token id:Id.Lit_Chars val:'\t\tHEAD -- HEAD HEAD &&\n' span_id:780) 
          (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached\n' span_id:781)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--rename-threshold=<n> rejects non-numbers' span_id:788))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:792) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:793) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge-recursive --rename-threshold=0xf \\\n'
            span_id: 794
          ) (Token id:Id.Lit_Chars val:'\t\tHEAD -- HEAD HEAD &&\n' span_id:795) 
          (Token id:Id.Lit_Chars val:'\tgit diff --quiet --cached\n' span_id:796)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'last wins in --rename-threshold=<m> --find-renames=<n>'
            span_id: 803
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:807) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:808) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge-recursive \\\n' span_id:809) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t--rename-threshold=$th0 --find-renames=$th2 $tail &&\n'
            span_id: 810
          ) (Token id:Id.Lit_Chars val:'\tcheck_threshold_2\n' span_id:811)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'last wins in --find-renames=<m> --rename-threshold=<n>'
            span_id: 818
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:822) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:823) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge-recursive \\\n' span_id:824) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t--find-renames=$th2 --rename-threshold=$th0 $tail &&\n'
            span_id: 825
          ) (Token id:Id.Lit_Chars val:'\tcheck_threshold_0\n' span_id:826)
        )
      }
    )
    (C {(test_done)})
  ]
)