Example #1
0
 /**
  * @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];
 }
Example #2
0
 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);
 }
Example #3
0
 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);
 }
Example #4
0
 /**
  * @return SituationSet
  */
 public function closure()
 {
     $state = new SituationSet();
     $state->add($this);
     return $state->closure();
 }
Example #5
0
 /**
  * @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();
 }