Пример #1
0
    def test_inverser_regle(self):
        etat_init: Etat = Etat('qFin')
        etat_final: Etat = Etat('q0')
        symboles_lecture: Symboles = (Symbole('1'), Symbole('2'))
        symboles_ecriture: Symboles = (Symbole('A'), Symbole('B'))
        mouvements: Mouvements = (Mouvement.DROITE, Mouvement.GAUCHE)
        clef: Clef = (etat_init, symboles_lecture)
        valeur: Valeur = (etat_final, symboles_ecriture, mouvements)
        transitionInverse = (clef, valeur, False, False)

        self.assertEqual(transitionInverse,
                         self.machineTest.inverser_regle(self.transitionTest))
Пример #2
0
    def setUp(self):
        motInit1: List[Symbole] = [Symbole('T'), Symbole('E'), Symbole('S'), Symbole('T'),
                                  Symbole('W'), Symbole('O'), Symbole('R'), Symbole('D')]
        motInit2 = motInit1.copy()
        self.r1 = Ruban(motInit1, TypeRuban.INFINI)
        self.r1.position = 3

        self.r2 = Ruban(motInit2, TypeRuban.SEMIFINI)
        self.r2.position = 3
Пример #3
0
    def test_appliqer_regle_inverse(self):

        transitionInverse = self.machineTest.inverser_regle(
            self.transitionTest)
        self.derouleurTest.rubans[0].set_position(3)
        self.derouleurTest.etat_courant = self.machineTest.appliquer_regle_inverse(
            self.derouleurTest.rubans, transitionInverse)
        motTest: List[Symbole] = [
            Symbole('H'),
            Symbole('E'),
            Symbole('L'),
            Symbole('L'),
            Symbole('A')
        ]
        rubanTest = Ruban(motTest, TypeRuban.INFINI)

        # Test si le ruban a ete modifie correctement
        self.assertEqual(rubanTest.symboles,
                         self.derouleurTest.rubans[0].symboles)

        # Test si l'etat courant a ete modifie correctement
        self.assertEqual(Etat('q0'), self.derouleurTest.etat_courant)
Пример #4
0
    def test_etape_precedente(self):
        self.derouleurTest.pile_regles.append(self.transitionTest)

        self.derouleurTest.etape_precedente()

        motTest: List[Symbole] = [
            Symbole('A'),
            Symbole('L'),
            Symbole('L'),
            Symbole('O')
        ]
        rubanTest = Ruban(motTest, TypeRuban.INFINI)

        # Test si le ruban a ete modifie correctement
        # Le premier symbole du ruban doit etre supprimé
        # Et le deuxieme doit etre modifie a 'A'
        self.assertEqual(rubanTest.symboles,
                         self.derouleurTest.rubans[0].symboles)

        # Test si l'etat courant a ete modifie correctement
        self.assertEqual(Etat('q0'), self.derouleurTest.etat_courant)

        # Test si la derniere regle utilise a bien ete retiree de la pile
        self.assertEqual([], self.derouleurTest.pile_regles)
Пример #5
0
    def setUp(self):
        self.derouleurTest = Derouleur()
        Derouleur.etat_courant = Etat('qinit')
        # Initialisation de la liste de rubans
        mot_init1: List[Symbole] = [
            Symbole('H'),
            Symbole('E'),
            Symbole('L'),
            Symbole('L'),
            Symbole('O')
        ]
        r1: Ruban = Ruban(mot_init1, TypeRuban.INFINI)
        mot_init2: List[Symbole] = [
            Symbole('G'),
            Symbole('O'),
            Symbole('O'),
            Symbole('D')
        ]
        r2: Ruban = Ruban(mot_init2, TypeRuban.SEMIFINI)

        self.derouleurTest.rubans = [r1, r2]
        Derouleur.rubans = [r1, r2]

        self.machineTest = Machine()
        self.derouleurTest.machine_courante = self.machineTest
        Derouleur.machine_courante = self.machineTest

        # Creation d'une transition de test
        etat_init: Etat = Etat('q0')
        etat_final: Etat = Etat('qFin')
        symboles_lecture: Symboles = (Symbole('A'), Symbole('B'))
        symboles_ecriture: Symboles = (Symbole('1'), Symbole('2'))
        mouvements: Mouvements = (Mouvement.GAUCHE, Mouvement.DROITE)
        clef: Clef = (etat_init, symboles_lecture)
        valeur: Valeur = (etat_final, symboles_ecriture, mouvements)
        self.transitionTest = (clef, valeur, False, False)
