コード例 #1
0
        public void TestTreeSetIndexing()
        {
            var set = new TreeSet <int>();

            for (int i = 0; i < 1000; i++)
            {
                set.Add(i);

                for (int j = 0; j <= i; j++)
                {
                    Assert.AreEqual(j, set.GetIndex(j));
                    Assert.AreEqual(j, set.GetItem(j));
                }
                for (int j = i + 1; j < 1000; j++)
                {
                    Assert.AreEqual(-1, set.GetIndex(j));
                    Assert.AreEqual(0, set.GetItem(j));
                }
            }

            for (int i = 0; i < 1000; i++)
            {
                set.Remove(i);

                for (int j = 0; j < 1000; j++)
                {
                    int expected = j - i - 1;
                    if (expected < 0)
                    {
                        expected = -1;
                    }
                    int actual = set.GetIndex(j);
                    Assert.AreEqual(expected, actual);

                    expected = i + j + 1;
                    if (expected >= 1000)
                    {
                        expected = 0;
                    }
                    actual = set.GetItem(j);
                    Assert.AreEqual(expected, actual);
                }
            }
        }
コード例 #2
0
        public void TestPrioQueueMod()
        {
            Random r = new Random(0);

            int[] values         = new int[10000];
            var   notYetInserted = new TreeSet <int>();
            var   notYetDeleted  = new TreeSet <int>();

            for (int i = 0; i < 10000; i++)
            {
                values[i] = r.Next(1000);
                notYetInserted.Add(i);
            }

            var pq = new PrioQueueMod <int>((x, y) => values[x] - values[y], new ArrayLocator <int>(10000));

            while (notYetInserted.Count > 0 || notYetDeleted.Count > 0)
            {
                int n = r.Next(Math.Min(100, notYetInserted.Count + 1));
                while (n-- > 0)
                {
                    int id = notYetInserted.GetItem(r.Next(notYetInserted.Count));
                    notYetInserted.Remove(id);
                    notYetDeleted.Add(id);
                    pq.Insert(id);
                    Assert.IsTrue(pq.IsHeap(0));
                }
                n = r.Next(Math.Min(100, notYetDeleted.Count + 1));
                while (n-- > 0)
                {
                    int id = notYetDeleted.GetItem(r.Next(notYetDeleted.Count));
                    notYetDeleted.Remove(id);
                    pq.Erase(id);
                    Assert.IsTrue(pq.Empty || pq.IsHeap(0));
                }
            }
        }