diff --git a/vlib/builtin/map.v b/vlib/builtin/map.v index bf98cb380b..6acf7ae62a 100644 --- a/vlib/builtin/map.v +++ b/vlib/builtin/map.v @@ -57,6 +57,7 @@ fn (m mut map) insert(n mut mapnode, key string, val voidptr) { C.memcpy(n.val, val, m.element_size) if n.is_empty { m.size++ + n.is_empty = false } return } diff --git a/vlib/builtin/map_test.v b/vlib/builtin/map_test.v index 1f17f985f8..a772be5baf 100644 --- a/vlib/builtin/map_test.v +++ b/vlib/builtin/map_test.v @@ -91,39 +91,39 @@ fn test_various_map_value() { mut m1 := map[string]int m1['test'] = 1 assert m1['test'] == 1 - + mut m2 := map[string]string m2['test'] = 'test' assert m2['test'] == 'test' - + mut m3 := map[string]i8 m3['test'] = i8(0) assert m3['test'] == i8(0) - + mut m4 := map[string]i16 m4['test'] = i16(0) assert m4['test'] == i16(0) - + mut m7 := map[string]u16 m7['test'] = u16(0) assert m7['test'] == u16(0) - + mut m8 := map[string]u32 m8['test'] = u32(0) assert m8['test'] == u32(0) - + mut m9 := map[string]bool m9['test'] = true assert m9['test'] == true - + mut m10 := map[string]byte m10['test'] = byte(0) assert m10['test'] == byte(0) - + mut m11 := map[string]f32 m11['test'] = f32(0.0) assert m11['test'] == f32(0.0) - + mut m12 := map[string]f64 m12['test'] = f64(0.0) assert m12['test'] == f64(0.0) @@ -177,7 +177,7 @@ fn test_delete() { println(m['two']) // => 0 assert 'two' in m == false println('two' in m) // => true, on Linux and Windows <-- wrong ! -} +} /* fn test_ref() { @@ -186,6 +186,22 @@ fn test_ref() { mut one := &m['one'] one++ println(*one) - + } */ + +fn test_delete_size() { + arr := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] + mut m := map[string]int + for _ in 0..10 { + for i in 0..10 { + m[arr[i]] = i + } + assert(m.size == 10) + println(m.size) + for i in 0..10 { + m.delete(arr[i]) + } + } +} +