public function testNext() { $rule = new Rule(); $object = new Situation(new Table(), $rule); $this->assertFalse($object->next()); $nextRule = new Rule(); $rule->setRight([$nextRule]); $this->assertSame($nextRule, $object->next()); }
/** * @param Situation $situation * * @return bool */ public function add(Situation $situation) { $key = $situation->getKey(); if (isset($this->situations[$key])) { return false; } $this->invalidateKey(); $this->situations[$key] = $situation; return true; }
/** * Process */ public function process() { $situation = new Situation($this->table, $this->table->getStartRule()); $this->addState($situation->closure()); while (!$this->stateQueue->isEmpty()) { /** @var State $state */ $state = $this->stateQueue->dequeue(); foreach ($state->getSituationSet()->getNextTokens() as $next) { $transition = $this->addState($state->getSituationSet()->transition($next)); $state->addTransition($next, $transition); } } }