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 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))))); }
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)); }