Exemple #1
0
 public function testSolve()
 {
     $domain = new \Fieg\CSP\Domain(array(1, 2, 3, 4));
     $a = new \Fieg\CSP\Feature('A', $domain);
     $b = new \Fieg\CSP\Feature('B', $domain);
     $c = new \Fieg\CSP\Feature('C', $domain);
     $cb = new \Fieg\CSP\ConstraintBuilder();
     $constraint = $cb->lt($a, $b)->lt($b, $c)->getExpr();
     $a->setValue(1);
     $b->setValue(2);
     $c->setValue(3);
     $solver = new \Fieg\CSP\Solver();
     $solver->setConstraint($constraint);
     $solver->addFeature($a);
     $solver->addFeature($b);
     $solver->addFeature($c);
     $result = $solver->solve();
     $solutions = array();
     foreach ($result as $path) {
         array_shift($path);
         // remove the root
         $solutions[] = implode(', ', array_map('strval', $path));
     }
     $this->assertEquals(['A,2, B,3, C,4', 'A,1, B,3, C,4', 'A,1, B,2, C,4', 'A,1, B,2, C,3'], $solutions);
 }
Exemple #2
0
 public function evaluateProvider()
 {
     $cb = new \Fieg\CSP\ConstraintBuilder();
     $domain = new \Fieg\CSP\Domain(array(1, 2, 3, 4));
     $a = new \Fieg\CSP\Feature('A', $domain);
     $b = new \Fieg\CSP\Feature('B', $domain);
     $c = new \Fieg\CSP\Feature('C', $domain);
     return array(array($cb->lt($a, $b)->lt($b, $c)->getExpr(), array($a, $b, $c), array(1, 2, 3), true), array($cb->lt($a, $b)->lt($b, $c)->getExpr(), array($a, $b, $c), array(1, 1, 1), false));
 }
Exemple #3
0
 public function testConstructor()
 {
     $domain = new \Fieg\CSP\Domain(array(1, 2, 3, 4));
     $a = new \Fieg\CSP\Feature('A', $domain);
     $b = new \Fieg\CSP\Feature('B', $domain);
     $c = new \Fieg\CSP\Feature('C', $domain);
     $cb = new \Fieg\CSP\ConstraintBuilder();
     $expr = $cb->lte($a, $b)->lt($b, 3)->lt($b, $c)->notX($cb->orX($cb->eq($a, 2), $cb->eq($c, 3)))->getExpr();
     $this->assertEquals('(A <= B ^ B < 3 ^ B < C ^ ¬((A = 2 v C = 3)))', (string) $expr);
 }