Beispiel #1
0
        public void DerivationOnlyNecessaryFactsTestCase()
        {
            int       counter       = 0;
            const int expectedValue = 5;
            var       container     = new Container
            {
                new Input16Fact(0),
                new Input15Fact(0),
            };

            GivenCreateFactFactory()
            .AndRulesNotNul()
            .AndAddRules(new Collection
            {
                // main rule.
                (Input2Fact f) =>
                {
                    counter++;
                    return(new Input1Fact(f.Value + 1));
                }
            })
            .AndAddRules(new Collection
            {
                // way.
                (Input8Fact f) =>
                {
                    counter++;
                    return(new Input2Fact(f.Value + 1));
                },
                (Input9Fact f) =>
                {
                    counter++;
                    return(new Input8Fact(f.Value + 1));
                },
                (Input10Fact f) =>
                {
                    counter++;
                    return(new Input9Fact(f.Value + 1));
                },
                (Input16Fact f) =>
                {
                    counter++;
                    return(new Input10Fact(f.Value + 1));
                },
            })
            .AndAddRules(new Collection
            {
                // another rule to output the penultimate fact.
                (Input8Fact f) =>
                {
                    counter++;
                    return(new Input10Fact(f.Value + 1));
                }
            })
            .When("Derive facts.", factFactory =>
                  factFactory.DeriveFact <Input1Fact>(container))
            .Then("Check result.", _ =>
                  Assert.AreEqual(expectedValue, counter, "It had to work out 5 rules"))
            .Run();
        }
Beispiel #2
0
        public void DerivedThreeFactsTestCase()
        {
            Input6Fact  input6Fact  = null;
            Input16Fact input16Fact = null;
            Input7Fact  input7Fact  = null;
            var         container   = new Container
            {
                new Input3Fact(3),
            };

            GivenCreateFactFactory()
            .AndAddRules(RuleCollectionHelper.GetInputFactRules())
            .And("Want fact6.", factory =>
                 factory.WantFacts((Input6Fact fact) => { input6Fact = fact; }, container))
            .And("Want fact16.", factory =>
                 factory.WantFacts((Input16Fact fact) => { input16Fact = fact; }, container))
            .And("Want fact16.", factory =>
                 factory.WantFacts((Input7Fact fact) => { input7Fact = fact; }, container))
            .When("Derive facts.", factory =>
                  factory.Derive())
            .Then("Check error.", _ =>
            {
                Assert.IsNotNull(input6Fact, "input6Fact is not derived");
                Assert.IsNotNull(input16Fact, "input16Fact is not derived");
                Assert.IsNotNull(input7Fact, "input7Fact is not derived");
            })
            .Run();
        }
