Beispiel #1
0
            public void RemoveNodeWithoutChild()
            {
                var root = new RedBlackTree.Node
                {
                    Value = 2,
                    Color = RedBlackTree.Color.Black,
                    Left  = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Red,
                        Value = 1
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Red,
                        Value = 3
                    }
                };

                var tree = new RedBlackTree(root);

                tree.Remove(3);

                var expected = new RedBlackTree.Node()
                {
                    Color = RedBlackTree.Color.Black,
                    Value = 2,
                    Left  = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Red,
                        Value = 1
                    }
                };

                Assert.Equal(expected, tree._root, new RedBlackTree.NodeEqualityComparer());
            }
        public void Case1Test()
        {
            var any = 0;
            var a   = any;
            var b   = any;
            var c   = any;
            var d   = any;
            var nd  = new RedBlackTree.Node()
            {
                Value = a,
                Color = RedBlackTree.Color.Black,
                Right = new RedBlackTree.Node()
                {
                    Color = RedBlackTree.Color.Red,
                    Value = b,
                    Right = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = d
                    },
                    Left = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = c
                    }
                }
            };

            var tree = new RedBlackTree(nd);

            tree.Case1(nd.Left, nd.Left.Sibling());

            var expected = new RedBlackTree.Node()
            {
                Value = b,
                Color = RedBlackTree.Color.Black,
                Left  = new RedBlackTree.Node()
                {
                    Color = RedBlackTree.Color.Red,
                    Value = a,
                    Right = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = c
                    },
                },
                Right = new RedBlackTree.Node()
                {
                    Color = RedBlackTree.Color.Black,
                    Value = d
                }
            };

            Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer);
        }
Beispiel #3
0
            public void Case1Test__Case5Test()
            {
                var nd = new RedBlackTree.Node()
                {
                    Color = RedBlackTree.Color.Black,
                    Value = 10,
                    Left  = new RedBlackTree.Node()
                    {
                        Value = 5,
                        Color = RedBlackTree.Color.Black
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Value = 15,
                        Left  = new RedBlackTree.Node()
                        {
                            Value = 14,
                            Color = RedBlackTree.Color.Red
                        },
                        Right = new RedBlackTree.Node()
                        {
                            Value = 16,
                            Color = RedBlackTree.Color.Red
                        },
                        Color = RedBlackTree.Color.Black
                    }
                };

                var tree = new RedBlackTree(nd);

                tree.Remove(5);
                var expected = new RedBlackTree.Node()
                {
                    Color = RedBlackTree.Color.Black,
                    Value = 15,
                    Right = new RedBlackTree.Node()
                    {
                        Value = 16,
                        Color = RedBlackTree.Color.Black
                    },
                    Left = new RedBlackTree.Node()
                    {
                        Value = 10,
                        Color = RedBlackTree.Color.Black,
                        Right = new RedBlackTree.Node()
                        {
                            Value = 14,
                            Color = RedBlackTree.Color.Red
                        }
                    },
                };

                Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer);
            }
Beispiel #4
0
            public void TestCase5__Case1()
            {
                var nd = new RedBlackTree.Node()
                {
                    Color = RedBlackTree.Color.Black,
                    Value = 2,
                    Left  = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = 1,
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Value = 3,
                        Color = RedBlackTree.Color.Black,
                        Right = new RedBlackTree.Node()
                        {
                            Color = RedBlackTree.Color.Red,
                            Value = 4,
                        }
                    }
                };

                var tree = new RedBlackTree(nd);

                tree.Remove(3);
                var expected = new RedBlackTree.Node()
                {
                    Value = 2,
                    Color = RedBlackTree.Color.Black,
                    Left  = new RedBlackTree.Node()
                    {
                        Value = 1,
                        Color = RedBlackTree.Color.Black,
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Value = 4,
                        Color = RedBlackTree.Color.Black
                    }
                };

                Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer);
            }
        public void Case8()
        {
            var any = 0;
            var a   = any;
            var b   = any;
            var c   = any;
            var d   = any;

            void ColorDepends(RedBlackTree.Color colorA, RedBlackTree.Color colorC)
            {
                var nd = new RedBlackTree.Node()
                {
                    Color = colorA,
                    Value = a,
                    Left  =
                        new RedBlackTree.Node()
                    {
                        Value = b,
                        Color = RedBlackTree.Color.Black,
                        Left  = new RedBlackTree.Node()
                        {
                            Value = d,
                            Color = RedBlackTree.Color.Red
                        },
                        Right = new RedBlackTree.Node()
                        {
                            Value = c,
                            Color = colorC
                        }
                    }
                };

                var tree = new RedBlackTree(nd);

                tree.Case8(nd.Right, nd.Right.Sibling());
                var expected = new RedBlackTree.Node()
                {
                    Color = colorA,
                    Value = b,
                    Left  = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = d
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Value = a,
                        Color = RedBlackTree.Color.Black,
                        Left  = new RedBlackTree.Node()
                        {
                            Value = c,
                            Color = colorC
                        },
                    }
                };

                Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer);
            }

            ColorDepends(RedBlackTree.Color.Red, RedBlackTree.Color.Red);
            ColorDepends(RedBlackTree.Color.Red, RedBlackTree.Color.Black);
            ColorDepends(RedBlackTree.Color.Black, RedBlackTree.Color.Red);
            ColorDepends(RedBlackTree.Color.Black, RedBlackTree.Color.Black);
        }
Beispiel #6
0
            public void DeleteRedNodeWith2Children__NotWorking()
            {
                var root = new RedBlackTree.Node
                {
                    Value = 2,
                    Color = RedBlackTree.Color.Black,
                    Left  = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = 1
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Red,
                        Value = 4,
                        Left  = new RedBlackTree.Node()
                        {
                            Value = 3, Color = RedBlackTree.Color.Black
                        },
                        Right = new RedBlackTree.Node()
                        {
                            Value = 5,
                            Color = RedBlackTree.Color.Black,
                            Right = new RedBlackTree.Node()
                            {
                                Color = RedBlackTree.Color.Red,
                                Value = 6
                            }
                        }
                    }
                };

                var tree = new RedBlackTree(root);

                tree.Remove(4);

                var expected = new RedBlackTree.Node
                {
                    Value = 2,
                    Color = RedBlackTree.Color.Black,
                    Left  = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = 1
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Red,
                        Value = 5,
                        Left  = new RedBlackTree.Node()
                        {
                            Value = 3, Color = RedBlackTree.Color.Black
                        },
                        Right = new RedBlackTree.Node()
                        {
                            Value = 6,
                            Color = RedBlackTree.Color.Black,
                        }
                    }
                };

                Assert.Equal(expected, tree._root, new RedBlackTree.NodeEqualityComparer());
            }
Beispiel #7
0
            public void Delete6()
            {
                var nd = new RedBlackTree.Node()
                {
                    Color = RedBlackTree.Color.Black,
                    Value = 4,
                    Left  = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = 2,
                        Left  = new RedBlackTree.Node()
                        {
                            Value = 1,
                            Color = RedBlackTree.Color.Black
                        },
                        Right = new RedBlackTree.Node()
                        {
                            Color = RedBlackTree.Color.Black,
                            Value = 3
                        }
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = 6,
                        Left  = new RedBlackTree.Node()
                        {
                            Value = 5,
                            Color = RedBlackTree.Color.Black
                        },
                        Right = new RedBlackTree.Node()
                        {
                            Color = RedBlackTree.Color.Red,
                            Value = 8,
                            Left  = new RedBlackTree.Node()
                            {
                                Value = 7,
                                Color = RedBlackTree.Color.Black
                            },
                            Right = new RedBlackTree.Node()
                            {
                                Value = 9,
                                Color = RedBlackTree.Color.Black,
                                Right = new RedBlackTree.Node()
                                {
                                    Color = RedBlackTree.Color.Red,
                                    Value = 10
                                }
                            }
                        }
                    }
                };

                var tree = new RedBlackTree(nd);

                tree.Remove(6);

                var expected = new RedBlackTree.Node()
                {
                    Value = 4,
                    Color = RedBlackTree.Color.Black,
                    Left  = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Black,
                        Value = 2,
                        Left  = new RedBlackTree.Node()
                        {
                            Value = 1,
                            Color = RedBlackTree.Color.Black
                        },
                        Right = new RedBlackTree.Node()
                        {
                            Color = RedBlackTree.Color.Black,
                            Value = 3
                        }
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Value = 8,
                        Color = RedBlackTree.Color.Black,
                        Right = new RedBlackTree.Node()
                        {
                            Value = 9,
                            Color = RedBlackTree.Color.Black,
                            Right = new RedBlackTree.Node()
                            {
                                Color = RedBlackTree.Color.Red,
                                Value = 10
                            }
                        },
                        Left = new RedBlackTree.Node()
                        {
                            Value = 5,
                            Color = RedBlackTree.Color.Black,
                            Right = new RedBlackTree.Node()
                            {
                                Value = 7,
                                Color = RedBlackTree.Color.Red
                            }
                        }
                    }
                };

                Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer);
            }
Beispiel #8
0
            public void DeleteNodeWithOneChild()
            {
                var root = new RedBlackTree.Node()
                {
                    Left = new RedBlackTree.Node()
                    {
                        Value = 5,
                        Color = RedBlackTree.Color.Black
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Red,
                        Right = new RedBlackTree.Node()
                        {
                            Color = RedBlackTree.Color.Black,
                            Value = 20,
                            Right = new RedBlackTree.Node()
                            {
                                Value = 21,
                                Color = RedBlackTree.Color.Red
                            },
                            Left = new RedBlackTree.Node()
                            {
                                Value = 19,
                                Color = RedBlackTree.Color.Red
                            }
                        },
                        Left = new RedBlackTree.Node()
                        {
                            Color = RedBlackTree.Color.Black,
                            Value = 14
                        },
                        Value = 15,
                    },
                    Value = 10,
                    Color = RedBlackTree.Color.Black
                };
                var tree = new RedBlackTree(root);

                tree.Remove(15);

                var expected = new RedBlackTree.Node()
                {
                    Left = new RedBlackTree.Node()
                    {
                        Value = 5,
                        Color = RedBlackTree.Color.Black
                    },
                    Right = new RedBlackTree.Node()
                    {
                        Color = RedBlackTree.Color.Red,
                        Right = new RedBlackTree.Node()
                        {
                            Color = RedBlackTree.Color.Black,
                            Value = 21,
                        },
                        Left = new RedBlackTree.Node()
                        {
                            Color = RedBlackTree.Color.Black,
                            Value = 14,
                            Right = new RedBlackTree.Node()
                            {
                                Color = RedBlackTree.Color.Red,
                                Value = 19
                            }
                        },
                        Value = 20,
                    },
                    Value = 10,
                    Color = RedBlackTree.Color.Black
                };

                Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer);
            }