private static IEnumerable <Runtime.ISolutionTreeNode> FindFarmerProblemSolutions() { Compiled.Program program = new Compiler().Compile("FarmerProblem.txt"); var solutions = new Runtime.Engine().Run(program); return(solutions); }
public static IEnumerable <Runtime.ISolutionTreeNode> Solve(Compiled.Program program, out Tracer tracer, params AST.Goal [] goals) { var engine = new Runtime.Engine(); tracer = new Tracer(); //engine.NewGoal += tracer.Engine_NewGoal; //engine.Unified += tracer.Engine_Unified; //engine.Failed += tracer.Engine_Failed; return(Compiler.Solve(engine, goals, program)); }
public static IEnumerable <Runtime.ISolutionTreeNode> Solve (Compiled.Program program, out Tracer tracer, params AST.Goal [] goals) { var engine = new Runtime.Engine (); tracer = new Tracer(); //engine.NewGoal += tracer.Engine_NewGoal; //engine.Unified += tracer.Engine_Unified; //engine.Failed += tracer.Engine_Failed; return Compiler.Solve (engine, goals, program); }
[Ignore] // Yields different results from run to run. public void EngineSolve_WhenIteratedOnce_DoesntLeak() { var database = MakeDogsDatabase(); // ?- dog (X). var goal = Helper.MakeGoal("dog", "X"); var engine = new Runtime.Engine(); using (new LeakDetector()) { var solutions = Compiler.Solve(engine, new [] { goal }, database); Assert.IsTrue(solutions.Any()); } }
public void Solutions_WhenIteratedTwice_ReturnsSameResults() { var database = MakeDogsDatabase(); // ?- dog (X). var goal = Helper.MakeGoal("dog", "X"); int timesStarted = 0; var engine = new Runtime.Engine(); engine.Start += delegate { ++timesStarted; }; var solutions = Compiler.Solve(engine, new [] { goal }, database); var variables = solutions.Select(s => s.Variables.ToDictionary(v => v.Key, v => v.Value)); AssertWhoIsADogResults(variables); AssertWhoIsADogResults(variables); Assert.AreEqual(2, timesStarted); }
public void TraceUnifiedTest() { var database = MakePathsDatabase(); // ?- path (moscow, vladivostok). var goal = Helper.MakeGoal("path", "moscow", "novosib"); var engine = new Runtime.Engine(); var tracer = new Tracer(); engine.Unified += tracer.Engine_Unified; Compiler.Solve(engine, new [] { goal }, database).Any(); Assert.AreEqual(@"Unified: path(moscow, novosib) Unified: path(moscow, novosib) Unified: road(X=moscow, Z=ekat) Unified: path(Z=ekat, Y=novosib) Unified: path(Z=ekat, Y=novosib) Unified: road(X=ekat, Z=vladivostok) Unified: path(Z=vladivostok, Y=novosib) Unified: path(Z=vladivostok, Y=novosib) ", tracer.Trace); }
private static IEnumerable <Runtime.ISolutionTreeNode> FindFarmerProblemSolutions () { Compiled.Program program = new Compiler ().Compile ("FarmerProblem.txt"); var solutions = new Runtime.Engine ().Run (program); return solutions; }
public void TraceUnifiedTest() { var database = MakePathsDatabase(); // ?- path (moscow, vladivostok). var goal = Helper.MakeGoal ("path", "moscow", "novosib"); var engine = new Runtime.Engine (); var tracer = new Tracer(); engine.Unified += tracer.Engine_Unified; Compiler.Solve (engine, new [] {goal}, database).Any(); Assert.AreEqual (@"Unified: path(moscow, novosib) Unified: path(moscow, novosib) Unified: road(X=moscow, Z=ekat) Unified: path(Z=ekat, Y=novosib) Unified: path(Z=ekat, Y=novosib) Unified: road(X=ekat, Z=vladivostok) Unified: path(Z=vladivostok, Y=novosib) Unified: path(Z=vladivostok, Y=novosib) ", tracer.Trace); }
[Ignore] // Yields different results from run to run. public void EngineSolve_WhenIteratedOnce_DoesntLeak() { var database = MakeDogsDatabase (); // ?- dog (X). var goal = Helper.MakeGoal ("dog", "X"); var engine = new Runtime.Engine (); using (new LeakDetector ()) { var solutions = Compiler.Solve (engine, new [] {goal}, database); Assert.IsTrue (solutions.Any()); } }
public void Solutions_WhenIteratedTwice_ReturnsSameResults() { var database = MakeDogsDatabase (); // ?- dog (X). var goal = Helper.MakeGoal ("dog", "X"); int timesStarted = 0; var engine = new Runtime.Engine (); engine.Start += delegate {++timesStarted;}; var solutions = Compiler.Solve (engine, new [] {goal}, database); var variables = solutions.Select(s => s.Variables.ToDictionary(v => v.Key, v => v.Value)); AssertWhoIsADogResults (variables); AssertWhoIsADogResults (variables); Assert.AreEqual (2, timesStarted); }