Пример #6
0
    def testModfier_Position(self):

        self.r1.modifier_position(Mouvement.DROITE)
        self.assertEqual(4,self.r1.position)
        self.r1.modifier_position(Mouvement.GAUCHE)
        self.assertEqual(3, self.r1.position)

        mot1: List[Symbole] = [Symbole('T'), Symbole('E'), Symbole('S'), Symbole('T'),
                               Symbole('W'), Symbole('O'), Symbole('R'), Symbole('D'),
                               Symbole('_')]
        self.r1.set_position(7)
        self.r1.modifier_position(Mouvement.DROITE)
        self.assertEqual(8,self.r1.position)
        self.assertEqual(mot1,self.r1.symboles)

        mot2: List[Symbole] = [Symbole('_'),
                               Symbole('T'), Symbole('E'), Symbole('S'), Symbole('T'),
                               Symbole('W'), Symbole('O'), Symbole('R'), Symbole('D'),
                               Symbole('_')]
        self.r1.set_position(0)
        self.r1.modifier_position(Mouvement.GAUCHE)
        self.assertEqual(0,self.r1.position)
        self.assertEqual(mot2,self.r1.symboles)

        mot3: List[Symbole] = [Symbole('T'), Symbole('E'), Symbole('S'), Symbole('T'),
                               Symbole('W'), Symbole('O'), Symbole('R'), Symbole('D')]
        self.r2.set_position(0)

        with pytest.raises(Exception):
            assert self.r2.modifier_position(Mouvement.GAUCHE)
Пример #7
0
    def testEcriture_Symbole(self):
        # Le mot doit etre modifie
        s1: Symbole = Symbole('Z')
        mot1: List[Symbole] = [Symbole('T'), Symbole('E'), Symbole('S'), Symbole('Z'),
                                  Symbole('W'), Symbole('O'), Symbole('R'), Symbole('D')]
        self.r1.ecriture_symbole(s1)
        self.assertEqual(mot1,self.r1.symboles)

        # Le mot ne doit pas etre modifie
        s2: Symbole = Symbole('*')
        mot2: List[Symbole] = [Symbole('T'), Symbole('E'), Symbole('S'), Symbole('T'),
                               Symbole('W'), Symbole('O'), Symbole('R'), Symbole('D')]
        self.r2.ecriture_symbole(s2)
        self.assertEqual(mot2,self.r2.symboles)
Пример #8
0
 def testRecupere_Symbole_Lu(self):
     s: Symbole = Symbole('T')
     self.assertEqual(s,self.r1.recupere_symbole_lu())
Пример #9
0
    def testViewRubanSEMIFINI(self):
        #  Position de la tete:
        #  T  E  S  T  W  O  R  D
        #           ^

        # La methode doit generer une vue partielle du mot.
        expectedView1: List[Symbole] = [Symbole('S'), Symbole('T'), Symbole('W')]
        self.assertEqual(expectedView1, self.r2.view(1))

        expectedView2: List[Symbole] = [Symbole('T'), Symbole('E'), Symbole('S'),
                                        Symbole('T'),
                                        Symbole('W'), Symbole('O'), Symbole('R')]
        self.assertEqual(expectedView2, self.r2.view(3))

        # La methode doit generer une vue sans inserer de symboles '_' (Blanc) au debut car le ruban est fini a gauche
        expectedView3: List[Symbole] = [ Symbole('T'), Symbole('E'), Symbole('S'),
                                        Symbole('T'),
                                        Symbole('W'), Symbole('O'), Symbole('R'), Symbole('D')]
        self.assertEqual(expectedView3, self.r2.view(4))

        # La methode doit generer une vue en inserant des symboles '_' (Blanc) a la fin mais pas au debut
        expectedView4: List[Symbole] = [Symbole('T'), Symbole('E'), Symbole('S'),
                                        Symbole('T'),
                                        Symbole('W'), Symbole('O'), Symbole('R'),
                                        Symbole('D'), Symbole('_'), Symbole('_'), ]

        self.assertEqual(expectedView4, self.r2.view(6))