/** * @param NodeInterface $node * @return bool */ public function _evalIsZero(NodeInterface $node) { try { return $this->evalVisitor->visit($node) == 0; } catch (\OutOfBoundsException $e) { return false; } }
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)); }
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)); }
/** * SimplifyVisitor constructor. */ private function __construct() { $this->isConstantVisitor = new TypeVisitor(ConstantNode::class); $this->evaluationVisitor = EvaluationVisitor::default(); $this->isZeroVisitor = IsZeroVisitor::init(); $this->isOneVisitor = IsOneVisitor::init(); }