public void TestMethodShrinkingRange() { var rc = new SparseIntRange(); rc.AddInclusive(1, 4); // rc = [(1,4)] -> [1,2,3,4] Assert.AreEqual(1, rc.RangeCount); Assert.IsFalse(rc.Contains(0)); Assert.IsTrue(rc.Contains(1)); Assert.IsTrue(rc.Contains(2)); Assert.IsTrue(rc.Contains(3)); Assert.IsTrue(rc.Contains(4)); Assert.IsFalse(rc.Contains(5)); Assert.AreEqual(4, rc.Count); Assert.AreEqual(1, rc.Lower); Assert.AreEqual(4, rc.Upper); rc.Remove(IntRange.FromInteger(-2)); // rc = [(1,4)] -> [1,2,3,4] Assert.AreEqual(1, rc.RangeCount); Assert.IsFalse(rc.Contains(0)); Assert.IsTrue(rc.Contains(1)); Assert.IsTrue(rc.Contains(2)); Assert.IsTrue(rc.Contains(3)); Assert.IsTrue(rc.Contains(4)); Assert.IsFalse(rc.Contains(5)); Assert.AreEqual(4, rc.Count); Assert.AreEqual(1, rc.Lower); Assert.AreEqual(4, rc.Upper); rc.Remove(IntRange.FromInteger(2)); // rc = [(1,1),(3,4)] -> [1,3,4] Assert.AreEqual(2, rc.RangeCount); Assert.IsFalse(rc.Contains(0)); Assert.IsTrue(rc.Contains(1)); Assert.IsFalse(rc.Contains(2)); Assert.IsTrue(rc.Contains(3)); Assert.IsTrue(rc.Contains(4)); Assert.IsFalse(rc.Contains(5)); Assert.AreEqual(3, rc.Count); Assert.AreEqual(1, rc.Lower); Assert.AreEqual(4, rc.Upper); rc.RemoveInclusive(3, 4); // rc = [(1,1)] -> [1] Assert.AreEqual(1, rc.RangeCount); Assert.IsFalse(rc.Contains(0)); Assert.IsTrue(rc.Contains(1)); Assert.IsFalse(rc.Contains(2)); Assert.AreEqual(1, rc.Count); Assert.AreEqual(1, rc.Lower); Assert.AreEqual(1, rc.Upper); rc.Remove(1); // rc = [] -> [] Assert.AreEqual(0, rc.RangeCount); Assert.IsFalse(rc.Contains(0)); Assert.IsFalse(rc.Contains(1)); Assert.IsFalse(rc.Contains(2)); Assert.AreEqual(0, rc.Count); }