diff --git a/vlib/builtin/map.v b/vlib/builtin/map.v index c2be212951..fe95a223d9 100644 --- a/vlib/builtin/map.v +++ b/vlib/builtin/map.v @@ -16,7 +16,7 @@ pub: struct mapnode { left &mapnode right &mapnode - is_empty bool + is_empty bool // set by delete() key string val voidptr } @@ -97,7 +97,7 @@ fn (n & mapnode) find(key string, out voidptr, element_size int) bool{ // same as `find`, but doesn't return a value. Used by `exists` fn (n & mapnode) find2(key string, element_size int) bool{ - if n.key == key { + if n.key == key && !n.is_empty { return true } else if n.key > key { diff --git a/vlib/builtin/map_test.v b/vlib/builtin/map_test.v index fa6a4d294a..1f17f985f8 100644 --- a/vlib/builtin/map_test.v +++ b/vlib/builtin/map_test.v @@ -168,6 +168,17 @@ fn test_mut_arg() { assert m['a'] == 10 } +fn test_delete() { + mut m := map[string]int + m['one'] = 1 + m['two'] = 2 + println(m['two']) // => "2" + m.delete('two') + println(m['two']) // => 0 + assert 'two' in m == false + println('two' in m) // => true, on Linux and Windows <-- wrong ! +} + /* fn test_ref() { m := { 'one': 1 }