Example #1
0
        public void IsAcceptedString_Test()
        {
            //arrange
            LanguageCheckService languageCheckService = new LanguageCheckService();

            AutomatonModel automaton = new AutomatonModel()
            {
                IsDfaInFile = false
            };

            var stateZ = new StateModel()
            {
                IsFinal = false, IsInitial = true, Name = "z"
            };
            var stateA = new StateModel()
            {
                IsFinal = false, IsInitial = false, Name = "a"
            };
            var stateB = new StateModel()
            {
                IsFinal = true, IsInitial = false, Name = "b"
            };

            List <StateModel> states = new List <StateModel> {
                stateB, stateA, stateZ
            };
            List <TransitionModel> transitions = new List <TransitionModel>()
            {
                new TransitionModel()
                {
                    BeginState = stateZ, EndState = stateA, Value = "a"
                },
                new TransitionModel()
                {
                    BeginState = stateZ, EndState = stateZ, Value = "b"
                },

                new TransitionModel()
                {
                    BeginState = stateA, EndState = stateZ, Value = "b"
                },
                new TransitionModel()
                {
                    BeginState = stateA, EndState = stateB, Value = "a"
                },

                new TransitionModel()
                {
                    BeginState = stateB, EndState = stateB, Value = "b"
                },
                new TransitionModel()
                {
                    BeginState = stateB, EndState = stateZ, Value = "a"
                },
            };
            var alphabet = new List <char>()
            {
                'a', 'b'
            };

            automaton.States      = states;
            automaton.Transitions = transitions;
            automaton.Alphabet    = alphabet;

            //accepted
            var word1 = "aab";
            var word2 = "baab";
            var word3 = "abaa";
            var word4 = "abaab";

            //not accepted
            var word5 = "abb";
            var word6 = "ba";
            var word7 = "aaa";

            var expected_word1 = true;
            var expected_word2 = true;
            var expected_word3 = true;
            var expected_word4 = true;

            var expected_word5 = false;
            var expected_word6 = false;
            var expected_word7 = false;

            //act

            //accepted
            var actual_word1 = languageCheckService.IsAcceptedString(word1, automaton);
            var actual_word2 = languageCheckService.IsAcceptedString(word2, automaton);
            var actual_word3 = languageCheckService.IsAcceptedString(word3, automaton);
            var actual_word4 = languageCheckService.IsAcceptedString(word4, automaton);

            //not accepted
            var actual_word5 = languageCheckService.IsAcceptedString(word5, automaton);
            var actual_word6 = languageCheckService.IsAcceptedString(word6, automaton);
            var actual_word7 = languageCheckService.IsAcceptedString(word7, automaton);

            //assert
            Assert.AreEqual(expected_word1, actual_word1);
            Assert.AreEqual(expected_word2, actual_word2);
            Assert.AreEqual(expected_word3, actual_word3);
            Assert.AreEqual(expected_word4, actual_word4);

            Assert.AreEqual(expected_word5, actual_word5);
            Assert.AreEqual(expected_word6, actual_word6);
            Assert.AreEqual(expected_word7, actual_word7);
        }
Example #2
0
        public void IsAcceptedStringByPda_Test()
        {
            //arrange
            string empty = "ε";

            LanguageCheckService languageCheckService = new LanguageCheckService();

            AutomatonModel pda = new AutomatonModel();

            StateModel stateS = new StateModel()
            {
                IsFinal   = true,
                IsInitial = true,
                Name      = "S"
            };

            pda.States.Add(stateS);

            TransitionModel transition1 = new TransitionModel()
            {
                BeginState = stateS, EndState = stateS, Value = "a", PopStack = empty, PushStack = "x"
            };
            TransitionModel transition2 = new TransitionModel()
            {
                BeginState = stateS, EndState = stateS, Value = "b", PopStack = empty, PushStack = "y"
            };
            TransitionModel transition3 = new TransitionModel()
            {
                BeginState = stateS, EndState = stateS, Value = "c", PopStack = "x", PushStack = empty
            };
            TransitionModel transition4 = new TransitionModel()
            {
                BeginState = stateS, EndState = stateS, Value = "d", PopStack = "y", PushStack = empty
            };
            TransitionModel transition5 = new TransitionModel()
            {
                BeginState = stateS, EndState = stateS, Value = empty, PopStack = "x", PushStack = empty
            };
            TransitionModel transition6 = new TransitionModel()
            {
                BeginState = stateS, EndState = stateS, Value = empty, PopStack = "y", PushStack = empty
            };

            pda.Transitions.Add(transition1);
            pda.Transitions.Add(transition2);
            pda.Transitions.Add(transition3);
            pda.Transitions.Add(transition4);
            pda.Transitions.Add(transition5);
            pda.Transitions.Add(transition6);

            pda.AccecptedStack.Add("x");
            pda.AccecptedStack.Add("y");

            pda.Alphabet.Add('a');
            pda.Alphabet.Add('b');
            pda.Alphabet.Add('c');
            pda.Alphabet.Add('d');

            var word1  = "";
            var word2  = "a";
            var word3  = "ac";
            var word4  = "b";
            var word5  = "bd";
            var word6  = "aacc";
            var word7  = "bbdd";
            var word8  = "bc";
            var word9  = "c";
            var word10 = "d";

            var expectedWord1  = false;
            var expectedWord2  = true;
            var expectedWord3  = true;
            var expectedWord4  = true;
            var expectedWord5  = true;
            var expectedWord6  = true;
            var expectedWord7  = true;
            var expectedWord8  = false;
            var expectedWord9  = false;
            var expectedWord10 = false;

            //act
            var actualWord1  = languageCheckService.IsAcceptedStringByPda(word1, pda);
            var actualWord2  = languageCheckService.IsAcceptedStringByPda(word2, pda);
            var actualWord3  = languageCheckService.IsAcceptedStringByPda(word3, pda);
            var actualWord4  = languageCheckService.IsAcceptedStringByPda(word4, pda);
            var actualWord5  = languageCheckService.IsAcceptedStringByPda(word5, pda);
            var actualWord6  = languageCheckService.IsAcceptedStringByPda(word6, pda);
            var actualWord7  = languageCheckService.IsAcceptedStringByPda(word7, pda);
            var actualWord8  = languageCheckService.IsAcceptedStringByPda(word8, pda);
            var actualWord9  = languageCheckService.IsAcceptedStringByPda(word9, pda);
            var actualWord10 = languageCheckService.IsAcceptedStringByPda(word10, pda);

            //assert
            Assert.AreEqual(expectedWord1, actualWord1);
            Assert.AreEqual(expectedWord2, actualWord2);
            Assert.AreEqual(expectedWord3, actualWord3);
            Assert.AreEqual(expectedWord4, actualWord4);
            Assert.AreEqual(expectedWord5, actualWord5);
            Assert.AreEqual(expectedWord6, actualWord6);
            Assert.AreEqual(expectedWord7, actualWord7);
            Assert.AreEqual(expectedWord8, actualWord8);
            Assert.AreEqual(expectedWord9, actualWord9);
            Assert.AreEqual(expectedWord10, actualWord10);
        }