(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: 'basic tests for the SHA1 array implementation' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: echo20 body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:prefix) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:25) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {($ Id.VSub_Number '$1') (' ')} ) ) ) } spids: [22] ) ] ) (C {(shift)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:36) cond: [(C {(test)} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)})] body: (command.DoGroup children: [ (C {(echo)} { (DQ ($ Id.VSub_DollarName '$prefix') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ($ Id.VSub_Number '$1') ) } ) (C {(shift)}) ] ) ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ordered enumeration' span_id:88))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:92) (Token id:Id.Lit_Chars val:'\techo20 "" 44 55 88 aa >expect &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\t{\n' span_id:94) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\t\techo for_each_unique\n' span_id:96) (Token id:Id.Lit_Chars val:'\t} | test-sha1-array >actual &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:98) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ordered enumeration with duplicate suppression' span_id:105))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:109) (Token id:Id.Lit_Chars val:'\techo20 "" 44 55 88 aa >expect &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\t{\n' span_id:111) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\t\techo for_each_unique\n' span_id:114) (Token id:Id.Lit_Chars val:'\t} | test-sha1-array >actual &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:116) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:lookup span_id:123))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:127) (Token id:Id.Lit_Chars val:'\t{\n' span_id:128) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\t\techo20 lookup 55\n' span_id:130) (Token id:Id.Lit_Chars val:'\t} | test-sha1-array >actual &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\tn=$(cat actual) &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\ttest "$n" -eq 1\n' span_id:133) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lookup non-existing entry' span_id:140))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:144) (Token id:Id.Lit_Chars val:'\t{\n' span_id:145) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\t\techo20 lookup 33\n' span_id:147) (Token id:Id.Lit_Chars val:'\t} | test-sha1-array >actual &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tn=$(cat actual) &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\ttest "$n" -lt 0\n' span_id:150) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lookup with duplicates' span_id:157))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:161) (Token id:Id.Lit_Chars val:'\t{\n' span_id:162) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:163) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\t\techo20 lookup 55\n' span_id:165) (Token id:Id.Lit_Chars val:'\t} | test-sha1-array >actual &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\tn=$(cat actual) &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\ttest "$n" -ge 2 &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\ttest "$n" -le 3\n' span_id:169) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lookup non-existing entry with duplicates' span_id:176))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) (Token id:Id.Lit_Chars val:'\t{\n' span_id:181) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:182) (Token id:Id.Lit_Chars val:'\t\techo20 append 88 44 aa 55 &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\t\techo20 lookup 66\n' span_id:184) (Token id:Id.Lit_Chars val:'\t} | test-sha1-array >actual &&\n' span_id:185) (Token id:Id.Lit_Chars val:'\tn=$(cat actual) &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\ttest "$n" -lt 0\n' span_id:187) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lookup with almost duplicate values' span_id:194))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:198) (Token id:Id.Lit_Chars val:'\t{\n' span_id:199) (Token id: Id.Lit_Chars val: '\t\techo "append 5555555555555555555555555555555555555555" &&\n' span_id: 200 ) (Token id: Id.Lit_Chars val: '\t\techo "append 555555555555555555555555555555555555555f" &&\n' span_id: 201 ) (Token id:Id.Lit_Chars val:'\t\techo20 lookup 55\n' span_id:202) (Token id:Id.Lit_Chars val:'\t} | test-sha1-array >actual &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\tn=$(cat actual) &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\ttest "$n" -eq 0\n' span_id:205) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lookup with single duplicate value' span_id:212))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) (Token id:Id.Lit_Chars val:'\t{\n' span_id:217) (Token id:Id.Lit_Chars val:'\t\techo20 append 55 55 &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\t\techo20 lookup 55\n' span_id:219) (Token id:Id.Lit_Chars val:'\t} | test-sha1-array >actual &&\n' span_id:220) (Token id:Id.Lit_Chars val:'\tn=$(cat actual) &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\ttest "$n" -ge 0 &&\n' span_id:222) (Token id:Id.Lit_Chars val:'\ttest "$n" -le 1\n' span_id:223) ) } ) (C {(test_done)}) ] )