map: fix `in` for deleted keys
							parent
							
								
									39adc984a8
								
							
						
					
					
						commit
						57fbf0b8a9
					
				|  | @ -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 { | ||||
|  |  | |||
|  | @ -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 } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue