v2 / vlib / builtin / map_test.v
1072 lines · 987 sloc · 16.33 KB · e3faeb3bab96810765dae545610698d32799fc8c
Raw
1import rand
2
3const test_strings = unique_strings(7000, 10)
4
5fn unique_strings(arr_len int, str_len int) []string {
6 mut arr := []string{cap: arr_len}
7 for arr.len < arr_len {
8 str := rand.string(str_len)
9 if str !in arr {
10 arr << str
11 }
12 }
13 return arr
14}
15
16fn test_get_and_set_many() {
17 mut m := map[string]int{}
18 for i, s in test_strings {
19 m[s] = i
20 assert m[s] == i
21 assert m.len == i + 1
22 }
23 for i, s in test_strings {
24 assert m[s] == i
25 }
26 assert m.len == test_strings.len
27}
28
29fn test_for_in_many() {
30 mut m := map[string]int{}
31 for i, s in test_strings {
32 m[s] = i
33 }
34 for k, v in m {
35 assert m[k] == v
36 }
37}
38
39fn test_keys_many() {
40 mut m := map[string]int{}
41 for i, s in test_strings {
42 m[s] = i
43 }
44 keys := m.keys()
45 assert keys.len == test_strings.len
46 assert keys.len == m.len
47 assert keys == test_strings
48}
49
50fn test_values_many() {
51 mut m := map[string]int{}
52 for i, s in test_strings {
53 m[s] = i
54 }
55 values := m.values()
56 assert values.len == test_strings.len
57 assert values.len == m.len
58}
59
60fn test_deletes_many() {
61 mut m := map[string]int{}
62 for i, s in test_strings {
63 m[s] = i
64 }
65 for i, s in test_strings {
66 m.delete(s)
67 assert m[s] == 0
68 assert m.len == test_strings.len - (i + 1)
69 }
70 assert m.len == 0
71 assert m.keys().len == 0
72 assert m.values().len == 0
73}
74
75struct User {
76mut:
77 name string
78}
79
80struct Aaa {
81mut:
82 m map[string]int
83 users map[string]User
84}
85
86fn (mut a Aaa) set(key string, val int) {
87 a.m[key] = val
88}
89
90fn test_map() {
91 mut m := map[string]int{}
92 assert m.len == 0
93 m['hi'] = 80
94 m['hello'] = 101
95 assert m['hi'] == 80
96 assert m['hello'] == 101
97 assert m.len == 2
98 assert 'hi' in m
99 mut sum := 0
100 // Test `for in`
101 for _, val in m {
102 sum += val
103 }
104 assert sum == 80 + 101
105 // Test `.keys()`
106 keys := m.keys()
107 assert keys.len == 2
108 assert 'hi' in keys
109 assert 'hello' in keys
110 m.delete('hi')
111 assert m.len == 1
112 m.delete('aloha')
113 assert m.len == 1
114 assert m['hi'] == 0
115 assert m.keys().len == 1
116 assert m.keys()[0] == 'hello'
117 // Test `.values()`
118 values := m.values()
119 assert values.len == 1
120 assert 80 !in values
121 assert 101 in values
122 assert m.values().len == 1
123 assert m.values()[0] == 101
124 // //
125 mut users := map[string]User{}
126 users['1'] = User{'Peter'}
127 peter := users['1']
128 assert peter.name == 'Peter'
129 mut a := Aaa{
130 m: map[string]int{}
131 users: map[string]User{}
132 }
133 a.users['Bob'] = User{'Bob'}
134 q := a.users['Bob']
135 assert q.name == 'Bob'
136 // test struct field change
137 a.users['Bob'].name = 'bob'
138 q2 := a.users['Bob']
139 assert q2.name == 'bob'
140 a.m['one'] = 1
141 a.set('two', 2)
142 assert a.m['one'] == 1
143 assert a.m['two'] == 2
144}
145
146fn test_map_init() {
147 one := 'one'
148 three := 'three'
149 m := {
150 one: 1
151 'two': 2
152 three: 1 + 2
153 }
154 assert m['one'] == 1
155 assert m['two'] == 2
156 assert m['three'] == 3
157 assert m['unknown'] == 0
158}
159
160fn test_string_map() {
161 // m := map[string]Fn
162}
163
164fn test_free_clears_map_header() {
165 m := {
166 'name': 'Joe'
167 }
168 assert m.str() == "{'name': 'Joe'}"
169 unsafe { m.free() }
170 assert m.len == 0
171 assert m.str() == '{}'
172 unsafe { m.free() }
173 assert m.str() == '{}'
174}
175
176fn test_large_map() {
177 // ticks := time.ticks()
178 mut nums := map[string]int{}
179 n := 30 * 1000
180 for i in 0 .. n {
181 key := i.str()
182 nums[key] = i
183 }
184 assert nums['1'] == 1
185 assert nums['999'] == 999
186 assert nums['1000000'] == 0
187 // println(time.ticks() - ticks)
188}
189
190fn test_various_map_value() {
191 mut m1 := map[string]int{}
192 m1['test'] = 1
193 assert m1['test'] == 1
194 mut m2 := map[string]string{}
195 m2['test'] = 'test'
196 assert m2['test'] == 'test'
197 mut m3 := map[string]i8{}
198 m3['test'] = i8(0)
199 assert m3['test'] == i8(0)
200 mut m4 := map[string]i16{}
201 m4['test'] = i16(0)
202 assert m4['test'] == i16(0)
203 mut m7 := map[string]u16{}
204 m7['test'] = u16(0)
205 assert m7['test'] == u16(0)
206 mut m8 := map[string]u32{}
207 m8['test'] = u32(0)
208 assert m8['test'] == u32(0)
209 mut m9 := map[string]bool{}
210 m9['test'] = true
211 assert m9['test'] == true
212 mut m10 := map[string]u8{}
213 m10['test'] = u8(0)
214 assert m10['test'] == u8(0)
215 mut m11 := map[string]f32{}
216 m11['test'] = f32(0.0)
217 assert m11['test'] == f32(0.0)
218 mut m12 := map[string]f64{}
219 m12['test'] = f64(0.0)
220 assert m12['test'] == f64(0.0)
221 // mut m13 := map[string]rune
222 // m13['test'] = rune(0)
223 // assert m13['test'] == rune(0)
224 mut m14 := map[string]voidptr{}
225 m14['test'] = unsafe { nil }
226 assert unsafe { m14['test'] } == unsafe { nil }
227 mut m15 := map[string]&u8{}
228 m15['test'] = &u8(unsafe { nil })
229 assert unsafe { m15['test'] } == &u8(unsafe { nil })
230 mut m16 := map[string]i64{}
231 m16['test'] = i64(0)
232 assert m16['test'] == i64(0)
233 mut m17 := map[string]u64{}
234 m17['test'] = u64(0)
235 assert m17['test'] == u64(0)
236 mut m18 := map[string]&int{}
237 m18['test'] = &int(unsafe { nil })
238 assert unsafe { m18['test'] } == &int(unsafe { nil })
239}
240
241fn test_string_arr() {
242 mut m := map[string][]string{}
243 m['a'] = ['one', 'two']
244 assert m['a'].len == 2
245 assert m['a'][0] == 'one'
246 assert m['a'][1] == 'two'
247}
248
249fn mut_map(mut m map[string]int) {
250 m['a'] = 10
251}
252
253fn test_mut_arg() {
254 mut m := map[string]int{}
255 mut_map(mut m)
256 a := m['a']
257 assert a == 10
258}
259
260fn test_clear() {
261 mut m := map[string]int{}
262 m['one'] = 1
263 m['two'] = 2
264 m.clear()
265 assert m.len == 0
266}
267
268fn test_delete() {
269 mut m := map[string]int{}
270 m['one'] = 1
271 m['two'] = 2
272 println(m['two']) // => "2"
273 m.delete('two')
274 println(m['two'].str()) // => 0
275 assert ('two' in m) == false
276 println('two' in m) // => true, on Linux and Windows <-- wrong !
277}
278
279fn test_delete_size() {
280 arr := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
281 mut m := map[string]int{}
282 for _ in 0 .. 10 {
283 for i in 0 .. 10 {
284 m[arr[i]] = i
285 }
286 assert m.len == 10
287 println(m.len)
288 for i in 0 .. 10 {
289 m.delete(arr[i])
290 }
291 }
292}
293
294fn test_nested_for_in() {
295 mut m := map[string]int{}
296 for i in 0 .. 1000 {
297 m[i.str()] = i
298 }
299 mut i := 0
300 for key1, _ in m {
301 assert key1 == i.str()
302 i++
303 mut j := 0
304 for key2, _ in m {
305 assert key2 == j.str()
306 j++
307 }
308 }
309}
310
311fn test_delete_in_for_in() {
312 mut m := map[string]string{}
313 for i in 0 .. 1000 {
314 m[i.str()] = i.str()
315 }
316 mut i := 0
317 for key, _ in m {
318 assert key == i.str()
319 m.delete(key)
320 i++
321 }
322 assert m.str() == '{}'
323 assert m.len == 0
324}
325
326fn test_set_in_for_in() {
327 mut m := map[string]string{}
328 for i in 0 .. 10 {
329 m[i.str()] = i.str()
330 }
331 mut last_key := ''
332 mut i := 0
333 for key, _ in m {
334 m['10'] = '10'
335 assert key == i.str()
336 last_key = key
337 i++
338 }
339 assert last_key == '10'
340}
341
342fn test_delete_and_set_in_for_in() {
343 mut m := map[string]string{}
344 for i in 0 .. 1000 {
345 m[i.str()] = i.str()
346 }
347 mut i := 0
348 for key, _ in m {
349 assert key == i.str()
350 m.delete(key)
351 m[key] = i.str()
352 if i == 999 {
353 break
354 }
355 i++
356 }
357 assert m.len == 1000
358 i = 0
359 for key, _ in m {
360 assert m[key] == i.str()
361 i++
362 }
363 assert i == 1000
364}
365
366struct Mstruct1 {
367pub mut:
368 mymap map[string]int
369}
370
371struct Mstruct2 {
372pub mut:
373 mymap map[string]f64
374}
375
376struct Mstruct3 {
377pub mut:
378 mymap map[string]u16
379}
380
381fn test_map_assign() {
382 mut a := map[string]f64{}
383 mut b := map[string]int{}
384 mut c := map[string]u16{}
385 a = {
386 'x': 12.4
387 'y': 3
388 }
389 b = {
390 'u': -13
391 'v': 12
392 }
393 c = {
394 's': u16(5)
395 't': 3
396 }
397 _ := Mstruct1{{
398 'p': 12
399 }}
400 _ := Mstruct2{{
401 'q': 1.7
402 }}
403 _ := Mstruct3{{
404 'r': u16(6)
405 's': 5
406 }}
407}
408
409fn test_postfix_op_directly() {
410 mut a := map[string]int{}
411 a['aaa']++
412 assert a['aaa'] == 1
413 a['aaa']++
414 assert a['aaa'] == 2
415 a['bbb']--
416 assert a['bbb'] == -1
417 a['bbb']--
418 assert a['bbb'] == -2
419}
420
421fn test_map_push_directly() {
422 mut a := map[string][]string{}
423 a['aaa'] = []string{}
424 a['aaa'] << ['a', 'b', 'c']
425 assert a['aaa'].len == 3
426 assert a['aaa'] == ['a', 'b', 'c']
427}
428
429fn test_map_push_inserts_for_missing_key() {
430 mut a := map[string][]string{}
431 a['aaa'] << 'a'
432 assert a == {
433 'aaa': ['a']
434 }
435}
436
437fn test_assign_directly() {
438 mut a := map[string]int{}
439 a['aaa'] += 4
440 assert a['aaa'] == 4
441 a['aaa'] -= 2
442 assert a['aaa'] == 2
443}
444
445fn test_map_in_directly() {
446 for k, v in {
447 'aa': 1
448 } {
449 assert k == 'aa'
450 assert v == 1
451 }
452}
453
454fn test_plus_assign_string() {
455 mut m := {
456 'one': ''
457 }
458 m['one'] += '1'
459 assert m.len == 1
460 assert m['one'] == '1'
461}
462
463fn test_map_keys_to_array() {
464 m := {
465 'a': 'b'
466 'c': 'd'
467 }
468 mut arr := []string{}
469 for k, _ in m {
470 arr << k
471 }
472 sarr := arr.str()
473 println(sarr)
474 assert sarr == "['a', 'c']"
475}
476
477fn map_in_mut(mut m map[string]int) {
478 if 'one' in m {
479 m['one'] = 2
480 }
481}
482
483fn test_map_in_mut() {
484 mut m := {
485 'one': 1
486 }
487 map_in_mut(mut m)
488 assert m['one'] == 2
489}
490
491fn test_map_in() {
492 m := {
493 'Foo': 'bar'
494 }
495 if 'foo'.capitalize() in m {
496 assert true
497 } else {
498 assert false
499 }
500}
501
502fn mut_map_with_relation_op_in_fn(mut m map[string]int) {
503 if m['one'] == 1 {
504 m['three'] = 3
505 }
506 if m['two'] != 1 {
507 m['four'] = 4
508 }
509 if m['one'] > 0 {
510 m['five'] = 5
511 }
512 if m['one'] < 2 {
513 m['six'] = 6
514 }
515 if m['two'] >= 2 {
516 m['seven'] = 7
517 }
518 if m['two'] <= 2 {
519 m['eight'] = 8
520 }
521}
522
523fn test_mut_map_with_relation_op_in_fn() {
524 mut m := {
525 'one': 1
526 'two': 2
527 }
528 mut_map_with_relation_op_in_fn(mut m)
529 assert 'three' in m
530 assert 'four' in m
531 assert 'five' in m
532 assert 'six' in m
533 assert 'seven' in m
534 assert 'eight' in m
535}
536
537fn test_map_str_after_delete() {
538 mut m := {
539 'first': 1
540 'second': 2
541 'third': 3
542 }
543 osm := '${m}'
544 m.delete('second')
545 nsm := '${m}'
546 println('m: ${m}')
547 assert osm == "{'first': 1, 'second': 2, 'third': 3}"
548 assert nsm == "{'first': 1, 'third': 3}"
549}
550
551fn test_modify_map_value() {
552 mut m1 := {
553 'foo': 3
554 'bar': -7
555 }
556 m1['foo'] += 5
557 m1['bar'] *= -2
558 assert m1['foo'] == 8
559 assert m1['bar'] == 14
560}
561
562fn test_map_clone() {
563 mut nums := {
564 'foo': 1
565 'bar': 2
566 }
567 mut nums2 := nums.clone()
568 nums2['foo']++
569 nums2['bar'] *= 4
570 assert nums['foo'] == 1
571 assert nums['bar'] == 2
572 assert nums2['foo'] == 2
573 assert nums2['bar'] == 8
574}
575
576fn test_map_reserve_keeps_empty_map_valid() {
577 mut m := {
578 'abc': 42
579 }
580 mut moved := m.move()
581 moved.clear()
582 moved.reserve(6)
583 moved.delete('def')
584 assert moved.keys().len == 0
585 assert moved.values().len == 0
586 assert moved.clone().len == 0
587 unsafe { moved.free() }
588}
589
590struct MValue {
591 name string
592 misc map[string]string
593}
594
595fn test_map_default_zero() {
596 m := map[string]MValue{}
597 v := m['unknown']
598 x := v.misc['x']
599 println(x)
600 assert x == ''
601}
602
603fn test_map_or() {
604 m := {
605 'first': 1
606 'second': 2
607 'third': 3
608 }
609 _ = m
610 // num := m['first'] or { return }
611}
612
613fn test_int_keys() {
614 mut m := map[int]int{}
615 m[3] = 9
616 m[4] = 16
617 assert m.len == 2
618 assert m[3] == 9
619 assert m[4] == 16
620 m[5] += 24
621 m[5]++
622 assert m[5] == 25
623 mut m2 := {
624 3: 9
625 4: 16
626 5: 25
627 }
628
629 four := 4
630 m2.delete(3)
631 m2.delete(four)
632 m2.delete(5)
633 assert m2.len == 0
634 assert m2[3] == 0
635 assert m2[4] == 0
636 assert m2[5] == 0
637 assert m2.keys() == []
638
639 m2 = {
640 3: 9
641 4: 16
642 5: 25
643 }
644 assert m2.values() == [9, 16, 25]
645
646 assert m2.len == 3
647 // clone
648 mc := m.clone()
649 same := mc == m
650 assert same
651 assert mc.len == 3
652 assert mc.keys() == [3, 4, 5]
653 mut all := []int{}
654 for k, v in mc {
655 assert m[k] == v
656 all << k
657 all << v
658 }
659 assert all == [3, 9, 4, 16, 5, 25]
660
661 mut m3 := {
662 1: 'one'
663 2: 'two'
664 }
665 assert m3[1] == 'one'
666 m3.delete(1)
667}
668
669enum Color {
670 red
671 green
672 blue
673}
674
675type ColorAlias = Color
676
677fn test_alias_enum() {
678 mut m := map[ColorAlias]string{}
679 m[Color.red] = 'hi'
680 assert m[Color.red] == 'hi'
681}
682
683fn test_enum_in_map() {
684 mut m := map[Color]string{}
685 m[Color.red] = 'hi'
686 assert Color.red in m
687 assert Color.green !in m
688 assert Color.blue !in m
689}
690
691fn test_voidptr_keys() {
692 mut m := map[voidptr]string{}
693 v := 5
694 m[&v] = 'var'
695 m[&m] = 'map'
696 assert m[&v] == 'var'
697 assert m[&m] == 'map'
698 assert m.len == 2
699}
700
701fn test_voidptr_values() {
702 mut m := map[string]voidptr{}
703 v := 5
704 m['var'] = &v
705 m['map'] = &m
706 assert unsafe { m['var'] } == &v
707 assert unsafe { m['map'] } == &m
708 assert m.values().len == 2
709}
710
711fn test_rune_keys() {
712 mut m := {
713 `!`: 2
714 `%`: 3
715 }
716 assert typeof(m).name == 'map[rune]int'
717 assert m[`!`] == 2
718 m[`@`] = 7
719 assert m.len == 3
720 println(m)
721 assert '${m}' == '{`!`: 2, `%`: 3, `@`: 7}'
722
723 mut a := []rune{}
724 for k, v in m {
725 a << k
726 a << rune(v) + `0`
727 }
728 assert a == [`!`, `2`, `%`, `3`, `@`, `7`]
729}
730
731fn test_eq() {
732 a := {
733 'a': 1
734 'b': 2
735 }
736 assert a == {
737 'a': 1
738 'b': 2
739 }
740 b := {
741 'a': [[1]]
742 'b': [[2]]
743 }
744 assert b == {
745 'a': [[1]]
746 'b': [[2]]
747 }
748 c := {
749 'a': {
750 '11': 1
751 }
752 'b': {
753 '22': 2
754 }
755 }
756 assert c == {
757 'a': {
758 '11': 1
759 }
760 'b': {
761 '22': 2
762 }
763 }
764 d := {
765 'a': MValue{
766 name: 'aa'
767 misc: {
768 '11': '1'
769 }
770 }
771 'b': MValue{
772 name: 'bb'
773 misc: {
774 '22': '2'
775 }
776 }
777 }
778 assert d == {
779 'a': MValue{
780 name: 'aa'
781 misc: {
782 '11': '1'
783 }
784 }
785 'b': MValue{
786 name: 'bb'
787 misc: {
788 '22': '2'
789 }
790 }
791 }
792}
793
794fn test_non_string_key_map_str() {
795 assert {
796 23: 4
797 }.str() == '{23: 4}'
798 assert {
799 `a`: 12
800 `b`: 13
801 }.str() == '{`a`: 12, `b`: 13}'
802 assert {
803 23: 'foo'
804 25: 'bar'
805 }.str() == "{23: 'foo', 25: 'bar'}"
806}
807
808fn test_map_assign_empty_map_init() {
809 mut a := {
810 'one': 1
811 }
812 a = {}
813 println(a)
814 assert a == map[string]int{}
815 assert '${a}' == '{}'
816}
817
818fn test_in_map_literal() {
819 assert 1 in {
820 1: 'one'
821 }
822}
823
824fn test_byte_keys() {
825 mut m := map[u8]u8{}
826 byte_max := u8(255)
827 for i in u8(0) .. byte_max {
828 m[i] = i
829 assert m[i] == i
830 }
831 for k, v in m {
832 assert k == v
833 }
834 for i in u8(0) .. 100 {
835 m[i]++
836 assert m[i] == i + 1
837 }
838 assert m.len == byte_max
839 keys := m.keys()
840 for i in u8(0) .. byte_max {
841 assert keys[i] == i
842 }
843 for i in u8(0) .. byte_max {
844 m.delete(i)
845 assert m[i] == 0
846 }
847 assert m.len == 0
848}
849
850fn test_i16_keys() {
851 mut m := map[i16]i16{}
852 end := i16(1000)
853 for i in i16(0) .. end {
854 m[i] = i
855 assert m[i] == i
856 }
857 for k, v in m {
858 assert k == v
859 }
860 for i in i16(0) .. 500 {
861 m[i]++
862 assert m[i] == i + 1
863 }
864 assert m.len == end
865 keys := m.keys()
866 for i in i16(0) .. end {
867 assert keys[i] == i
868 }
869 for i in i16(0) .. end {
870 m.delete(i)
871 assert m[i] == 0
872 }
873 assert m.len == 0
874}
875
876fn test_u16_keys() {
877 mut m := map[u16]u16{}
878 end := u16(1000)
879 for i in u16(0) .. end {
880 m[i] = i
881 assert m[i] == i
882 }
883 for k, v in m {
884 assert k == v
885 }
886 for i in u16(0) .. 500 {
887 m[i]++
888 assert m[i] == i + 1
889 }
890 assert m.len == end
891 keys := m.keys()
892 for i in u16(0) .. end {
893 assert keys[i] == i
894 }
895 for i in u16(0) .. end {
896 m.delete(i)
897 assert m[i] == 0
898 }
899 assert m.len == 0
900}
901
902fn test_u32_keys() {
903 mut m := map[u32]u32{}
904 end := u32(1000)
905 for i in u32(0) .. end {
906 m[i] = i
907 assert m[i] == i
908 }
909 for k, v in m {
910 assert k == v
911 }
912 for i in u32(0) .. 500 {
913 m[i]++
914 assert m[i] == i + 1
915 }
916 assert m.len == end
917 keys := m.keys()
918 for i in u32(0) .. end {
919 assert keys[i] == i
920 }
921 for i in u32(0) .. end {
922 m.delete(i)
923 assert m[i] == 0
924 }
925 assert m.len == 0
926}
927
928fn test_int_keys2() {
929 mut m := map[int]int{}
930 end := 1000
931 for i in int(0) .. end {
932 m[i] = i
933 assert m[i] == i
934 }
935 for k, v in m {
936 assert k == v
937 }
938 for i in int(0) .. 500 {
939 m[i]++
940 assert m[i] == i + 1
941 }
942 assert m.len == end
943 keys := m.keys()
944 for i in int(0) .. end {
945 assert keys[i] == i
946 }
947 for i in int(0) .. end {
948 m.delete(i)
949 assert m[i] == 0
950 }
951 assert m.len == 0
952}
953
954fn test_i64_keys() {
955 mut m := map[i64]i64{}
956 end := i64(1000)
957 for i in i64(0) .. end {
958 m[i] = i
959 assert m[i] == i
960 }
961 for k, v in m {
962 assert k == v
963 }
964 for i in i64(0) .. 500 {
965 m[i]++
966 assert m[i] == i + 1
967 }
968 assert m.len == end
969 keys := m.keys()
970 for i in i64(0) .. end {
971 assert keys[i] == i
972 }
973 for i in i64(0) .. end {
974 m.delete(i)
975 assert m[i] == 0
976 }
977 assert m.len == 0
978}
979
980fn test_u64_keys() {
981 mut m := map[u64]u64{}
982 end := u64(1000)
983 for i in u64(0) .. end {
984 m[i] = i
985 assert m[i] == i
986 }
987 for k, v in m {
988 assert k == v
989 }
990 for i in u64(0) .. 500 {
991 m[i]++
992 assert m[i] == i + 1
993 }
994 assert u64(m.len) == end
995 keys := m.keys()
996 for i in u64(0) .. end {
997 assert keys[i] == i
998 }
999 for i in u64(0) .. end {
1000 m.delete(i)
1001 assert m[i] == 0
1002 }
1003 assert m.len == 0
1004}
1005
1006fn test_map_set_fixed_array_variable() {
1007 mut m := map[string][2]f64{}
1008 m['A'] = [1.1, 2.2]!
1009 println(m)
1010 assert '${m}' == "{'A': [1.1, 2.2]}"
1011
1012 mut m2 := map[string][2]f64{}
1013 arr := [1.1, 2.2]!
1014 m2['A'] = arr
1015 println(m2)
1016 assert '${m2}' == "{'A': [1.1, 2.2]}"
1017}
1018
1019type Map = map[int]int
1020
1021fn test_alias_of_map_delete() {
1022 mut m := Map(map[int]int{})
1023 m[11] = 111
1024 m[22] = 222
1025 println(m)
1026 m.delete(11)
1027 println(m)
1028 assert m.len == 1
1029 assert m[22] == 222
1030}
1031
1032struct State {
1033mut:
1034 state map[string]rune
1035}
1036
1037struct Foo {
1038 bar int
1039 baz int
1040}
1041
1042fn (mut st State) add(s string, r rune) {
1043 st.state[s] = r
1044}
1045
1046fn (mut st State) add2(foos []Foo) {
1047 for f in foos {
1048 st.state['${f.bar},${f.baz}'] = `z`
1049 }
1050}
1051
1052fn (mut st State) reset() {
1053 st.state.clear()
1054}
1055
1056fn test_map_clear() {
1057 mut s := State{}
1058
1059 item1 := [Foo{
1060 bar: 1
1061 baz: 2
1062 }, Foo{
1063 bar: 3
1064 baz: 4
1065 }]
1066 s.add2(item1)
1067 assert s.state.len == 2
1068
1069 s.reset()
1070 s.add2(item1)
1071 assert s.state.len == 2
1072}
1073