public void LightLampTest() { var domain = new Domain(); var tom = new Actor("Tom"); var lighted = new Fluent("lighted"); var broken = new Fluent("broken"); var turnOn = new Action("TurnOn"); var turnOff = new Action("TurnOff"); var throwDown = new Action("ThrowDown"); var world = World.Instance; world.SetActions(new List <Action> { turnOn, turnOff, throwDown }); world.SetFluents(new List <Fluent> { lighted, broken }); world.SetActors(new List <Actor> { tom }); domain.AddInitiallyClause(new Initially(new Conjunction(new Negation(broken), lighted))); domain.AddTypicallyCausesClause(new TypicallyCauses(throwDown, false, new List <Actor> { tom }, broken)); domain.AddCausesClause(new Causes(turnOn, false, new List <Actor> { tom }, lighted)); domain.AddCausesClause(new Causes(turnOff, false, new List <Actor> { tom }, new Negation(lighted))); domain.AddAlwaysClause(new Always(new Implication(lighted, new Negation(broken)))); domain.AddPreservesClause(new Preserves(turnOn, false, new List <Actor> { tom }, broken, null)); world.SetDomain(domain); world.Build(); var scenario = new Scenario(); scenario.AddScenarioStep(new ScenarioStep(throwDown, tom)); scenario.AddScenarioStep(new ScenarioStep(turnOn, tom)); var ever = new AccessibleEverScenarioQuery(new Conjunction(new Negation(broken), lighted), lighted, scenario); var resultEver = ever.Evaluate(world); var typically = new AccessibleTypicallyScenarioQuery(new Conjunction(new Negation(broken), lighted), lighted, scenario); var resultTypically = typically.Evaluate(world); var always = new AccessibleAlwaysScenarioQuery(new Conjunction(new Negation(broken), lighted), lighted, scenario); var resultAlways = always.Evaluate(world); Assert.AreEqual(resultEver, true); Assert.AreEqual(resultTypically, false); Assert.AreEqual(resultAlways, true); }
public void ShootingTurkeyAccessibleAfterScenarioQueries1() { var world = CreateITWorld(); var scenario = new Scenario(); scenario.AddScenarioStep(new ScenarioStep(load, Bill)); var q1 = new AccessibleTypicallyScenarioQuery(new True(), new Negation(alive), scenario); var q2 = new AccessibleEverScenarioQuery(new True(), new Negation(alive), scenario); var q3 = new AccessibleAlwaysScenarioQuery(new True(), new Negation(alive), scenario); Assert.AreEqual(true, q1.Evaluate(world)); // there's possibility to kill turkey or start in state when it's not walking Assert.AreEqual(true, q2.Evaluate(world)); // killing turkey is typicall scenario Assert.AreEqual(false, q3.Evaluate(world)); // not always shooting will kill turkey }
public void ShootingTurkeyAccessibleAfterScenarioQueries2() { var world = CreateITWorld(); var scenario = new Scenario(); scenario.AddScenarioStep(new ScenarioStep(load, Bill)); scenario.AddScenarioStep(new ScenarioStep(shoot, Bill)); scenario.AddScenarioStep(new ScenarioStep(entice, Bill)); var q1 = new AccessibleTypicallyScenarioQuery(new True(), walking, scenario); var q2 = new AccessibleEverScenarioQuery(new True(), walking, scenario); var q3 = new AccessibleAlwaysScenarioQuery(new True(), walking, scenario); Assert.AreEqual(false, q1.Evaluate(world)); Assert.AreEqual(true, q2.Evaluate(world)); Assert.AreEqual(true, q3.Evaluate(world)); }
public void AlwaysAccessibleWhenQuery() { world = CreateITWorld(); var sc1 = new Scenario(); sc1.AddScenarioStep(new ScenarioStep(eat, alice)); var q1 = new AccessibleAlwaysScenarioQuery(new True(), cakeExists, sc1); var sc2 = new Scenario(); sc2.AddScenarioStep(new ScenarioStep(drink, alice)); var q2 = new AccessibleAlwaysScenarioQuery(new True(), new Negation(elixirExists), sc2); var r1 = q1.Evaluate(world); var r2 = q2.Evaluate(world); Assert.AreEqual(r1, true); Assert.AreEqual(r2, false); // po wykonaniu sc2 elixir moze istniec, i nie da sie zawsze zrobic zeby go nie bylo }
public void EverAccessibleWhenQuery() { world = CreateITWorld(); var sc1 = new Scenario(); sc1.AddScenarioStep(new ScenarioStep(eat, alice)); var q1 = new AccessibleAlwaysScenarioQuery(new True(), cakeExists, sc1); var sc3 = new Scenario(); sc3.AddScenarioStep(new ScenarioStep(eat, alice)); sc3.AddScenarioStep(new ScenarioStep(eat, alice)); var q3 = new AccessibleAlwaysScenarioQuery(new True(), new Negation(elixirExists), sc3); var r1 = q1.Evaluate(world); var r3 = q3.Evaluate(world); Assert.AreEqual(r1, true); Assert.AreEqual(r3, false); // sc3 jest niewykonalne }
public void NeroAlwaysAccessibleQuery() { var query = new AccessibleAlwaysScenarioQuery(_accessibleQueryPi, _accessibleQueryGamma, _drinkRestTorchScenario); Assert.IsFalse(query.Evaluate(_world)); }