Ejemplo n.º 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)
Ejemplo n.º 2
0
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"]
Ejemplo n.º 3
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
Ejemplo n.º 4
0
def test_supprimer_tete():
    l = Liste()
    l._inserer_apres(5)
    l._inserer_apres(2, l.queue)
    l._inserer_apres(3, l.tete)
    v = l.supprimer_tete()
    assert v == 5 and len(l) == 2 and l.tete.valeur == 3 and l.queue.valeur == 2
    assert str(l) == "3 → 2"
Ejemplo n.º 5
0
def test_crochet():
    l = Liste()
    l._inserer_apres(5)
    l._inserer_apres(2, l.queue)
    l._inserer_apres(3, l.tete)
    assert l[0] == 5 and l[1] == 3 and l[2] == 2
    with pytest.raises(IndexError):
        assert l[-1]
        assert l[20]
        assert l["truc"]
Ejemplo n.º 6
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
class Pile1:
    """ Pile implémentée sur la base d'une liste chainée simple"""

    def __init__(self):
        self.__liste = Liste()

    def __len__(self):
        return len(self.__liste)

    def empiler(self, valeur):
        """ à faire """
        self.__liste._inserer_apres(valeur)

    def depiler(self):
        """ à faire """
        if len(self.__liste) == 0:
            raise IndexError("Pile vide!")
        return self.__liste._supprimer_apres()

    def __str__(self):
        return str(self.__liste)
Ejemplo n.º 9
0
def test_inserer_apres():
    l = Liste()
    l._inserer_apres(5)
    assert len(l) == 1
    assert l.tete.valeur == 5 and l.queue.valeur == 5
    assert str(l) == "5"
    l._inserer_apres(2, l.queue)
    assert l.tete.valeur == 5 and l.queue.valeur == 2
    assert len(l) == 2
    assert str(l) == "5 → 2"
    l._inserer_apres(3, l.tete)
    assert len(l) == 3
    assert l.tete.valeur == 5 and l.queue.valeur == 2
    assert str(l) == "5 → 3 → 2"
Ejemplo n.º 10
0
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"
Ejemplo n.º 11
0
def test_in():
    l = Liste()
    l._inserer_apres(5)
    l._inserer_apres(2, l.queue)
    l._inserer_apres(3, l.tete)
    assert 2 in l and 5 in l and 3 in l and 10 not in l
Ejemplo n.º 12
0
def test_supprimer_apres():
    l = Liste()
    l._inserer_apres(5)
    l._inserer_apres(2, l.queue)
    l._inserer_apres(3, l.tete)
    v = l._supprimer_apres()
    assert v == 5 and l.tete.valeur == 3 and l.queue.valeur == 2
    assert len(l) == 2 and str(l) == "3 → 2"
    v = l._supprimer_apres(l.tete)
    assert v == 2 and l.tete is l.queue and l.tete.valeur == 3
    assert len(l) == 1 and str(l) == "3"
    v = l._supprimer_apres()
    assert v == 3 and l.tete is None and l.queue is None
    assert len(l) == 0 and str(l) == "None"
Ejemplo n.º 13
0
def test_liste_str():
    assert str(Liste()) == "None"
Ejemplo n.º 14
0
 def __init__(self):
     """Création d'une file vide."""
     self.__liste = Liste()
Ejemplo n.º 15
0
 def __init__(self):
     self.__liste = Liste()