public void ShouldEnumerateTuples() { SituationDictionary <char> dictionary; IAutomatonTableTuple <char>[] result; Situation <char> a, b; SituationCollection <char> situations; a = new Situation <char>(new MockedRule(), new MockedPredicate(), new MockedReduceInput()); b = new Situation <char>(new MockedRule(), new MockedPredicate(), new MockedReduceInput()); dictionary = new SituationDictionary <char>(); situations = new SituationCollection <char>(); situations.Add(a); situations.Add(b); dictionary.CreateTuple(new State <char>(), situations); situations = new SituationCollection <char>(); situations.Add(a); dictionary.CreateTuple(new State <char>(), situations); situations = new SituationCollection <char>(); situations.Add(b); dictionary.CreateTuple(new State <char>(), situations); result = dictionary.ToArray(); Assert.AreEqual(3, result.Length); }
public IAutomatonTable <T> BuildAutomatonTable(ISituationCollectionFactory <T> SituationCollectionFactory, IDistinctInputFactory <T> DistinctInputFactory) { SituationDictionary <T> situationDictionary; IEnumerable <ISituation <T> > nextSituations; IAutomatonTable <T> automatonTable; IEnumerable <IActionInput <T> > nextInputs; IAutomatonTableTuple <T> currentTuple, nextTuple; Stack <IAutomatonTableTuple <T> > openList; Shift <T> action; if (SituationCollectionFactory == null) { throw new System.ArgumentNullException("SituationCollectionFactory"); } if (DistinctInputFactory == null) { throw new ArgumentNullException("DistinctInputFactory"); } automatonTable = new AutomatonTable <T>(); situationDictionary = new SituationDictionary <T>(); openList = new Stack <IAutomatonTableTuple <T> >(); nextSituations = SituationCollectionFactory.CreateAxiomSituations(); nextTuple = DevelopSituationsAndCreateTupleIfNotExists(automatonTable, SituationCollectionFactory, openList, situationDictionary, nextSituations); while (openList.Count > 0) { currentTuple = openList.Pop(); nextInputs = DistinctInputFactory.GetDistinctInputs(currentTuple.Situations.SelectMany(item => item.Predicate.GetInputs())); foreach (IActionInput <T> input in nextInputs) { nextSituations = SituationCollectionFactory.CreateNextSituations(currentTuple.Situations, input); nextTuple = DevelopSituationsAndCreateTupleIfNotExists(automatonTable, SituationCollectionFactory, openList, situationDictionary, nextSituations); action = new Shift <T>(input, automatonTable.IndexOf(nextTuple.State)); currentTuple.State.Add(action); } } return(automatonTable); }
public void ShouldNotGetTuple() { SituationDictionary <char> dictionary; IAutomatonTableTuple <char> result; Situation <char> a, b; SituationCollection <char> situations; a = new Situation <char>(new MockedRule(), new MockedPredicate(), new MockedReduceInput()); b = new Situation <char>(new MockedRule(), new MockedPredicate(), new MockedReduceInput()); situations = new SituationCollection <char>(); situations.Add(a); situations.Add(b); dictionary = new SituationDictionary <char>(); result = dictionary.GetTuple(situations); Assert.IsNull(result); }