(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'checkout can switch to last branch and merge base'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\techo hello >world &&\n'> <'\tgit add world &&\n'> 
          <'\tgit commit -m initial &&\n'> <'\tgit branch other &&\n'> <'\techo "hello again" >>world &&\n'> <'\tgit add world &&\n'> 
          <'\tgit commit -m second\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'"checkout -" does not work initially'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git checkout -\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'first branch switch'>)} {(SQ <'\n'> <'\tgit checkout other\n'>)})
    (C {(test_expect_success)} {(SQ <'"checkout -" switches back'>)} 
      {
        (SQ <'\n'> <'\tgit checkout - &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'"checkout -" switches forth'>)} 
      {
        (SQ <'\n'> <'\tgit checkout - &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/other"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'detach HEAD'>)} 
      {(SQ <'\n'> <'\tgit checkout $(git rev-parse HEAD)\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'"checkout -" attaches again'>)} 
      {
        (SQ <'\n'> <'\tgit checkout - &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/other"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'"checkout -" detaches again'>)} 
      {
        (SQ <'\n'> <'\tgit checkout - &&\n'> 
          <'\ttest "z$(git rev-parse HEAD)" = "z$(git rev-parse other)" &&\n'> <'\ttest_must_fail git symbolic-ref HEAD\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'more switches'>)} 
      {
        (SQ <'\n'> <'\tfor i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1\n'> <'\tdo\n'> 
          <'\t\tgit checkout -b branch$i\n'> <'\tdone\n'>
        )
      }
    )
    (FuncDef
      name: more_switches
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: i
              iter_words: [
                {(16)}
                {(15)}
                {(14)}
                {(13)}
                {(12)}
                {(11)}
                {(10)}
                {(9)}
                {(8)}
                {(7)}
                {(6)}
                {(5)}
                {(4)}
                {(3)}
                {(2)}
                {(1)}
              ]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [(C {(git)} {(checkout)} {(branch) ($ VSub_Name '$i')})]
                  spids: [184 195]
                )
              spids: [150 16777215]
            )
          ]
          spids: [142]
        )
      spids: [137 141]
    )
    (C {(test_expect_success)} {(SQ <'switch to the last'>)} 
      {
        (SQ <'\n'> <'\tmore_switches &&\n'> <'\tgit checkout @{-1} &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch2"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'switch to second from the last'>)} 
      {
        (SQ <'\n'> <'\tmore_switches &&\n'> <'\tgit checkout @{-2} &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch3"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'switch to third from the last'>)} 
      {
        (SQ <'\n'> <'\tmore_switches &&\n'> <'\tgit checkout @{-3} &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch4"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'switch to fourth from the last'>)} 
      {
        (SQ <'\n'> <'\tmore_switches &&\n'> <'\tgit checkout @{-4} &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch5"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'switch to twelfth from the last'>)} 
      {
        (SQ <'\n'> <'\tmore_switches &&\n'> <'\tgit checkout @{-12} &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch13"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge base test setup'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -b another other &&\n'> <'\techo "hello again" >>world &&\n'> 
          <'\tgit add world &&\n'> <'\tgit commit -m third\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <another...master>)} 
      {
        (SQ <'\n'> <'\tgit checkout another &&\n'> <'\tgit checkout another...master &&\n'> 
          <'\ttest "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <...master>)} 
      {
        (SQ <'\n'> <'\tgit checkout another &&\n'> <'\tgit checkout ...master &&\n'> 
          <'\ttest "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <master...>)} 
      {
        (SQ <'\n'> <'\tgit checkout another &&\n'> <'\tgit checkout master... &&\n'> 
          <'\ttest "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'"checkout -" works after a rebase A'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit checkout other &&\n'> 
          <'\tgit rebase master &&\n'> <'\tgit checkout - &&\n'> <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'"checkout -" works after a rebase A B'>)} 
      {
        (SQ <'\n'> <'\tgit branch moodle master~1 &&\n'> <'\tgit checkout master &&\n'> 
          <'\tgit checkout other &&\n'> <'\tgit rebase master moodle &&\n'> <'\tgit checkout - &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'"checkout -" works after a rebase -i A'>)} 
      {
        (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit checkout other &&\n'> 
          <'\tgit rebase -i master &&\n'> <'\tgit checkout - &&\n'> <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'"checkout -" works after a rebase -i A B'>)} 
      {
        (SQ <'\n'> <'\tgit branch foodle master~1 &&\n'> <'\tgit checkout master &&\n'> 
          <'\tgit checkout other &&\n'> <'\tgit rebase master foodle &&\n'> <'\tgit checkout - &&\n'> 
          <'\ttest "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)