Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }