Ejemplo n.º 1
0
        public void TestCtors()
        {
            var empty = new RedBlackSetTester<char>();
            Assert.That(empty.Empty, Is.True);
            Assert.That(empty.Count(), Is.EqualTo(0));
            Assert.That(empty.ToList(), Is.Empty);
            empty.Add('1');
            Assert.That(empty.Empty, Is.False);
            Assert.That(empty.Count(), Is.EqualTo(1));

            WithRandomNumbers(list =>
                {
                    var range = Enumerable.Range(42, list.Count);
                    var two = new RedBlackMapTester<int, int>(list, range);
                    var prs = new RedBlackMapTester<int, int>(list.Zip<int, int, KeyValuePair<int, int>>(range, RedBlackMap<int, int>.KeyValuePair.Create));
                    var tup = new RedBlackMapTester<int, int>(list.Zip<int, int, Tuple<int, int>>(range, Tuple.Create));
                    Assert.That(two.ToArray(), Is.EqualTo(prs.ToList()));
                    Assert.That(two.ToArray(), Is.EqualTo(tup.ToList()));
                });

            Assert.That(() =>
                {
                    new RedBlackMapTester<int, int>(Enumerable.Range(1, 3), Enumerable.Range(1, 4));
                }, Throws.ArgumentException);
        }
Ejemplo n.º 2
0
 public void TestExceptWith()
 {
     var a = new RedBlackSetTester<int>(_numbers);
     Assert.That(() => a.ExceptWith(null), Throws.InstanceOf<ArgumentNullException>());
     a.ExceptWith(_odd);
     Assert.That(a, Is.EqualTo(_even.Where(x => x <= _numbers.Max())));
     a.ExceptWith(_primes);
     Assert.That(a, Is.EqualTo(_even.Where(x => x > 2 && x <= _numbers.Max())));
 }
Ejemplo n.º 3
0
 public void TestIntersectWith()
 {
     var a = new RedBlackSetTester<int>(_even);
     Assert.That(() => a.IntersectWith(null), Throws.InstanceOf<ArgumentNullException>());
     a.IntersectWith(_primes);
     Assert.That(a, Has.Count.EqualTo(1));
     Assert.That(a.Contains(2));
     a.IntersectWith(_odd);
     Assert.That(a, Is.Empty);
 }
Ejemplo n.º 4
0
        public void TestBalancedness()
        {
            var perfect = new RedBlackSetTester<int>();
            perfect.Add(4);
            perfect.Add(2);
            perfect.Add(1);
            perfect.Add(3);
            perfect.Add(6);
            perfect.Add(5);
            perfect.Add(7);

            Assert.That(perfect.MaxDepth(), Is.EqualTo(3));
        }
Ejemplo n.º 5
0
 public void TestIsProperSubsetOf()
 {
     var a = new RedBlackSetTester<int>();
     Assert.That(() => a.IsProperSubsetOf(null), Throws.InstanceOf<ArgumentNullException>());
     Assert.That(a.IsProperSubsetOf(Enumerable.Range(1, 1)));
     Assert.That(a.IsProperSubsetOf(Enumerable.Empty<int>()), Is.False);
     a.AddRange(_primes);
     Assert.That(a.IsProperSubsetOf(_numbers));
     a.AddRange(_even.Where(UpTo100));
     Assert.That(a.IsProperSubsetOf(_numbers));
     a.AddRange(_odd.Where(UpTo100));
     Assert.That(a.IsProperSubsetOf(_numbers), Is.False);
 }
Ejemplo n.º 6
0
        public void TestCacheWorks()
        {
            var init = new int[] { 2, 3, 4, 5 };

            var t = new RedBlackSetTester<int>(init);

            Assert.That(t.Cache, Is.EqualTo(init));
            Assert.That(t.Remove(4), Is.True);
            var remove = init.Where(i => i != 4);
            Assert.That(t.Add(2), Is.False);
            Assert.That(t.Cache, Is.EquivalentTo(remove));
            Assert.That(t.Add(7), Is.True);
            var add = remove.Concat(Enumerable.Repeat(7, 1));
            Assert.That(t.Cache, Is.EquivalentTo(add));
            t.Clear();
            Assert.That(t.Cache, Is.Empty);
        }
