Exemplo n.º 1
0
        public void CanExtremityTypeRecompute()
        {
            // Treat null as Both (the default value)
            // unless no ends are being processed:

            ExtremityType?nullable = null;

            Assert.AreEqual(ExtremityType.Both, nullable.Recompute(true, true, true, true));
            Assert.IsNull(nullable.Recompute(false, false, true, true));

            // There remain 4 * 2 * 2 * 2 * 2 = 64 possibilities:

            ExtremityType value = ExtremityType.Both;

            Assert.AreEqual(ExtremityType.Both, value.Recompute(false, false, false, false));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(false, false, true, false));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(false, false, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(false, false, true, true));

            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(true, false, false, false));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(true, false, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(true, false, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(true, false, true, true));

            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(false, true, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(false, true, true, false));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(false, true, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(false, true, true, true));

            Assert.AreEqual(ExtremityType.None, value.Recompute(true, true, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(true, true, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(true, true, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(true, true, true, true));

            value = ExtremityType.JustBegin;

            Assert.AreEqual(ExtremityType.JustBegin,
                            value.Recompute(false, false, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(false, false, true, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(false, false, false, true));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(false, false, true, true));

            Assert.AreEqual(ExtremityType.None, value.Recompute(true, false, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(true, false, true, false));
            Assert.AreEqual(ExtremityType.None, value.Recompute(true, false, false, true));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(true, false, true, true));

            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(false, true, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(false, true, true, false));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(false, true, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(false, true, true, true));

            Assert.AreEqual(ExtremityType.None, value.Recompute(true, true, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(true, true, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(true, true, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(true, true, true, true));

            value = ExtremityType.JustEnd;

            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(false, false, false, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(false, false, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(false, false, false, true));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(false, false, true, true));

            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(true, false, false, false));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(true, false, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(true, false, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(true, false, true, true));

            Assert.AreEqual(ExtremityType.None, value.Recompute(false, true, false, false));
            Assert.AreEqual(ExtremityType.None, value.Recompute(false, true, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(false, true, false, true));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(false, true, true, true));

            Assert.AreEqual(ExtremityType.None, value.Recompute(true, true, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(true, true, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(true, true, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(true, true, true, true));

            value = ExtremityType.None;

            Assert.AreEqual(ExtremityType.None, value.Recompute(false, false, false, false));
            Assert.AreEqual(ExtremityType.None, value.Recompute(false, false, true, false));
            Assert.AreEqual(ExtremityType.None, value.Recompute(false, false, false, true));
            Assert.AreEqual(ExtremityType.None, value.Recompute(false, false, true, true));

            Assert.AreEqual(ExtremityType.None, value.Recompute(true, false, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(true, false, true, false));
            Assert.AreEqual(ExtremityType.None, value.Recompute(true, false, false, true));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(true, false, true, true));

            Assert.AreEqual(ExtremityType.None, value.Recompute(false, true, false, false));
            Assert.AreEqual(ExtremityType.None, value.Recompute(false, true, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(false, true, false, true));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(false, true, true, true));

            Assert.AreEqual(ExtremityType.None, value.Recompute(true, true, false, false));
            Assert.AreEqual(ExtremityType.JustBegin, value.Recompute(true, true, true, false));
            Assert.AreEqual(ExtremityType.JustEnd, value.Recompute(true, true, false, true));
            Assert.AreEqual(ExtremityType.Both, value.Recompute(true, true, true, true));
        }