Adloun

Le test de propriété

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 1 — La discipline de programmation

Énoncé

Proposer une fonction de test de propriété verifie(t, r) validant que la liste r est une version triée acceptable de la liste t, puis écrire un protocole de test sur des listes aléatoires.

Corrigé

La postcondition d'une fonction de tri comporte deux clauses indépendantes : la liste finale doit être ordonnée, et elle doit contenir exactement les mêmes éléments que la liste de départ.

def verifie(t: list, r: list) -> bool:
    # 1. Vérification du caractère croissant
    croissante = all(r[i] <= r[i+1] for i in range(len(r) - 1))
    # 2. Vérification de la conservation des éléments (en utilisant les listes triées de référence)
    memes_elements = sorted(t) == sorted(r)
    return croissante and memes_elements

# Protocole de test de propriété aléatoire
import random
for essai in range(1000):
    # Génération d'une liste de taille et de valeurs aléatoires
    taille = random.randint(0, 30)
    t = [random.randint(-50, 50) for _ in range(taille)]
    # On suppose que 'tri' est la fonction à tester
    resultat = tri(t)
    assert verifie(t, resultat), f"Échec pour la liste d'entrée : {t}"

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.