github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/skl/skl_test.go (about) 1 package skl 2 3 import ( 4 "testing" 5 6 "gotest.tools/assert" 7 ) 8 9 func TestSKL(t *testing.T) { 10 // test SkipListIterator 11 skl := NewSkipList() 12 { 13 it := skl.NewIterator() 14 ok := it.First() 15 assert.Assert(t, !ok) 16 } 17 total := 10 18 for j := 0; j < 2; j++ { 19 for i := 0; i < total; i++ { 20 skl.Add(int64(i), i) 21 } 22 } 23 24 assert.Assert(t, skl.Length() == total) 25 26 it := skl.NewIterator() 27 ok := it.First() 28 assert.Assert(t, ok) 29 for i := 0; i < total; i++ { 30 assert.Assert(t, it.Valid()) 31 k, v := it.KeyValue() 32 assert.Assert(t, k == int64(i) && v == i) 33 if i == total-1 { 34 assert.Assert(t, !it.Next()) 35 } else { 36 assert.Assert(t, it.Next()) 37 } 38 } 39 40 for j := 1; j < total-1; j++ { 41 ok = it.SeekGE(int64(j)) 42 assert.Assert(t, ok) 43 for i := j; i < total; i++ { 44 assert.Assert(t, it.Valid()) 45 k, v := it.KeyValue() 46 assert.Assert(t, k == int64(i) && v == i) 47 if i == total-1 { 48 assert.Assert(t, !it.Next()) 49 } else { 50 assert.Assert(t, it.Next()) 51 } 52 } 53 } 54 55 ok = it.SeekGE(int64(total + 1)) 56 assert.Assert(t, !ok) 57 } 58 59 func BenchmarkSKL(b *testing.B) { 60 skl := NewSkipList() 61 for i := 0; i < b.N; i++ { 62 i64 := int64(i) 63 skl.Add(i64, i) 64 skl.Get(i64) 65 } 66 } 67 68 func BenchmarkMap(b *testing.B) { 69 m := make(map[int64]interface{}) 70 for i := 0; i < b.N; i++ { 71 i64 := int64(i) 72 m[i64] = i 73 _ = m[i64] 74 } 75 }