Esempio n. 1
0
        public void TimeStampConflictResolver()
        {
            CustomerFactory factory = new CustomerFactory(new ObjectContext(CreateDataStore()));
            Customer customer = factory.FindFirst("Name = {0}", "Joe Blow");
            Assert.IsNotNull(customer, "SHould have found customer.");
            Agenda agenda = new Agenda();
            agenda.ConflictResolutionStrategy = new TimeStampConflictResolver();
            agenda.LoadRulesFromAssemblies = false;
            agenda.AddObject(customer);

            Production WhatsMyName = new Production("Sets 'Default Text'.");
            WhatsMyName.Salience = 1;
            Variable customer_var = new Variable("$Customer");
            Variable customer_name = new Variable("$Customer.Name");
            WhatsMyName.AddConditionToLHS(new PositiveCondition(customer_var, "$Customer.Name", customer_name));
            WhatsMyName.AddConditionToLHS(new FunctionCondition("Joe Blow", new FuncTerm("funcEquals", new funcEquals()), customer_name));
            WhatsMyName.AddConditionToRHS(new InvokeCondition(customer_var, "Shout", customer_name));
            WhatsMyName.AddConditionToRHS(new SetCondition(customer_var, "Remarks", "Default Text."));
            agenda.AddProduction(WhatsMyName);

            Production WhatsMyName1 = new Production("Sets 'Squid Text'.");
            WhatsMyName1.Salience = 1;
            WhatsMyName1.AddConditionToLHS(new PositiveCondition(customer_var, "$Customer.Name", customer_name));
            WhatsMyName1.AddConditionToRHS(new InvokeCondition(customer_var, "Shout", "Squid"));
            WhatsMyName1.AddConditionToRHS(new SetCondition(customer_var, "Remarks", "Squid Text"));
            WhatsMyName1.AddConditionToRHS(new AssertCondition(customer_var, "Poop", "Deck"));
            agenda.AddProduction(WhatsMyName1);

            agenda.Run();

            Assert.IsTrue(agenda.TotalFacts == 11);
            Assert.IsTrue(agenda.InferredFacts.Count == 1);
            Assert.IsTrue(agenda.ActivatedRuleCount == 2);
            Assert.IsTrue(agenda.ActionsTaken.Count == 4);
            Assert.IsTrue(agenda.ActionsSkipped.Count == 0);
            Assert.IsTrue(customer.Remarks.Equals("Squid Text"), "Should be 'Default Text.'.");
        }
Esempio n. 2
0
        public void DigDeep()
        {
            CustomerFactory factory = new CustomerFactory(new ObjectContext(CreateDataStore()));
            Customer customer = factory.FindFirst("Name = {0}", "Joe Blow");

            Agenda agenda = new Agenda();
            agenda.ConflictResolutionStrategy = new TimeStampConflictResolver();
            agenda.LoadRulesFromAssemblies = false;
            agenda.AddObject(customer);

            Production WhatsMyName = new Production("WhatsMyName");
            WhatsMyName.Salience = 1;
            Variable customer_var = new Variable("Customer");
            Variable customer_name = new Variable("Customer.Name");
            Variable site_status = new Variable("Customer.Status");
            Variable site_status_name = new Variable("Customer.Status.Name");

            WhatsMyName.AddConditionToLHS(new PositiveCondition("C1", customer_var, "$Customer.Name", customer_name));
            WhatsMyName.AddConditionToLHS(new FunctionCondition("F1", customer_name, new FuncTerm("funcEquals", new funcEquals()), "Joe Blow"));
            WhatsMyName.AddConditionToLHS(new PositiveCondition("C2", customer_var, "$Customer.Status", site_status));
            WhatsMyName.AddConditionToLHS(new PositiveCondition("C3", site_status, "$Customer.Status.Name", site_status_name));
            WhatsMyName.AddConditionToLHS(new FunctionCondition("F2", site_status_name, new FuncTerm("funcEquals", new funcEquals()), "Active"));
            WhatsMyName.AddConditionToRHS(new SetCondition(customer_var, "Remarks", customer_name));
            agenda.AddProduction(WhatsMyName);

            agenda.Run();

            agenda.VisualizeNetworkToFile(@"C:\Temp\DigDeep.log", false);

            Assert.IsTrue(agenda.TotalFacts == 11);
            Assert.IsTrue(agenda.InferredFacts.Count == 0);
            Assert.IsTrue(agenda.ActivatedRuleCount == 1);
            Assert.IsTrue(agenda.ActionsTaken.Count == 1);
            Assert.IsTrue(agenda.ActionsSkipped.Count == 0);
            Assert.IsTrue(customer.Remarks.Equals("Joe Blow"), "Should be 'Default Text.'.");
        }
Esempio n. 3
0
        public void TestRuleLoader()
        {
            CustomerFactory factory = new CustomerFactory(new ObjectContext(CreateDataStore()));
            Customer customer = factory.FindFirst("Name = {0}", "Joe Blow");

            Agenda agenda = new Agenda();
            agenda.ConflictResolutionStrategy = new TimeStampConflictResolver();
            agenda.LoadRulesFromAssemblies = true;
            agenda.AddObject(customer);

            agenda.Run();

            agenda.VisualizeNetworkToFile(@"C:\Temp\TestRuleLoader.log", false);

            Assert.IsTrue(agenda.TotalFacts == 11);
            Assert.IsTrue(agenda.InferredFacts.Count == 0);
            Assert.IsTrue(agenda.ActivatedRuleCount == 1);
            Assert.IsTrue(agenda.ActionsTaken.Count == 1);
            Assert.IsTrue(agenda.ActionsSkipped.Count == 0);
            Assert.IsTrue(customer.Remarks.Equals("Joe Blow"), "Should be 'Default Text.'.");
        }