github.com/suyanan/collections@v0.0.0-20210402091704-4e7755ef5a0d/avl_tree_test.go (about) 1 package collections 2 3 import ( 4 "math/rand" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestAVLTree(t *testing.T) { 11 tree := NewAVLTree() 12 for i := 0; i < maxNum; i++ { 13 tree.Insert(i) 14 tree.Insert(maxNum + i) 15 } 16 assert.Equal(t, len(tree.AllValues()), maxNum*2) 17 assert.True(t, assertSort(tree.AllValues())) 18 assert.Equal(t, tree.GetMaxValue(), 2*maxNum-1) 19 assert.Equal(t, tree.GetMinValue(), 0) 20 assert.True(t, tree.Search(50)) 21 assert.True(t, tree.Search(100)) 22 assert.False(t, tree.Search(-10)) 23 assert.False(t, tree.Delete(-10)) 24 assert.True(t, tree.Delete(10)) 25 assert.True(t, assertSort(tree.AllValues())) 26 assert.Equal(t, len(tree.AllValues()), maxNum*2-1) 27 } 28 29 func TestAVLTreeRandom(t *testing.T) { 30 tree := NewAVLTree() 31 for i := 0; i < maxNum; i++ { 32 tree.Insert(rand.Int()) 33 } 34 assert.Equal(t, len(tree.AllValues()), maxNum) 35 assert.True(t, assertSort(tree.AllValues())) 36 } 37 38 func genAVL(n int) *AVLTree { 39 t := NewAVLTree() 40 for i := 0; i < n; i++ { 41 t.Insert(rand.Int()) 42 } 43 return t 44 } 45 46 func BenchmarkAVLInsert10e1(b *testing.B) { genAVL(10e1) } 47 func BenchmarkAVLInsert10e2(b *testing.B) { genAVL(10e2) } 48 func BenchmarkAVLInsert10e3(b *testing.B) { genAVL(10e3) } 49 func BenchmarkAVLInsert10e4(b *testing.B) { genAVL(10e4) } 50 func BenchmarkAVLInsert10e5(b *testing.B) { genAVL(10e5) } 51 52 var at = genAVL(10e5) 53 54 func BenchmarkAVLSearch(b *testing.B) { at.Search(rand.Int()) } 55 func BenchmarkAVLDelete(b *testing.B) { at.Delete(rand.Int()) }