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))
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
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)
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)
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)
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)
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)
def testRecupere_Symbole_Lu(self): s: Symbole = Symbole('T') self.assertEqual(s,self.r1.recupere_symbole_lu())
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))