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()) }