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))); }
/** * @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 visitArrayMultiplicationNode(ArrayMultiplicationNode $node) { $nodes = []; foreach ($node->getChildren() as $key => $c) { $cpy = $this->copy($node->getChildren()); $cpy[$key] = $this->visit($c); $nodes[] = Tree::mult(...$cpy); } return Tree::add(...$nodes); }
public function testRender2() { $node = Tree::mult(Tree::add('x', 67), Tree::pow(Tree::mult('x', Tree::mult(4, 'x'), Tree::add(Tree::mult('x', 67), Tree::pow(Tree::mult('x', 24), 2))), 2)); $xml = XMLVisitor::init(); $str = $xml->visit($node); echo $str; $xml = new \DOMDocument(); $xml->loadXML($str); $this->assertTrue($xml->schemaValidate(__DIR__ . '/../../../resources/tree-schema.xsd')); }
public function testTreeRender2() { $deriver = new DerivationVisitor('x'); $simplfier = SimplifyVisitor::init(); $renderer = RenderStringVisitor::init(); $f = Tree::add(Tree::mult(3, 'x'), Tree::mult(2, 'x'), 3)->pow(2); $this->assertEquals("(3 * x + 2 * x + 3) ^ 2", $renderer->visit($f)); $this->assertEquals('10 * (3 * x + 2 * x + 3)', $renderer->visit($simplfier->visit($deriver->visit($f)))); $this->assertEquals(50, $renderer->visit($simplfier->visit($deriver->visit($deriver->visit($f))))); }
/** * @param $value * @return PowerNode */ public function pow($value) { return Tree::pow($this, $value); }
public function testGetVariables() { $f = Tree::add(Tree::mult(3, 'x'), Tree::mult(2, 'y'), Tree::mult(Tree::pow('z', 2), 'y'), 3); }
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); }