Esempio n. 1
0
 /**
  * @param NodeInterface $node
  * @return bool
  */
 public function _evalIsZero(NodeInterface $node)
 {
     try {
         return $this->evalVisitor->visit($node) == 0;
     } catch (\OutOfBoundsException $e) {
         return false;
     }
 }
Esempio n. 2
0
 public function testTree3()
 {
     $deriver = new DerivationVisitor('x');
     $evaluator = new EvaluationVisitor(['x' => 2]);
     $f = Tree::mult(3, Tree::pow('x', 2))->add(Tree::mult(2, 'x'))->add(3);
     $this->assertEquals(19, $evaluator->visit($f));
     $this->assertEquals(14, $evaluator->visit($deriver->visit($f)));
 }
 public function testAddNodeWithVariable()
 {
     $deriver = new DerivationVisitor('x');
     $eval = new EvaluationVisitor(['x' => 3]);
     $node = new BinaryMultiplicationNode(new ConstantNode(2), new VariableNode('x'));
     $d = $deriver->visit($node);
     $dd = $deriver->visit($d);
     $this->assertEquals(6, $eval->visit($node));
     $this->assertEquals(2, $eval->visit($d));
     $this->assertEquals(0, $eval->visit($dd));
 }
Esempio n. 4
0
 public function testPowerNodeWithVar()
 {
     $deriver = new DerivationVisitor('x');
     $eval2 = new EvaluationVisitor(['x' => 2]);
     $eval3 = new EvaluationVisitor(['x' => 3]);
     $node = new PowerNode(new VariableNode('x'), new ConstantNode(3));
     $d = $deriver->visit($node);
     $this->assertEquals(12, $eval2->visit($d));
     $this->assertEquals(8, $eval2->visit($node));
     $this->assertEquals(27, $eval3->visit($d));
     $this->assertEquals(27, $eval3->visit($node));
 }
Esempio n. 5
0
 /**
  * SimplifyVisitor constructor.
  */
 private function __construct()
 {
     $this->isConstantVisitor = new TypeVisitor(ConstantNode::class);
     $this->evaluationVisitor = EvaluationVisitor::default();
     $this->isZeroVisitor = IsZeroVisitor::init();
     $this->isOneVisitor = IsOneVisitor::init();
 }