Example #1
0
class File1:
    """ File implémentée sur la base d'une liste chainée simple"""
    def __init__(self):
        """Création d'une file vide."""
        self.__liste = Liste()

    def __len__(self):
        """Renvoie la longueur de la file."""
        return len(self.__liste)

    def enfiler(self, valeur):
        """Enfile un objet au début de la file."""
        self.__liste.inserer_queue(valeur)

    def defiler(self):
        """Retire le premier objet de la file."""
        if len(self.__liste) == 0:
            raise IndexError("File vide !")
        else:
            self.__liste.supprimer_tete()

    def __str__(self):
        """Convertis la file en une chaîne de caractères."""
        chaine = ""
        longueur_file = len(self.__liste)
        for i in reversed(range(longueur_file)):
            if i == 0:
                chaine += f"{self.__liste[i]}"
            else:
                chaine += f"{self.__liste[i]} → "
        return chaine

    def __getitem__(self, index):
        """Renvoie l'objet demandé par rapport à son index."""
        return self.__liste.__getitem__(index)
def test_setitem():
    l = Liste()
    for _ in range(5):
        l.inserer_queue(0)
    l[2] = 10 
    assert l[2] == 10 and str(l) == "0 → 0 → 10 → 0 → 0"
    with pytest.raises(IndexError):
        assert l[-1]
        assert l[20]
        assert l["truc"]
Example #3
0
def test_eq():
    # test si l'opérateur == fonctionne correctement sur une liste chaînée simple
    l = Liste()
    l2 = Liste()
    for i in range(5):
        l.inserer_queue(i)
        l2.inserer_queue(i)
    assert l == l2
    l2[0] = 56
    assert l != l2
Example #4
0
def test_delitem():
    # test de l'opération «del l[i]» où l est une liste.
    l = Liste()
    for i in range(5):
        l.inserer_queue(i)
    del l[0]
    assert str(l) == "1 → 2 → 3 → 4" and l.tete.valeur == 1 and l.queue.valeur == 4
    del l[3]
    assert str(l) == "1 → 2 → 3" and l.tete.valeur == 1 and l.queue.valeur == 3
    for _ in range(3): del l[0]
    assert str(l) == "None" and l.tete is l.queue
def test_iteration_avec_for():
    l = Liste()
    for v in range(10):
        l.inserer_queue(v)
    i = 0
    for v in l:
        # fonctionne du fait de la définition de
        # __getitem__; pas efficace!!!!
        # semble traduit en
        # i = 0
        # while True:
        #   try:
        #     v = l[i] # est O(i) (la liste est reparcourue à chaque accès)
        #   except IndexError:
        #      break
        #   i += 1
        #   <corps de boucle>
        #
        assert v == i
        i += 1
def test_inserer_queue():
    l = Liste()
    for v in range(5):
        l.inserer_queue(v)
    assert len(l) == 5 and l.tete.valeur == 0 and l.queue.valeur == 4
    assert str(l) == "0 → 1 → 2 → 3 → 4"