public void RandomTests() { int seed = Environment.TickCount; for (int test = 0; test < 100; test++) { var r = new Random(seed + test); IntSet a = RandomIntSet(r), b = RandomIntSet(r); IsFalse(a.IsEmptySet); IsFalse(b.IsEmptySet); var union = a.Union(b); var intsc = a.Intersection(b); var dif = a.Subtract(b); AreEqual(union.Equals(intsc), a.Equals(b)); for (int i = -10; i < 20; i++) { bool ina = a.Contains(i), inb = b.Contains(i); AreEqual(ina || inb, union.Contains(i)); AreEqual(ina && inb, intsc.Contains(i)); AreEqual(ina && !inb, dif.Contains(i)); } var eInv = a.EquivalentInverted(); IsTrue(a.Equals(eInv, IntSet.S_Equivalent)); IsFalse(a.Equals(eInv, IntSet.S_Identical)); IsFalse(a.Equals(eInv, IntSet.S_SameRangeList)); var inv = eInv.Clone(); inv = inv.Inverted(); IsFalse(inv.Equals(eInv)); IsTrue(inv.Equals(eInv, IntSet.S_SameRangeList)); IntSet all = a.Union(inv), none = a.Intersection(inv); IsFalse(all.IsEmptySet); IsTrue(none.IsEmptySet); IsFalse(all.Equals(none)); AreEqual(all.IsInverted ? 0 : 1, all.Count); AreEqual(none.IsInverted ? 1 : 0, none.Count); AreEqual(all, all.Union(none)); AreEqual(all, all.Union(a)); AreEqual(none, all.Intersection(none)); AreEqual(a, all.Intersection(a)); AreEqual(a, a.Subtract(none)); all = all.Inverted(); IsTrue(all.Equals(none)); } }