/** * @param SituationSet $situationSet * * @return \Jungle\SLR\State */ public function addState(SituationSet $situationSet) { $key = $situationSet->getKey(); if (!isset($this->states[$key])) { $this->states[$key] = new State($situationSet); $this->stateQueue->enqueue($this->states[$key]); } return $this->states[$key]; }
public function testTransition() { $object = new SituationSet(); $situation = $this->getMockBuilder('Jungle\\SLR\\Situation')->setMethods(['next', 'getKey', 'step'])->disableOriginalConstructor()->getMock(); $situation->expects($this->once())->method('next')->will($this->returnValue('a')); $situation->expects($this->once())->method('step')->will($this->returnValue(new Situation(new Table(), new Rule()))); $situation->expects($this->once())->method('getKey')->will($this->returnValue('1.0')); $object->add($situation); $result = $object->transition('a'); $this->assertInstanceOf('Jungle\\SLR\\SituationSet', $result); $this->assertCount(1, $result); }
public function testAddState() { $object = new TransitionSet(new Table()); $stateA = new SituationSet(); $situationA = new Situation(new Table(), new Rule()); $stateA->add($situationA); $stateB = new SituationSet(); $situationB = new Situation(new Table(), new Rule()); $stateB->add($situationB); $this->assertCount(0, $object); $object->addState($stateA); $this->assertCount(1, $object); $object->addState($stateA); $this->assertCount(1, $object); $object->addState($stateB); $this->assertCount(2, $object); }
/** * @return SituationSet */ public function closure() { $state = new SituationSet(); $state->add($this); return $state->closure(); }
/** * @param string $token * * @return SituationSet */ public function transition($token) { $set = new SituationSet(); foreach ($this->situations as $situation) { if ($situation->next() == $token) { $next = $situation->step(); if ($next) { $set->add($next); } } } return $set->closure(); }