fix: wrong variable usage

This commit is contained in:
Suyono 2023-08-08 12:13:22 +10:00
parent caaf53b30d
commit adeb279d87
2 changed files with 34 additions and 8 deletions

View File

@ -22,7 +22,7 @@ func (t *Tree) rightRotate(node *Node) {
left = node.left left = node.left
) )
node.left = node.right node.left = left.right
if node.left != nil { if node.left != nil {
node.left.parent = node node.left.parent = node
} }
@ -88,7 +88,7 @@ func (t *Tree) fixup(root, pt *Node) {
unclePt *Node unclePt *Node
) )
for pt != t.root && pt.color != 0 && pt.parent.color == 1 { for pt != root && pt.color != 0 && pt.parent.color == 1 {
parentPt = pt.parent parentPt = pt.parent
grandParentPt = pt.parent.parent grandParentPt = pt.parent.parent

View File

@ -1,6 +1,10 @@
package redblack package redblack
import "testing" import (
"math/rand"
"testing"
"time"
)
type testKey int type testKey int
@ -12,22 +16,44 @@ func (k testKey) Compare(c Comparable) int {
panic("unexpected type") panic("unexpected type")
} }
func TestMulti(t *testing.T) {
for i := 0; i < 20; i++ {
TestInsert(t)
}
}
func TestInsert(t *testing.T) { func TestInsert(t *testing.T) {
var ( var (
tree *Tree tree *Tree
out []Comparable out []Comparable
keys = []testKey{7, 6, 5, 4, 3, 2, 1} keys []testKey
input []testKey
) )
keys = make([]testKey, 1000000)
for i := range keys {
keys[i] = testKey(i + 1)
}
//t.Log("base:", keys)
input = make([]testKey, len(keys))
copy(input, keys)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
r.Shuffle(len(input), func(i, j int) {
input[i], input[j] = input[j], input[i]
})
//t.Log("shuffled:", input)
tree = new(Tree) tree = new(Tree)
for _, k := range keys { for _, k := range input {
tree.Insert(k) tree.Insert(k)
} }
out = tree.Slice() out = tree.Slice()
//t.Log("output:", out)
for i, d := range out { for i, d := range out {
if ck, ok := d.(testKey); ok { if ck, ok := d.(testKey); ok {
if ck != keys[len(keys)-1-i] { if ck != keys[i] {
t.Fatal("mismatch data") t.Fatal("mismatch data")
} }
} else { } else {