Skip to content

Commit 154dc06

Browse files
authored
Fix null as a key (#27)
Signed-off-by: plar <[email protected]>
1 parent 8c34d05 commit 154dc06

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

node.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,10 @@ func (an *artNode) shrink() *artNode {
746746

747747
// Leaf methods
748748
func (l *leaf) match(key Key) bool {
749+
if len(key) == 0 && len(l.key) == 0 {
750+
return true
751+
}
752+
749753
if key == nil || len(l.key) != len(key) {
750754
return false
751755
}

tree_test.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,9 +1076,7 @@ func TestTreeAPI(t *testing.T) {
10761076
assert.True(t, found)
10771077
}
10781078

1079-
//
10801079
// Benchmarks
1081-
//
10821080
func BenchmarkWordsTreeInsert(b *testing.B) {
10831081
words := loadTestFile("test/assets/words.txt")
10841082
b.ResetTimer()
@@ -1495,3 +1493,35 @@ func TestTreeInsertAndSearchKeyWithUnicodeAccentChar(t *testing.T) {
14951493
assert.True(t, found)
14961494
assert.Equal(t, string(accent), v)
14971495
}
1496+
1497+
func TestTreeInsertNilKeyTwice(t *testing.T) {
1498+
tree := newTree()
1499+
1500+
kk := Key("key")
1501+
kv := "kk-value"
1502+
old, updated := tree.Insert(kk, kv)
1503+
assert.Nil(t, old)
1504+
assert.False(t, updated)
1505+
v, found := tree.Search(kk)
1506+
assert.Equal(t, kv, v)
1507+
assert.True(t, found)
1508+
1509+
knil := Key(nil)
1510+
knilv0 := "knil-value-0"
1511+
old, updated = tree.Insert(knil, knilv0)
1512+
assert.Nil(t, old)
1513+
assert.False(t, updated)
1514+
1515+
v, found = tree.Search(knil)
1516+
assert.Equal(t, knilv0, v)
1517+
assert.True(t, found)
1518+
1519+
knilv1 := "knil-value-1"
1520+
old, updated = tree.Insert(knil, knilv1)
1521+
assert.Equal(t, knilv0, old)
1522+
assert.True(t, updated)
1523+
1524+
v, found = tree.Search(knil)
1525+
assert.Equal(t, knilv1, v)
1526+
assert.True(t, found)
1527+
}

0 commit comments

Comments
 (0)