public void NegativeSampleTestWithCustomVariation2()
        {
            var destination = new Parameter <string>("Destination")
            {
                "Whistler", "Hawaii", "Las Vegas"
            };

            var hotelQuality = new Parameter <int>("HotelQuality")
            {
                5, 4, 3, 2, 1
            };

            var activity = new Parameter <string>("Activity")
            {
                "gambling", "swimming", "shopping", "skiing"
            };

            var parameters = new List <ParameterBase> {
                destination, hotelQuality, activity
            };
            var constraints = new List <Constraint <VacationVariation> >
            {
                Constraint <VacationVariation> .Conditional(v => v.Filter())
            };

            var model = new Model <VacationVariation>(parameters, constraints);

            Assert.Throws(typeof(InvalidOperationException), () => model.GenerateVariations(2));
        }
        public void EmptyConstraintTest()
        {
            var a = new Parameter <string>("A")
            {
                "A0",
                "A1",
            };

            var b = new Parameter <string>("B")
            {
                "B0",
                "B1"
            };

            var c = new Parameter <string>("C")
            {
                "C0",
                "C1"
            };

            var parameters = new List <ParameterBase> {
                a, b, c
            };
            var constraints = new List <Constraint <Variation> >
            {
                Constraint <Variation> .Conditional(v => a.GetValue(v) != a.GetValue(v))
            };

            Model model = new Model(parameters, constraints);

            Assert.True(model.GenerateVariations(2).Count() == 0);
        }
        public void BasicConstraintTest()
        {
            var p1 = new Parameter <string>("P1")
            {
                "one", "two"
            };
            var p2 = new Parameter <int>("P2")
            {
                1, 2
            };

            var parameters = new List <ParameterBase>
            {
                p1,
                p2,
                new Parameter <double>("P3")
                {
                    1.0,
                    2.0
                }
            };

            var constraints = new List <Constraint <Variation> >
            {
                Constraint <Variation> .Conditional(v => p1.GetValue(v) == "one" && p2.GetValue(v) == 2)
            };

            Model model = new Model(parameters, constraints);

            Assert.True(model.GenerateVariations(2).Count() == 2);
            Assert.True(model.GenerateVariations(2).All((v) => v["P1"].Equals("one")));
            Assert.True(model.GenerateVariations(2).All((v) => v["P2"].Equals(2)));
        }
        public void NonConditionalConstraintTestWithCustomVariation()
        {
            var os1 = new Parameter <string>("OS1")
            {
                "Vista", "Win7"
            };
            var os2 = new Parameter <string>("OS2")
            {
                "Vista", "Win7"
            };

            var sku1 = new Parameter <string>("SKU1")
            {
                "Enterprise", "Home Basic", "Home Premium", "Ultimate"
            };
            var sku2 = new Parameter <string>("SKU2")
            {
                "Enterprise", "Home Basic", "Home Premium", "Ultimate"
            };

            var lang1 = new Parameter <string>("Lang1")
            {
                "EN", "DEU", "JPN"
            };
            var lang2 = new Parameter <string>("Lang2")
            {
                "EN", "DEU", "JPN"
            };

            var parameters = new List <ParameterBase> {
                os1, os2, sku1, sku2, lang1, lang2
            };
            var constraints = new List <Constraint <UpgradeVariation> >
            {
                Constraint <UpgradeVariation> .Conditional(v => v.OS1 != v.OS2 && v.SKU1 != v.SKU2 && v.Lang1 != v.Lang2)
            };

            var model = new Model <UpgradeVariation>(parameters, constraints);

            var expectedVariations = new List <string>
            {
                "Vista Win7 Enterprise Home Basic EN DEU",
                "Win7 Vista Enterprise Home Premium DEU EN",
                "Vista Win7 Enterprise Ultimate JPN EN",
                "Vista Win7 Enterprise Home Premium DEU JPN",
                "Win7 Vista Home Basic Enterprise EN JPN",
                "Win7 Vista Home Basic Home Premium JPN DEU",
                "Vista Win7 Home Basic Ultimate DEU EN",
                "Vista Win7 Home Premium Enterprise DEU EN",
                "Win7 Vista Home Premium Home Basic JPN DEU",
                "Vista Win7 Ultimate Enterprise JPN DEU",
                "Win7 Vista Ultimate Home Basic DEU EN",
                "Vista Win7 Home Premium Home Basic EN JPN",
                "Win7 Vista Home Premium Ultimate EN DEU",
                "Vista Win7 Ultimate Home Premium EN JPN",
                "Win7 Vista Home Premium Ultimate EN JPN"
            };

            var actualVariations = UpgradeVariation.WriteVariations(model.GenerateVariations(2));

            Assert.True(expectedVariations.Count == actualVariations.Count, "Expected: " + expectedVariations.Count + " Actual: " + actualVariations.Count);

            for (int i = 0; i < expectedVariations.Count; i++)
            {
                Assert.True(expectedVariations[i] == actualVariations[i], "Expected: " + expectedVariations[i] + " Actual: " + actualVariations[i]);
            }
        }