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); } } }
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)); } } }