(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'basic tests for the SHA1 array implementation'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: echo20
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prefix)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Number 1>
                          suffix_op: 
                            (StringUnary
                              op_id: VTest_ColonPlus
                              arg_word: {($ VSub_Number '$1') (' ')}
                            )
                          spids: [24 29]
                        )
                      )
                    }
                  spids: [22]
                )
              ]
              spids: [22]
            )
            (C {(shift)})
            (While
              cond: [(C {(test)} {($ VSub_Pound '$#')} {(-gt)} {(0)})]
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} 
                      {
                        (DQ ($ VSub_Name '$prefix') ($ VSub_Number '$1') ($ VSub_Number '$1') 
                          ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') 
                          ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') 
                          ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1') ($ VSub_Number '$1')
                        )
                      }
                    )
                    (C {(shift)})
                  ]
                  spids: [47 80]
                )
            )
          ]
          spids: [19]
        )
      spids: [14 18]
    )
    (C {(test_expect_success)} {(SQ <'ordered enumeration'>)} 
      {
        (SQ <'\n'> <'\techo20 "" 44 55 88 aa >expect &&\n'> <'\t{\n'> 
          <'\t\techo20 append 88 44 aa 55 &&\n'> <'\t\techo for_each_unique\n'> <'\t} | test-sha1-array >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'ordered enumeration with duplicate suppression'>)} 
      {
        (SQ <'\n'> <'\techo20 "" 44 55 88 aa >expect &&\n'> <'\t{\n'> 
          <'\t\techo20 append 88 44 aa 55 &&\n'> <'\t\techo20 append 88 44 aa 55 &&\n'> <'\t\techo for_each_unique\n'> 
          <'\t} | test-sha1-array >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <lookup>)} 
      {
        (SQ <'\n'> <'\t{\n'> <'\t\techo20 append 88 44 aa 55 &&\n'> <'\t\techo20 lookup 55\n'> 
          <'\t} | test-sha1-array >actual &&\n'> <'\tn=$(cat actual) &&\n'> <'\ttest "$n" -eq 1\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'lookup non-existing entry'>)} 
      {
        (SQ <'\n'> <'\t{\n'> <'\t\techo20 append 88 44 aa 55 &&\n'> <'\t\techo20 lookup 33\n'> 
          <'\t} | test-sha1-array >actual &&\n'> <'\tn=$(cat actual) &&\n'> <'\ttest "$n" -lt 0\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'lookup with duplicates'>)} 
      {
        (SQ <'\n'> <'\t{\n'> <'\t\techo20 append 88 44 aa 55 &&\n'> 
          <'\t\techo20 append 88 44 aa 55 &&\n'> <'\t\techo20 lookup 55\n'> <'\t} | test-sha1-array >actual &&\n'> <'\tn=$(cat actual) &&\n'> 
          <'\ttest "$n" -ge 2 &&\n'> <'\ttest "$n" -le 3\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'lookup non-existing entry with duplicates'>)} 
      {
        (SQ <'\n'> <'\t{\n'> <'\t\techo20 append 88 44 aa 55 &&\n'> 
          <'\t\techo20 append 88 44 aa 55 &&\n'> <'\t\techo20 lookup 66\n'> <'\t} | test-sha1-array >actual &&\n'> <'\tn=$(cat actual) &&\n'> 
          <'\ttest "$n" -lt 0\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'lookup with almost duplicate values'>)} 
      {
        (SQ <'\n'> <'\t{\n'> <'\t\techo "append 5555555555555555555555555555555555555555" &&\n'> 
          <'\t\techo "append 555555555555555555555555555555555555555f" &&\n'> <'\t\techo20 lookup 55\n'> <'\t} | test-sha1-array >actual &&\n'> <'\tn=$(cat actual) &&\n'> 
          <'\ttest "$n" -eq 0\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'lookup with single duplicate value'>)} 
      {
        (SQ <'\n'> <'\t{\n'> <'\t\techo20 append 55 55 &&\n'> <'\t\techo20 lookup 55\n'> 
          <'\t} | test-sha1-array >actual &&\n'> <'\tn=$(cat actual) &&\n'> <'\ttest "$n" -ge 0 &&\n'> <'\ttest "$n" -le 1\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)