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  }