(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:'test hashmap and string hash functions' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: test_hashmap body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))}) (command.Simple words: [{(test-hashmap)} {($ Id.VSub_Number '$3')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:33) fd: -1 arg_word: {(actual)} ) ] ) ] negated: F ) (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_Number '$2'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:46) fd: -1 arg_word: {(expect)} ) ] ) (C {(test_cmp)} {(expect)} {(actual)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'hash functions' span_id:65))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:69) (Token id:Id.Lit_Chars val:'\n' span_id:70) (Token id: Id.Lit_Chars val: 'test_hashmap "hash key1" "2215982743 2215982743 116372151 116372151" &&\n' span_id: 71 ) (Token id: Id.Lit_Chars val: 'test_hashmap "hash key2" "2215982740 2215982740 116372148 116372148" &&\n' span_id: 72 ) (Token id: Id.Lit_Chars val: 'test_hashmap "hash fooBarFrotz" "1383912807 1383912807 3189766727 3189766727" &&\n' span_id: 73 ) (Token id: Id.Lit_Chars val: 'test_hashmap "hash foobarfrotz" "2862305959 2862305959 3189766727 3189766727"\n' span_id: 74 ) (Token id:Id.Lit_Chars val:'\n' span_id:75) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:put span_id:82))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:86) (Token id:Id.Lit_Chars val:'\n' span_id:87) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:88) (Token id:Id.Lit_Chars val:'put key2 value2\n' span_id:89) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:90) (Token id:Id.Lit_Chars val:'put foobarfrotz value4\n' span_id:91) (Token id:Id.Lit_Chars val:'size" "NULL\n' span_id:92) (Token id:Id.Lit_Chars val:'NULL\n' span_id:93) (Token id:Id.Lit_Chars val:'NULL\n' span_id:94) (Token id:Id.Lit_Chars val:'NULL\n' span_id:95) (Token id:Id.Lit_Chars val:'64 4"\n' span_id:96) (Token id:Id.Lit_Chars val:'\n' span_id:97) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'put (case insensitive)' span_id:104))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:108) (Token id:Id.Lit_Chars val:'\n' span_id:109) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:110) (Token id:Id.Lit_Chars val:'put key2 value2\n' span_id:111) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:112) (Token id:Id.Lit_Chars val:'size" "NULL\n' span_id:113) (Token id:Id.Lit_Chars val:'NULL\n' span_id:114) (Token id:Id.Lit_Chars val:'NULL\n' span_id:115) (Token id:Id.Lit_Chars val:'64 3" ignorecase\n' span_id:116) (Token id:Id.Lit_Chars val:'\n' span_id:117) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:replace span_id:124))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:128) (Token id:Id.Lit_Chars val:'\n' span_id:129) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:130) (Token id:Id.Lit_Chars val:'put key1 value2\n' span_id:131) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:132) (Token id:Id.Lit_Chars val:'put fooBarFrotz value4\n' span_id:133) (Token id:Id.Lit_Chars val:'size" "NULL\n' span_id:134) (Token id:Id.Lit_Chars val:'value1\n' span_id:135) (Token id:Id.Lit_Chars val:'NULL\n' span_id:136) (Token id:Id.Lit_Chars val:'value3\n' span_id:137) (Token id:Id.Lit_Chars val:'64 2"\n' span_id:138) (Token id:Id.Lit_Chars val:'\n' span_id:139) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'replace (case insensitive)' span_id:146))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:150) (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:152) (Token id:Id.Lit_Chars val:'put Key1 value2\n' span_id:153) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:154) (Token id:Id.Lit_Chars val:'put foobarfrotz value4\n' span_id:155) (Token id:Id.Lit_Chars val:'size" "NULL\n' span_id:156) (Token id:Id.Lit_Chars val:'value1\n' span_id:157) (Token id:Id.Lit_Chars val:'NULL\n' span_id:158) (Token id:Id.Lit_Chars val:'value3\n' span_id:159) (Token id:Id.Lit_Chars val:'64 2" ignorecase\n' span_id:160) (Token id:Id.Lit_Chars val:'\n' span_id:161) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:get span_id:168))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:172) (Token id:Id.Lit_Chars val:'\n' span_id:173) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:174) (Token id:Id.Lit_Chars val:'put key2 value2\n' span_id:175) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:176) (Token id:Id.Lit_Chars val:'put foobarfrotz value4\n' span_id:177) (Token id:Id.Lit_Chars val:'get key1\n' span_id:178) (Token id:Id.Lit_Chars val:'get key2\n' span_id:179) (Token id:Id.Lit_Chars val:'get fooBarFrotz\n' span_id:180) (Token id:Id.Lit_Chars val:'get notInMap" "NULL\n' span_id:181) (Token id:Id.Lit_Chars val:'NULL\n' span_id:182) (Token id:Id.Lit_Chars val:'NULL\n' span_id:183) (Token id:Id.Lit_Chars val:'NULL\n' span_id:184) (Token id:Id.Lit_Chars val:'value1\n' span_id:185) (Token id:Id.Lit_Chars val:'value2\n' span_id:186) (Token id:Id.Lit_Chars val:'value3\n' span_id:187) (Token id:Id.Lit_Chars val:'NULL"\n' span_id:188) (Token id:Id.Lit_Chars val:'\n' span_id:189) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'get (case insensitive)' span_id:196))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:200) (Token id:Id.Lit_Chars val:'\n' span_id:201) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:202) (Token id:Id.Lit_Chars val:'put key2 value2\n' span_id:203) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:204) (Token id:Id.Lit_Chars val:'get Key1\n' span_id:205) (Token id:Id.Lit_Chars val:'get keY2\n' span_id:206) (Token id:Id.Lit_Chars val:'get foobarfrotz\n' span_id:207) (Token id:Id.Lit_Chars val:'get notInMap" "NULL\n' span_id:208) (Token id:Id.Lit_Chars val:'NULL\n' span_id:209) (Token id:Id.Lit_Chars val:'NULL\n' span_id:210) (Token id:Id.Lit_Chars val:'value1\n' span_id:211) (Token id:Id.Lit_Chars val:'value2\n' span_id:212) (Token id:Id.Lit_Chars val:'value3\n' span_id:213) (Token id:Id.Lit_Chars val:'NULL" ignorecase\n' span_id:214) (Token id:Id.Lit_Chars val:'\n' span_id:215) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:add span_id:222))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) (Token id:Id.Lit_Chars val:'\n' span_id:227) (Token id:Id.Lit_Chars val:'test_hashmap "add key1 value1\n' span_id:228) (Token id:Id.Lit_Chars val:'add key1 value2\n' span_id:229) (Token id:Id.Lit_Chars val:'add fooBarFrotz value3\n' span_id:230) (Token id:Id.Lit_Chars val:'add fooBarFrotz value4\n' span_id:231) (Token id:Id.Lit_Chars val:'get key1\n' span_id:232) (Token id:Id.Lit_Chars val:'get fooBarFrotz\n' span_id:233) (Token id:Id.Lit_Chars val:'get notInMap" "value2\n' span_id:234) (Token id:Id.Lit_Chars val:'value1\n' span_id:235) (Token id:Id.Lit_Chars val:'value4\n' span_id:236) (Token id:Id.Lit_Chars val:'value3\n' span_id:237) (Token id:Id.Lit_Chars val:'NULL"\n' span_id:238) (Token id:Id.Lit_Chars val:'\n' span_id:239) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add (case insensitive)' span_id:246))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:250) (Token id:Id.Lit_Chars val:'\n' span_id:251) (Token id:Id.Lit_Chars val:'test_hashmap "add key1 value1\n' span_id:252) (Token id:Id.Lit_Chars val:'add Key1 value2\n' span_id:253) (Token id:Id.Lit_Chars val:'add fooBarFrotz value3\n' span_id:254) (Token id:Id.Lit_Chars val:'add foobarfrotz value4\n' span_id:255) (Token id:Id.Lit_Chars val:'get key1\n' span_id:256) (Token id:Id.Lit_Chars val:'get Foobarfrotz\n' span_id:257) (Token id:Id.Lit_Chars val:'get notInMap" "value2\n' span_id:258) (Token id:Id.Lit_Chars val:'value1\n' span_id:259) (Token id:Id.Lit_Chars val:'value4\n' span_id:260) (Token id:Id.Lit_Chars val:'value3\n' span_id:261) (Token id:Id.Lit_Chars val:'NULL" ignorecase\n' span_id:262) (Token id:Id.Lit_Chars val:'\n' span_id:263) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:remove span_id:270))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:274) (Token id:Id.Lit_Chars val:'\n' span_id:275) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:276) (Token id:Id.Lit_Chars val:'put key2 value2\n' span_id:277) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:278) (Token id:Id.Lit_Chars val:'remove key1\n' span_id:279) (Token id:Id.Lit_Chars val:'remove key2\n' span_id:280) (Token id:Id.Lit_Chars val:'remove notInMap\n' span_id:281) (Token id:Id.Lit_Chars val:'size" "NULL\n' span_id:282) (Token id:Id.Lit_Chars val:'NULL\n' span_id:283) (Token id:Id.Lit_Chars val:'NULL\n' span_id:284) (Token id:Id.Lit_Chars val:'value1\n' span_id:285) (Token id:Id.Lit_Chars val:'value2\n' span_id:286) (Token id:Id.Lit_Chars val:'NULL\n' span_id:287) (Token id:Id.Lit_Chars val:'64 1"\n' span_id:288) (Token id:Id.Lit_Chars val:'\n' span_id:289) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'remove (case insensitive)' span_id:296))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:300) (Token id:Id.Lit_Chars val:'\n' span_id:301) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:302) (Token id:Id.Lit_Chars val:'put key2 value2\n' span_id:303) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:304) (Token id:Id.Lit_Chars val:'remove Key1\n' span_id:305) (Token id:Id.Lit_Chars val:'remove keY2\n' span_id:306) (Token id:Id.Lit_Chars val:'remove notInMap\n' span_id:307) (Token id:Id.Lit_Chars val:'size" "NULL\n' span_id:308) (Token id:Id.Lit_Chars val:'NULL\n' span_id:309) (Token id:Id.Lit_Chars val:'NULL\n' span_id:310) (Token id:Id.Lit_Chars val:'value1\n' span_id:311) (Token id:Id.Lit_Chars val:'value2\n' span_id:312) (Token id:Id.Lit_Chars val:'NULL\n' span_id:313) (Token id:Id.Lit_Chars val:'64 1" ignorecase\n' span_id:314) (Token id:Id.Lit_Chars val:'\n' span_id:315) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:iterate span_id:322))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:326) (Token id:Id.Lit_Chars val:'\n' span_id:327) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:328) (Token id:Id.Lit_Chars val:'put key2 value2\n' span_id:329) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:330) (Token id:Id.Lit_Chars val:'iterate" "NULL\n' span_id:331) (Token id:Id.Lit_Chars val:'NULL\n' span_id:332) (Token id:Id.Lit_Chars val:'NULL\n' span_id:333) (Token id:Id.Lit_Chars val:'key2 value2\n' span_id:334) (Token id:Id.Lit_Chars val:'key1 value1\n' span_id:335) (Token id:Id.Lit_Chars val:'fooBarFrotz value3"\n' span_id:336) (Token id:Id.Lit_Chars val:'\n' span_id:337) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'iterate (case insensitive)' span_id:344))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:348) (Token id:Id.Lit_Chars val:'\n' span_id:349) (Token id:Id.Lit_Chars val:'test_hashmap "put key1 value1\n' span_id:350) (Token id:Id.Lit_Chars val:'put key2 value2\n' span_id:351) (Token id:Id.Lit_Chars val:'put fooBarFrotz value3\n' span_id:352) (Token id:Id.Lit_Chars val:'iterate" "NULL\n' span_id:353) (Token id:Id.Lit_Chars val:'NULL\n' span_id:354) (Token id:Id.Lit_Chars val:'NULL\n' span_id:355) (Token id:Id.Lit_Chars val:'fooBarFrotz value3\n' span_id:356) (Token id:Id.Lit_Chars val:'key2 value2\n' span_id:357) (Token id:Id.Lit_Chars val:'key1 value1" ignorecase\n' span_id:358) (Token id:Id.Lit_Chars val:'\n' span_id:359) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grow / shrink' span_id:366))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:370) (Token id:Id.Lit_Chars val:'\n' span_id:371) (Token id:Id.Lit_Chars val:'\trm -f in &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\trm -f expect &&\n' span_id:373) (Token id:Id.Lit_Chars val:'\tfor n in $(test_seq 51)\n' span_id:374) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:375) (Token id:Id.Lit_Chars val:'\t\techo put key$n value$n >> in &&\n' span_id:376) (Token id:Id.Lit_Chars val:'\t\techo NULL >> expect\n' span_id:377) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:378) (Token id:Id.Lit_Chars val:'\techo size >> in &&\n' span_id:379) (Token id:Id.Lit_Chars val:'\techo 64 51 >> expect &&\n' span_id:380) (Token id:Id.Lit_Chars val:'\techo put key52 value52 >> in &&\n' span_id:381) (Token id:Id.Lit_Chars val:'\techo NULL >> expect &&\n' span_id:382) (Token id:Id.Lit_Chars val:'\techo size >> in &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\techo 256 52 >> expect &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\tfor n in $(test_seq 12)\n' span_id:385) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:386) (Token id:Id.Lit_Chars val:'\t\techo remove key$n >> in &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\t\techo value$n >> expect\n' span_id:388) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\techo size >> in &&\n' span_id:390) (Token id:Id.Lit_Chars val:'\techo 256 40 >> expect &&\n' span_id:391) (Token id:Id.Lit_Chars val:'\techo remove key40 >> in &&\n' span_id:392) (Token id:Id.Lit_Chars val:'\techo value40 >> expect &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\techo size >> in &&\n' span_id:394) (Token id:Id.Lit_Chars val:'\techo 64 39 >> expect &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\tcat in | test-hashmap > out &&\n' span_id:396) (Token id:Id.Lit_Chars val:'\ttest_cmp expect out\n' span_id:397) (Token id:Id.Lit_Chars val:'\n' span_id:398) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'string interning' span_id:405))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:409) (Token id:Id.Lit_Chars val:'\n' span_id:410) (Token id:Id.Lit_Chars val:'test_hashmap "intern value1\n' span_id:411) (Token id:Id.Lit_Chars val:'intern Value1\n' span_id:412) (Token id:Id.Lit_Chars val:'intern value2\n' span_id:413) (Token id:Id.Lit_Chars val:'intern value2\n' span_id:414) (Token id:Id.Lit_Chars val:'" "value1\n' span_id:415) (Token id:Id.Lit_Chars val:'Value1\n' span_id:416) (Token id:Id.Lit_Chars val:'value2\n' span_id:417) (Token id:Id.Lit_Chars val:'value2"\n' span_id:418) (Token id:Id.Lit_Chars val:'\n' span_id:419) ) } ) (C {(test_done)}) ] )