public function testTree4() { $deriver = new DerivationVisitor('x'); $eval = new EvaluationVisitor(['x' => 2]); Tree::init(3)->mult(Tree::init('x')->pow(2))->add(Tree::init(2)->mult('x')->add(3)); $f = Tree::mult(3, Tree::pow('x', 2))->add(Tree::mult(2, 'x'))->add(3); $this->assertEquals(19, $eval->visit($f)); $this->assertEquals(14, $eval->visit($deriver->visit($f))); }
/** * @return SimplifyVisitor */ public function testVisitor4() { $visitor = new TypeVisitor(VariableNode::class); $this->assertFalse($visitor->visit(Tree::add(2, 3))); $this->assertFalse($visitor->visit(Tree::pow(2, 3))); $this->assertFalse($visitor->visit(Tree::mult(2, 3))); $this->assertFalse($visitor->visit(Tree::init(3))); $this->assertTrue($visitor->visit(Tree::init('x'))); }
public function visitPowerNode(PowerNode $node) { $a = $this->visit($node->getBase()); $b = $this->visit($node->getExponent()); //TODO REMOVE if ($this->isZeroVisitor->visit($a)) { return Tree::init(0); } if ($this->isZeroVisitor->visit($b)) { return Tree::init(1); } if ($this->isOneVisitor->visit($b)) { return $a; } return new PowerNode($a, $b); }