Ejemplo n.º 1
0
 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)));
 }
Ejemplo n.º 2
0
 /**
  * @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')));
 }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
 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'));
 }
Ejemplo n.º 5
0
 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)))));
 }
Ejemplo n.º 6
0
 /**
  * @param $value
  * @return PowerNode
  */
 public function pow($value)
 {
     return Tree::pow($this, $value);
 }
Ejemplo n.º 7
0
 public function testGetVariables()
 {
     $f = Tree::add(Tree::mult(3, 'x'), Tree::mult(2, 'y'), Tree::mult(Tree::pow('z', 2), 'y'), 3);
 }
Ejemplo n.º 8
0
 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);
 }