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 void ShouldGetReductionSituations() { Situation <char> a, b; SituationCollection <char> situations; ISituation <char>[] reductions; 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); reductions = situations.GetReductionSituations().ToArray(); Assert.AreEqual(1, reductions.Length); a = new Situation <char>(new MockedRule(), new MockedPredicate(), new MockedReduceInput()); b = new Situation <char>(new MockedRule2(), new MockedPredicate(), new MockedReduceInput()); situations = new SituationCollection <char>(); situations.Add(a); situations.Add(b); reductions = situations.GetReductionSituations().ToArray(); Assert.AreEqual(2, reductions.Length); }
public void ShouldAdd() { Situation <char> a, b; SituationCollection <char> situations; a = new Situation <char>(new MockedRule(), new MockedPredicate(), new MockedReduceInput()); b = new Situation <char>(new MockedRule2(), new MockedPredicate2(), new MockedReduceInput2()); situations = new SituationCollection <char>(); Assert.AreEqual(0, situations.Count); situations.Add(a); Assert.AreEqual(1, situations.Count); situations.Add(b); Assert.AreEqual(2, situations.Count); }
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); }
public void ShouldContains() { Situation <char> a, b, c; SituationCollection <char> situations; a = new Situation <char>(new MockedRule(), new MockedPredicate(), new MockedReduceInput()); b = new Situation <char>(new MockedRule2(), new MockedPredicate2(), new MockedReduceInput2()); c = new Situation <char>(new MockedRule2(), new MockedPredicate2(), new MockedReduceInput()); situations = new SituationCollection <char>(); situations.Add(a); situations.Add(b); Assert.IsTrue(situations.Contains(a)); Assert.IsTrue(situations.Contains(b)); Assert.IsFalse(situations.Contains(c)); }
public void ShouldNotEquals() { Situation <char> a, b, c; SituationCollection <char> situations1, situations2; a = new Situation <char>(new MockedRule(), new MockedPredicate(), new MockedReduceInput()); b = new Situation <char>(new MockedRule2(), new MockedPredicate2(), new MockedReduceInput2()); c = new Situation <char>(new MockedRule2(), new MockedPredicate2(), new MockedReduceInput()); situations1 = new SituationCollection <char>(); situations1.Add(a); situations1.Add(b); situations1.Add(c); situations2 = new SituationCollection <char>(); // different order situations2.Add(c); situations2.Add(b); Assert.IsFalse(situations1.Equals(situations2)); Assert.IsFalse(situations2.Equals(situations1)); }
public State[] BuildStates(ISituation RootSituation) { List <State> states; List <SituationCollection> situationCollections; List <SituationCollection> openList; List <ISituation> nextSituations; SituationCollection currentSituationCollection, existingSituationCollection; if (RootSituation == null) { throw new ArgumentNullException("RootSituation"); } states = new List <State>(); situationCollections = new List <SituationCollection>(); openList = new List <SituationCollection>(); currentSituationCollection = new SituationCollection(); currentSituationCollection.State = new State(); currentSituationCollection.Items.Add(RootSituation); situationCollections.Add(currentSituationCollection); states.Add(currentSituationCollection.State); openList.Add(currentSituationCollection); while (openList.Count > 0) { currentSituationCollection = openList[0]; openList.RemoveAt(0); for (char input = char.MinValue; input < char.MaxValue; input++) { nextSituations = new List <ISituation>(); foreach (ISituation situation in currentSituationCollection.Items) { foreach (ITransition transition in situation.Transitions) { if (transition is IReductionTransition reductionTransition) { currentSituationCollection.State.CreateReduction(reductionTransition.Rule); continue; } if (transition is IShiftTransition shiftTransition) { if (shiftTransition.Predicate.Accept(input)) { nextSituations.Add(shiftTransition.TargetSituation); } } } } if (nextSituations.Count == 0) { continue; } existingSituationCollection = situationCollections.FirstOrDefault(item => AreEquals(item.Items, nextSituations)); if (existingSituationCollection == null) { existingSituationCollection = new SituationCollection(); existingSituationCollection.Items = nextSituations; existingSituationCollection.State = new State(); situationCollections.Add(existingSituationCollection); states.Add(existingSituationCollection.State); openList.Add(existingSituationCollection); } currentSituationCollection.State.CreateShift(input, states.IndexOf(existingSituationCollection.State)); } } return(states.ToArray()); }