public void BasicConnectivityTest() { CustomerFactory factory = new CustomerFactory(new ObjectContext(CreateDataStore())); Customer customer = factory.FindFirst("Status.Name = {0}", "Active"); Assert.IsNotNull(customer, "Should not be null."); }
public void CollectionTest() { CustomerFactory factory = new CustomerFactory(new ObjectContext(CreateDataStore())); Customer customer = factory.FindFirst("Name = {0}", "Joe Blow"); IList <WME> factlist = customer.GenerateFactsForRootObject(); Assert.IsTrue(factlist.Count == 11, "Wrong count."); Agenda agenda = new Agenda(); agenda.LoadRulesFromAssemblies = false; Variable customer_var = new Variable("Customer"); Variable orders = new Variable("Orders"); Variable order = new Variable("Order"); Variable orderItems = new Variable("OrderItems"); Variable orderItem = new Variable("OrderItem"); Variable product = new Variable("Product"); //Variable comment = new Variable("Comment"); Variable description = new Variable("Description"); Production mostSimple = new Production("CollectionTest"); mostSimple.AddConditionToLHS(new PositiveCondition(customer_var, "$Customer.Orders", orders)); mostSimple.AddConditionToLHS(new PositiveCondition(orders, "$Customer.Orders.Order", order)); mostSimple.AddConditionToLHS(new PositiveCondition(order, "$Customer.Orders.Order.OrderItems", orderItems)); mostSimple.AddConditionToLHS(new PositiveCondition(orderItems, "$Customer.Orders.Order.OrderItems.OrderItem", orderItem)); mostSimple.AddConditionToLHS(new PositiveCondition(orderItem, "$Customer.Orders.Order.OrderItems.OrderItem.Product", product)); mostSimple.AddConditionToLHS(new PositiveCondition(product, "$Customer.Orders.Order.OrderItems.OrderItem.Product.Description", description)); mostSimple.AddConditionToLHS(new FunctionCondition(description, new FuncTerm("funcEquals", new funcEquals()), "Troll Food")); mostSimple.AddConditionToRHS(new InvokeCondition("shout", customer_var, "Shout", "Yipee")); mostSimple.AddConditionToRHS(new AssertCondition("Wow", customer_var, "eats", description)); agenda.AddProduction(mostSimple); agenda.AddFacts(factlist); agenda.Run(); agenda.VisualizeNetworkToFile(@"C:\Temp\CollectionTest.log", false); Assert.IsTrue(agenda.TotalFacts == 11, "Bad"); Assert.IsTrue(agenda.ActionsTaken.Count == 1, "Bad"); Assert.IsTrue(agenda.ActionsSkipped.Count == 0, "Bad"); Assert.IsTrue(agenda.ActivatedRuleCount == 1, "Bad"); Assert.IsTrue(customer.Result != null && customer.Result.StartsWith("Shout"), "Did not invoke method."); }
public void FirstAggTest() { CustomerFactory factory = new CustomerFactory(new ObjectContext(CreateDataStore())); Customer customer = factory.FindFirst("Name = {0}", "Joe Blow"); IList <WME> factlist = customer.GenerateFactsForRootObject(); Assert.IsTrue(factlist.Count == 11, "Wrong count."); Agenda agenda = new Agenda(); agenda.LoadRulesFromAssemblies = false; Variable customer_var = new Variable("Customer"); Variable orders = new Variable("Orders"); Variable order = new Variable("Order"); Variable val = new Variable("?Value"); Aggregator ag = new Aggregator("Count of customer orders."); ag.GroupBy = customer_var; ag.AggregatorFunction = new Count("$Customer.Orders.Order", "$Customer.Orders.Count"); ag.AddConditionToLHS(new AND(customer_var, "$Customer.Orders", orders)); ag.AddConditionToLHS(new AND(orders, "$Customer.Orders.Order", order)); agenda.AddAggregator(ag); Production mostSimple = new Production("If Big Spender"); mostSimple.AddConditionToLHS(new AND(customer_var, "$Customer.Orders.Count", val)); mostSimple.AddConditionToRHS(new INVOKE("shout", customer_var, "Shout", val)); agenda.AddProduction(mostSimple); agenda.AddFacts(factlist); agenda.Run(); agenda.VisualizeNetworkToFile(@"C:\Temp\FirstAggTest.log", false); Assert.IsTrue(agenda.TotalFacts == 11, "Bad"); Assert.IsTrue(agenda.ActionsTaken.Count == 1, "Bad"); Assert.IsTrue(agenda.ActionsSkipped.Count == 0, "Bad"); Assert.IsTrue(agenda.ActivatedRuleCount == 1, "Bad"); Assert.IsTrue(customer.Result != null && customer.Result.StartsWith("Shout"), "Did not invoke method."); }
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.'."); }
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.'."); }
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.'."); }
public void FirstTest() { CustomerFactory factory = new CustomerFactory(new ObjectContext(CreateDataStore())); Customer customer = factory.FindFirst("Status.Name = {0}", "Active"); Assert.IsNotNull(customer, "Should not be null."); IList <WME> factlist = customer.GenerateFactsForRootObject(); Assert.IsTrue(factlist.Count == 11, "Wrong count."); Agenda agenda = new Agenda(); agenda.LoadRulesFromAssemblies = false; Variable customer_var = new Variable("Customer"); Variable customer_name = new Variable("Customer.Name"); Production mostSimple = new Production("Most Simple"); mostSimple.AddConditionToLHS(new PositiveCondition(customer_var, "$Customer.Name", customer_name)); mostSimple.AddConditionToRHS(new InvokeCondition("shout", customer_var, "Shout", customer_name)); agenda.AddProduction(mostSimple); agenda.AddFacts(factlist); agenda.Run(); agenda.VisualizeNetworkToFile(@"C:\Temp\NeoFirstTest.log", false); Assert.IsTrue(agenda.TotalFacts == 11, "Bad"); Assert.IsTrue(agenda.ActionsTaken.Count == 1, "Bad"); Assert.IsTrue(agenda.ActionsSkipped.Count == 0, "Bad"); Assert.IsTrue(agenda.ActivatedRuleCount == 1, "Bad"); Assert.IsTrue(customer.Result != null && customer.Result.StartsWith("Shout"), "Did not invoke method."); }