public void IntIntervalCoverage() { var a = new IntInterval(7, 42); var b = new IntInterval(40, 50); var c = new IntInterval(200, 100); // negative var e = IntInterval.Empty; var empty = IntInterval.Coverage(new IntInterval[] { }); var single = IntInterval.Coverage(new IntInterval[] { a }); var ab = IntInterval.Coverage(new IntInterval[] { a, b }); var ba = IntInterval.Coverage(new IntInterval[] { b, a }); var ac = IntInterval.Coverage(new IntInterval[] { a, c }); var ca = IntInterval.Coverage(new IntInterval[] { c, a }); var ae = IntInterval.Coverage(new IntInterval[] { a, e }); var ea = IntInterval.Coverage(new IntInterval[] { e, a }); var bc = IntInterval.Coverage(new IntInterval[] { b, c }); var cb = IntInterval.Coverage(new IntInterval[] { c, b }); var be = IntInterval.Coverage(new IntInterval[] { b, e }); var eb = IntInterval.Coverage(new IntInterval[] { e, b }); var ce = IntInterval.Coverage(new IntInterval[] { c, e }); var ec = IntInterval.Coverage(new IntInterval[] { e, c }); Assert.IsTrue(c.IsNegative); Assert.AreEqual(0, empty.Right); Assert.AreEqual(0, empty.Left); Assert.AreEqual(a.Left, single.Left); Assert.AreEqual(a.Right, single.Right); Assert.AreEqual(ab.Left, a.Left); Assert.AreEqual(ab.Right, b.Right); Assert.AreEqual(ba.Left, a.Left); Assert.AreEqual(ba.Right, b.Right); Assert.AreEqual(ac.Left, a.Left); Assert.AreEqual(ac.Right, c.Left); // c is negative Assert.AreEqual(ae.Left, a.Left); Assert.AreEqual(ae.Right, a.Right); Assert.AreEqual(ea.Left, a.Left); Assert.AreEqual(ea.Right, a.Right); Assert.AreEqual(ca.Left, a.Left); Assert.AreEqual(ca.Right, c.Left); // c is negative Assert.AreEqual(bc.Left, b.Left); Assert.AreEqual(bc.Right, c.Left); // c is negative Assert.AreEqual(cb.Left, b.Left); Assert.AreEqual(cb.Right, c.Left); // c is negative Assert.AreEqual(be.Left, b.Left); Assert.AreEqual(be.Right, b.Right); Assert.AreEqual(eb.Left, b.Left); Assert.AreEqual(eb.Right, b.Right); Assert.AreEqual(ce.Left, c.Right); // c is negative Assert.AreEqual(ec.Right, c.Left); // c is negative Assert.IsTrue(IntInterval.Coverage(new IntInterval[] { }).IsEmpty); // empty sequence -> empty interval Assert.IsTrue(IntInterval.Coverage(new IntInterval[] { e }).IsEmpty); // sequence of only empty intervals -> empty interval }