Beispiel #3
0
        public void AddFactWithoutWriterTestCase()
        {
            var container = new Container();

            container.IsReadOnly = true;

            GivenEmpty()
            .When("Add fact.", () =>
                  ExpectedFactFactoryException(() => container.Add(new IntFact(default))))
Beispiel #4
0
        public void ContainerCannotBeNullTestCase()
        {
            const string expectedReason = "Container cannot be null.";
            Container    container      = null;

            GivenCreateFacade()
            .When("Run method ValidateAndGetRules.", facade =>
                  ExpectedDeriveException(() => facade.ValidateContainer(container)))
            .ThenAssertErrorDetail(ErrorCode.InvalidData, expectedReason)
            .Run();
        }
Beispiel #5
0
        public void GetFactFromContainerTastCase()
        {
            var input6Fact = new Input6Fact(6);
            var container  = new Container
            {
                input6Fact,
            };

            GivenCreateFactFactory()
            .When("Derive fact.", factFactory =>
                  factFactory.DeriveFact <Input6Fact>(container))
            .ThenAreEqual(input6Fact)
            .Run();
        }
Beispiel #6
0
        public void DeriveFactTestCase()
        {
            const int expectedValue = 10;
            var       container     = new Container
            {
                new Input10Fact(expectedValue),
            };

            GivenCreateFactFactory()
            .When("Run DeriveFact.", factFactory =>
                  factFactory.DeriveFact <Input10Fact>(container))
            .ThenFactValueEquals(expectedValue)
            .Run();
        }
Beispiel #7
0
        public void ContainerContainRuntimeConditionFactTestCase()
        {
            const string expectedReason = "Container contains IRuntimeConditionFact facts.";
            Container    container      = new Container
            {
                new RCanDerived <DefaultFact>()
            };

            GivenCreateFacade()
            .When("Run method ValidateAndGetRules.", facade =>
                  ExpectedDeriveException(() => facade.ValidateContainer(container)))
            .ThenAssertErrorDetail(ErrorCode.InvalidData, expectedReason)
            .Run();
        }
Beispiel #8
0
        //[Timeout(Timeouts.Millisecond.FiveHundred)]
        public void ChoosingShortestWayTestCase()
        {
            const int expectedValue = 5;
            var       container     = new Container
            {
                new Input16Fact(0),
            };

            GivenCreateFactFactory()
            .AndRulesNotNul()
            .AndAddRules(new Collection
            {
                // main rule.
                (Input2Fact f) => new Input1Fact(f + 1),
            })
            .AndAddRules(new Collection
            {
                // 1 way.
                (Input3Fact f) => new Input2Fact(f + 1),
                (Input4Fact f) => new Input3Fact(f + 1),
                (Input5Fact f) => new Input4Fact(f + 1),
                (Input6Fact f) => new Input5Fact(f + 1),
                (Input7Fact f) => new Input6Fact(f + 1),
                (Input16Fact f) => new Input7Fact(f + 1),
            })
            .AndAddRules(new Collection
            {
                // 2 way.
                (Input8Fact f) => new Input2Fact(f + 1),
                (Input9Fact f) => new Input8Fact(f + 1),
                (Input10Fact f) => new Input9Fact(f + 1),
                (Input16Fact f) => new Input10Fact(f + 1),
            })
            .AndAddRules(new Collection
            {
                // 3 way.
                (Input11Fact f) => new Input2Fact(f + 1),
                (Input12Fact f) => new Input11Fact(f + 1),
                (Input13Fact f) => new Input12Fact(f + 1),
                (Input14Fact f) => new Input13Fact(f + 1),
                (Input16Fact f) => new Input14Fact(f + 1),
            })
            .When("Derive facts.", factFactory =>
                  factFactory.DeriveFact <Input1Fact>(container))
            .ThenFactValueEquals(expectedValue)
            .Run();
        }
Beispiel #9
0
        public void CreateResultFactIfInput1FactContainedTestCase()
        {
            const int expectedValue = 1;
            var       container     = new Container
            {
                new Input1Fact(expectedValue),
            };

            GivenCreateFactFactory()
            .AndAddRules(new Collection
            {
                (BuildContained <Input1Fact> _, Input1Fact fact) => new ResultFact(fact.Value),
                (BuildNotContained <Input1Fact> _) => new ResultFact(-1),
            })
            .When("Derive.", factFactory =>
                  factFactory.DeriveFact <ResultFact>(container))
            .ThenFactValueEquals(expectedValue)
            .Run();
        }
Beispiel #10
0
        public void UseHigherPriorityRightTestCase()
        {
            const long expectedValue = 2;
            var        container     = new Container
            {
                new Fact1(1),
            };

            GivenCreateFactFactory()
            .AndAddRules(new Collection
            {
                (Priority2 p, Fact1 f) => new FactResult(f),
                (Priority1 p, Fact1 f) => new FactResult(f + p),
            })
            .When("Derive fact.", factory =>
                  factory.DeriveFact <FactResult>(container))
            .ThenIsNotNull()
            .AndAreEqual(fact => fact.Value, expectedValue)
            .Run();
        }
Beispiel #11
0
        public void DeriveWithBuildCannotDerivedTestCase()
        {
            const int value         = 14;
            const int expectedValue = 37;
            var       container     = new Container
            {
                new Input14Fact(value),
            };

            GivenCreateFactFactory()
            .AndRulesNotNul()
            .AndAddRules(new Collection
            {
                (Input12Fact fact) => new Input11Fact(fact.Value + 11),
                (Input14Fact fact, BuildCannotDerived <Input9Fact> no) => new Input12Fact(fact.Value + 12),
                (Input8Fact fact) => new Input9Fact(fact.Value + 12)
            })
            .When("Derive.", factory =>
                  factory.DeriveFact <Input11Fact>(container))
            .ThenFactValueEquals(expectedValue)
            .Run();
        }
Beispiel #12
0
        public void DeriveFactsAfterRunDeriveFactTestCase()
        {
            Input6Fact  fact6  = null;
            Input16Fact fact16 = null;
            Input7Fact  fact7  = null;

            GetcuReone.FactFactory.FactFactory factory = null;
            var container = new Container();

            GivenCreateFactFactory()
            .AndAddRules(new Collection
            {
                () => new Input6Fact(6),
                () => new Input16Fact(16),
                () => new Input7Fact(7),
            })
            .And("Want facts.", factFactory =>
            {
                factFactory.WantFacts((Input6Fact fact) => fact6   = fact, container);
                factFactory.WantFacts((Input16Fact fact) => fact16 = fact, container);
                factFactory.WantFacts((Input7Fact fact) => fact7   = fact, container);
                factory = factFactory;
            })
            .And("Derive fact.", factFactory =>
                 factFactory.DeriveFact <Input7Fact>(container))
            .When("Derive facts", fact =>
            {
                factory.Derive();
            })
            .Then("Check Input7Fact.", fact => Assert.AreEqual(fact, fact7))
            .And("Check result.", _ =>
            {
                Assert.IsNotNull(fact7, "fact7 must derived");
                Assert.IsNotNull(fact16, "fact16 must derived");
                Assert.IsNotNull(fact6, "fact6 must derived");
            })
            .Run();
        }
Beispiel #13
0
        public async Task RunningAsynchronousRulesInParallelWithFactConditionsTestCase()
        {
            const int expectedValue = 16;
            var       container     = new Container
            {
                new Input1Fact(1),
            };

            await GivenCreateFactFactory()
            .AndAddRules(new Collection
            {
                {
                    async(Input1Fact fact, BuildContained <Input1Fact> _) =>
                    {
                        return(await Task.Run(() => new Input6Fact(fact * 6)));
                    },
                    FactWorkOption.CanExecuteAsync | FactWorkOption.CanExcecuteParallel
                },
                {
                    async(Input1Fact fact, BuildContained <Input1Fact> _) =>
                    {
                        return(await Task.Run(() => new Input10Fact(fact * 10)));
                    },
                    FactWorkOption.CanExecuteAsync | FactWorkOption.CanExcecuteParallel
                },
                {
                    async(Input6Fact fact6, Input10Fact fact10) =>
                    {
                        return(await Task.Run(() => new Input16Fact(fact6 + fact10)));
                    },
                    FactWorkOption.CanExecuteAsync | FactWorkOption.CanExcecuteParallel
                }
            })
            .WhenAsync("Derive.", factory => factory.DeriveFactAsync <Input16Fact>(container))
            .ThenFactValueEquals(expectedValue)
            .RunAsync();
        }
Beispiel #14
0
 public void Initialize()
 {
     Container  = new Container();
     WantAction = GetWantAction((ResultFact _) => { });
 }
 public virtual void Initialize()
 {
     Container  = new Container(GetVersionFacts());
     WantAction = GetWantAction((FactResult f) => { });
 }
Beispiel #16
0
 public void Initialize()
 {
     Container = new Container
     {
         new Input1Fact(default),