public void GlobalSetup()
        {
            var random = new Random(Seed);
            var set    = new HashSet <int>(Count);

            _data        = new int[Count];
            _tree        = new AvlTree <int>();
            _compactTree = new CompactAvlTree <int>();
            _list        = new List <int>();
            _set         = new SortedSet <int>();
            for (int i = 0; i < Count; i++)
            {
                int number;
                do
                {
                    number = random.Next(MaxNumber) | 1;
                } while (!set.Add(number));
                _data[i] = number;
                var num1 = number + 1;
                _tree.Add(num1);
                _compactTree.Add(num1);
                _set.Add(num1);
                _list.Add(num1);
            }
            _list.Sort();
        }
        public void TestRandomInsertsCompareCallCount()
        {
            var comparer1 = new CountingComparer();
            var comparer2 = new CountingComparer();
            var comparer4 = new CountingComparer();
            var comparer5 = new CountingComparer();
            var tree1     = new AvlTree <int>(comparer1);
            var tree2     = new CompactAvlTree <int>(comparer2);
            var list      = new List <int>();
            var set       = new SortedSet <int>(comparer5);

            for (int i = 0; i < _data.Length; i++)
            {
                var n = _data[i];
                tree1.Add(n);
                tree2.Add(n);
                set.Add(n);
                var index = list.BinarySearch(n, comparer4);
                if (index < 0)
                {
                    list.Insert(~index, n);
                }
            }

            _output.WriteLine($"AvlTree compare calls per 10000 inserts: {comparer1.Count}");
            _output.WriteLine($"CompactAvlTree compare calls per 10000 inserts: {comparer2.Count}");
            _output.WriteLine($"List compare calls per 10000 inserts: {comparer4.Count}");
            _output.WriteLine($"SortedSet (Red-Black tree) compare calls per 10000 inserts: {comparer5.Count}");

            Assert.True(comparer1.Count > 0);
            Assert.True(comparer2.Count > 0);
            Assert.True(comparer4.Count > 0);
            Assert.True(comparer5.Count > 0);
        }
Beispiel #3
0
        public void TestInsert()
        {
            var tree = new CompactAvlTree <int>();

            for (int i = 1; i <= 100; i++)
            {
                Assert.True(tree.TryAdd(i));
            }
        }
        public void TestCompactAvlTree()
        {
            var tree = new CompactAvlTree <decimal>();

            for (int i = 0; i < _data.Length; i++)
            {
                var number = _data[i];
                tree.Add(number);
            }
        }
Beispiel #5
0
        public void InsertBalanceTest()
        {
            var tree = new CompactAvlTree <int>();

            for (int i = 1; i <= 100; i++)
            {
                tree.Add(i);
                CheckBalance(tree);
            }
        }
Beispiel #6
0
        public void DeleteBalanceTest()
        {
            var tree = new CompactAvlTree <int>();

            for (int i = 1; i <= 100; i++)
            {
                tree.Add(i);
            }
            for (int i = 1; i <= 100; i++)
            {
                tree.Remove(i);
                CheckBalance(tree);
            }
        }
Beispiel #7
0
        public void TestDelete()
        {
            var tree = new CompactAvlTree <int>();

            for (int i = 1; i <= 100; i++)
            {
                tree.Add(i);
            }
            Assert.False(tree.Remove(1000));
            for (int i = 1; i <= 100; i++)
            {
                Assert.True(tree.Remove(i));
            }
        }
 public void IterationSetup()
 {
     _tree        = new AvlTree <decimal>();
     _compactTree = new CompactAvlTree <decimal>();
     _list        = new List <decimal>();
     _set         = new SortedSet <decimal>();
     for (int i = 0; i < _data.Length; i++)
     {
         var number = _data[i];
         _tree.Add(number);
         _compactTree.Add(number);
         _set.Add(number);
         _list.Add(number);
     }
     _list.Sort();
 }
Beispiel #9
0
        public void CopyToArrayTest()
        {
            var tree = new CompactAvlTree <int>();
            var src  = new int[100];

            for (int i = 0; i < src.Length; i++)
            {
                src[i] = i + 1;
                tree.Add(i + 1);
            }

            var dest = new int[100];

            tree.CopyTo(dest, 0);
            Assert.Equal(src, dest);
        }
Beispiel #10
0
 private static int CheckDepth(CompactAvlTree <int> .Node node)
 {
     if (node != null)
     {
         int err = 0;
         int rv;
         int b = CheckDepth(node.Left);
         int f = CheckDepth(node.Right);
         if (b == f)
         {
             if (!node.IsBalanced)
             {
                 err = 1;
             }
             rv = b + 1;
         }
         else if (b == f - 1)
         {
             if (node.Longer != CompactAvlTree <int> .Direction.Right)
             {
                 err = 1;
             }
             rv = f + 1;
         }
         else if (b - 1 == f)
         {
             if (node.Longer != CompactAvlTree <int> .Direction.Left)
             {
                 err = 1;
             }
             rv = b + 1;
         }
         else
         {
             err = 1;
             rv  = 0;
         }
         if (err != 0)
         {
             throw new Exception($"Error at {node.Item}: b={b}, f={f}, direction={node.Longer}");
         }
         return(rv);
     }
     return(0);
 }
Beispiel #11
0
        private void CheckBalance(CompactAvlTree <int> tree)
        {
#if DEBUG
            CheckDepth(tree.Root);
#endif
        }