예제 #1
0
        private void MinPriorityQueueConstructor(MinPriorityQueue <int> pq)
        {
            Assert.True(pq.IsEmpty);
            var rand  = new Random((int)DateTime.Now.Ticks & 0x0000ffff);
            var set   = new TreeSet <int>();
            var count = 0;

            while (count < 10000)
            {
                var next = rand.Next() % 100000;
                if (!set.Contains(next))
                {
                    pq.Push(next);
                    set.Add(next);
                    count++;
                    Assert.Equal(set.Min, pq.Top);
                }
            }
            Assert.False(pq.IsEmpty);
            Assert.Equal(10000, pq.Count);
            for (var i = 0; i < 1000; i++)
            {
                Assert.Equal(set.Min, pq.Top);
                Assert.Equal(set.Min, pq.Pop());
                set.RemoveMin();
            }
            Assert.Equal(9000, pq.Count);

            var newCount = 0;

            while (newCount < 5000)
            {
                var next = rand.Next() % 100000;
                if (!set.Contains(next))
                {
                    pq.Push(next);
                    set.Add(next);
                    newCount++;
                }
            }
            Assert.Equal(14000, pq.Count);
            for (var i = 0; i < 4000; i++)
            {
                Assert.Equal(set.Min, pq.Top);
                Assert.Equal(set.Min, pq.Pop());
                set.RemoveMin();
            }
            Assert.Equal(10000, pq.Count);
        }
예제 #2
0
 private void Pop(MinPriorityQueue <Order> pq, TreeSet <int> set, int count)
 {
     for (var i = 0; i < count; i++)
     {
         Assert.Equal(set.Min, pq.Top.Id);
         Assert.Equal(set.Min, pq.Pop().Id);
         set.RemoveMin();
     }
 }
예제 #3
0
        public void TestTreeSetSimpleOperations()
        {
            ISortedSet <int> set = new TreeSet <int>();
            var count            = 0;

            foreach (var item in set)
            {
                count++;
            }
            Assert.True(count == 0);
            Assert.True(set.Count == 0);
            set.Add(10);
            set.Add(20);
            set.Add(30);
            set.Add(5);
            set.Add(1);
            Assert.True(set.Contains(20));
            Assert.False(set.Contains(100));
            Assert.Equal(5, set.Count);
            Assert.Equal(30, set.Max);
            Assert.Equal(1, set.Min);

            var list = new List <int>();

            foreach (var item in set)
            {
                list.Add(item);
            }

            Assert.True(list.Count == set.Count);

            foreach (var item in list)
            {
                Assert.True(set.Contains(item));
            }

            var array = new int[5];

            set.CopyTo(array, 0);
            foreach (var item in array)
            {
                Assert.True(set.Contains(item));
            }

            Assert.True(set.Remove(5));
            Assert.Equal(4, set.Count);
            Assert.False(set.Contains(5));

            set.RemoveMin();
            Assert.Equal(3, set.Count);
            Assert.False(set.Contains(1));

            set.Clear();
            Assert.Equal(0, set.Count);
        }
예제 #4
0
        public void TestTreeSetRandomOperations()
        {
            for (int j = 0; j < 10; j++)
            {
                ISortedSet <int> set = new TreeSet <int>();

                Random     randomValue = new Random((int)(DateTime.Now.Ticks & 0x0000FFFF));
                List <int> list        = new List <int>();
                int        testNumber  = 1000;
                while (set.Count < testNumber)
                {
                    int v = randomValue.Next();
                    if (!set.Contains(v))
                    {
                        set.Add(v);
                        list.Add(v);
                    }
                }

                int count = 0;
                foreach (var item in set)
                {
                    Assert.True(list.Contains(item));
                    count++;
                }
                Assert.True(count == set.Count);

                Assert.Equal(testNumber, set.Count);

                Random randomIndex = new Random((int)(DateTime.Now.Ticks & 0x0000FFFF));
                for (int i = 0; i < 100; i++)
                {
                    int index = randomIndex.Next();
                    index  = index < 0 ? (-index) : index;
                    index %= testNumber;
                    int testValue = list[index];
                    Assert.True(set.Contains(testValue));
                }

                for (int i = 0; i < 100; i++)
                {
                    int min = list.Min();
                    Assert.Equal(min, set.Min);
                    set.RemoveMin();
                    Assert.Equal(testNumber - i - 1, set.Count);
                    Assert.False(set.Contains(min));
                    list.Remove(min);
                }

                testNumber -= 100;
                for (int i = 0; i < 100; i++)
                {
                    int max = list.Max();
                    Assert.Equal(max, set.Max);
                    set.RemoveMax();
                    Assert.Equal(testNumber - i - 1, set.Count);
                    Assert.False(set.Contains(max));
                    list.Remove(max);
                }

                testNumber -= 100;
                for (int i = 0; i < 100; i++)
                {
                    int index = randomIndex.Next();
                    index  = index < 0 ? (-index) : index;
                    index %= testNumber - i;
                    int toRemove = list[index];
                    Assert.True(set.Contains(toRemove));
                    Assert.True(set.Remove(toRemove));
                    Assert.False(set.Contains(toRemove));
                    Assert.Equal(testNumber - i - 1, set.Count);
                    list.Remove(toRemove);
                }
            }
        }