diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-13 20:31:51 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-13 20:31:51 -0600 |
commit | 09cc146211148a3b2568261c41a804a802c31d4c (patch) | |
tree | e64dc42bb557664333e313e89ddaafa975126e9a /lib/rbtree/rbtree_test.go | |
parent | a0fc940be0ea888c7b380cd95723da65bbd32bcb (diff) |
re-organize some things between files
Diffstat (limited to 'lib/rbtree/rbtree_test.go')
-rw-r--r-- | lib/rbtree/rbtree_test.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/rbtree/rbtree_test.go b/lib/rbtree/rbtree_test.go index 999eb6f..e6007e1 100644 --- a/lib/rbtree/rbtree_test.go +++ b/lib/rbtree/rbtree_test.go @@ -5,7 +5,10 @@ package rbtree import ( + "fmt" + "io" "sort" + "strings" "testing" "github.com/stretchr/testify/require" @@ -14,6 +17,40 @@ import ( "git.lukeshu.com/btrfs-progs-ng/lib/util" ) +func (t *Tree[K, V]) ASCIIArt() string { + var out strings.Builder + t.root.asciiArt(&out, "", "", "") + return out.String() +} + +func (node *Node[V]) String() string { + switch { + case node == nil: + return "nil" + case node.Color == Red: + return fmt.Sprintf("R(%v)", node.Value) + default: + return fmt.Sprintf("B(%v)", node.Value) + } +} + +func (node *Node[V]) asciiArt(w io.Writer, u, m, l string) { + if node == nil { + fmt.Fprintf(w, "%snil\n", m) + return + } + + node.Right.asciiArt(w, u+" ", u+" ,--", u+" | ") + + if node.Color == Red { + fmt.Fprintf(w, "%s%v\n", m, node) + } else { + fmt.Fprintf(w, "%s%v\n", m, node) + } + + node.Left.asciiArt(w, l+" | ", l+" `--", l+" ") +} + func checkTree[K constraints.Ordered, V any](t *testing.T, expectedSet map[K]struct{}, tree *Tree[util.NativeOrdered[K], V]) { // 1. Every node is either red or black |