Ejemplo n.º 7
0
        public void TestDepthOfLinearInsertion()
        {
            const int up2 = 9999;

            var rbt = new RedBlackSetTester<int>(Enumerable.Range(1, 7));

            double max = 0.0;
            for (int i = 8; i <= up2; ++i)
            {
                rbt.Add(i);
                double actual = rbt.MaxDepth();
                double perfect = Math.Log(i, 2.0);
                double ratio = actual / perfect;
                max = Math.Max(max, ratio);
            }

            Assert.That(rbt.Count, Is.EqualTo(up2));
            Assert.That(max, Is.LessThanOrEqualTo(2.0));
        }
Ejemplo n.º 8
0
 public void TestOrderedness()
 {
     WithRandomNumbers(list =>
         {
             var rbt = new RedBlackSetTester<int>(list);
             Assert.That(rbt.AreNodesOrdered(), Is.True);
         });
 }
Ejemplo n.º 9
0
        public void TestDepthWithRandomNumbers()
        {
            WithRandomNumbers(list =>
            {
                if (list.Count <= 1)
                {
                    return;
                }

                var rbt = new RedBlackSetTester<int>(list);

                var depth = rbt.MaxDepth();
                var theory = Math.Log(list.Count, 2.0) * 2.0;
                Assert.That(depth, Is.LessThanOrEqualTo(theory),
                    "The tree is not well balanced.");
            }, new int[] { 255, 256, 257, 9999, 99999 });
        }
Ejemplo n.º 10
0
 public void TestUnionWith()
 {
     var a = new RedBlackSetTester<int>(_odd.Where(UpTo100));
     Assert.That(() => a.SymmetricExceptWith(null), Throws.InstanceOf<ArgumentNullException>());
     int count = a.Count;
     a.UnionWith(_primes);
     Assert.That(a.Count, Is.EqualTo(count + 1));
     Assert.That(a.Contains(2));
     a.UnionWith(_even.Where(UpTo100));
     Assert.That(a.SetEquals(_numbers));
 }
Ejemplo n.º 11
0
 public void TestSymmetricExceptWith()
 {
     var a = new RedBlackSetTester<int>(_odd.Where(UpTo100));
     Assert.That(() => a.SymmetricExceptWith(null), Throws.InstanceOf<ArgumentNullException>());
     a.SymmetricExceptWith(_even.Where(UpTo100));
     Assert.That(a.SetEquals(_numbers));
     a.Clear();
     a.AddRange(_primes);
     a.SymmetricExceptWith(_odd.Where(UpTo100).Concat(Enumerable.Repeat(2, 2)));
     Assert.That(a.Contains(_primes.First()), Is.False);
     Assert.That(_primes.Skip(1).All(p => !a.Contains(p)));
 }
Ejemplo n.º 12
0
 public void TestSetEquals()
 {
     var a = new RedBlackSetTester<int>(_odd.Where(UpTo100));
     Assert.That(() => a.SetEquals(null), Throws.InstanceOf<ArgumentNullException>());
     Assert.That(a.SetEquals(_numbers), Is.False);
     a.AddRange(_primes);
     Assert.That(a.SetEquals(_numbers), Is.False);
     a.AddRange(_even.Where(UpTo100));
     Assert.That(a.SetEquals(_numbers));
 }
Ejemplo n.º 13
0
 public void TestOverlap()
 {
     var a = new RedBlackSetTester<int>(_odd);
     Assert.That(() => a.Overlaps(null), Throws.InstanceOf<ArgumentNullException>());
     Assert.That(a.Overlaps(_even), Is.False);
     a.AddRange(_primes);
     Assert.That(a.Overlaps(_even));
 }
Ejemplo n.º 14
0
 public void TestIsSupersetOf()
 {
     var a = new RedBlackSetTester<int>();
     Assert.That(() => a.IsSupersetOf(null), Throws.InstanceOf<ArgumentNullException>());
     Assert.That(a.IsSupersetOf(Enumerable.Empty<int>()));
     Assert.That(a.IsSupersetOf(Enumerable.Range(1, 1)), Is.False);
     a.AddRange(_odd);
     Assert.That(a.IsSupersetOf(_primes), Is.False);
     a.Add(2);
     Assert.That(a.IsSupersetOf(_primes));
 }