/** * @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 visitBinaryMultiplicationNode(BinaryMultiplicationNode $node) { if ($this->isZeroVisitor->visit($node)) { return new ConstantNode(0); } $a = $this->visit($node->getA()); $b = $this->visit($node->getB()); if ($this->isOneVisitor->visit($a)) { return $b; } if ($this->isOneVisitor->visit($b)) { return $a; } if ($this->isConstantVisitor->visit($a)) { if ($this->isConstantVisitor->visit($b)) { return new ConstantNode($this->evaluationVisitor->visit($a) * $this->evaluationVisitor->visit($b)); } } return new BinaryMultiplicationNode($a, $b); }