Example #1
0
        private static IEnumerable <Runtime.ISolutionTreeNode> FindFarmerProblemSolutions()
        {
            Compiled.Program program = new Compiler().Compile("FarmerProblem.txt");

            var solutions = new Runtime.Engine().Run(program);

            return(solutions);
        }
Example #2
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
        [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());
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        private static IEnumerable <Runtime.ISolutionTreeNode> FindFarmerProblemSolutions ()
        {
            Compiled.Program program = new Compiler ().Compile ("FarmerProblem.txt");

            var solutions = new Runtime.Engine ().Run (program);

            return solutions;
        }
Example #8
0
        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);
        }
Example #9
0
        [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());
            }
        }
Example #10
0
        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);
        }