From adeb279d8762833da6e85d5b6ac0a69bd625b7ab Mon Sep 17 00:00:00 2001 From: Suyono Date: Tue, 8 Aug 2023 12:13:22 +1000 Subject: [PATCH] fix: wrong variable usage --- redblack.go | 4 ++-- redblack_test.go | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/redblack.go b/redblack.go index 9643f8b..7bdfb4b 100644 --- a/redblack.go +++ b/redblack.go @@ -22,7 +22,7 @@ func (t *Tree) rightRotate(node *Node) { left = node.left ) - node.left = node.right + node.left = left.right if node.left != nil { node.left.parent = node } @@ -88,7 +88,7 @@ func (t *Tree) fixup(root, pt *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 grandParentPt = pt.parent.parent diff --git a/redblack_test.go b/redblack_test.go index e7ee649..fd2b228 100644 --- a/redblack_test.go +++ b/redblack_test.go @@ -1,6 +1,10 @@ package redblack -import "testing" +import ( + "math/rand" + "testing" + "time" +) type testKey int @@ -12,22 +16,44 @@ func (k testKey) Compare(c Comparable) int { panic("unexpected type") } +func TestMulti(t *testing.T) { + for i := 0; i < 20; i++ { + TestInsert(t) + } +} + func TestInsert(t *testing.T) { var ( - tree *Tree - out []Comparable - keys = []testKey{7, 6, 5, 4, 3, 2, 1} + tree *Tree + out []Comparable + 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) - for _, k := range keys { + for _, k := range input { tree.Insert(k) } out = tree.Slice() + //t.Log("output:", out) for i, d := range out { if ck, ok := d.(testKey); ok { - if ck != keys[len(keys)-1-i] { + if ck != keys[i] { t.Fatal("mismatch data") } } else {