Tests
# Cas parfait
r = evaluate_retriever([0, 1, 2], [0, 1, 2])
assert r['precision'] == 1.0, f'Precision doit etre 1.0, got {r["precision"]}'
assert r['recall'] == 1.0
assert r['f1'] == 1.0
# Cas partiel
r2 = evaluate_retriever([0, 1, 2], [0, 2, 5])
assert r2['precision'] == 0.67, f'Precision doit etre 0.67, got {r2["precision"]}'
assert r2['recall'] == 0.67
# Aucun résultat pertinent
r3 = evaluate_retriever([0, 1], [5, 6])
assert r3['precision'] == 0.0
assert r3['recall'] == 0.0
assert r3['f1'] == 0.0
# Liste vide de retrieved
r4 = evaluate_retriever([], [0, 1])
assert r4['precision'] == 0.0
assert r4['recall'] == 0.0
# Haute precision, faible recall
r5 = evaluate_retriever([0], [0, 1, 2, 3])
assert r5['precision'] == 1.0
assert r5['recall'] == 0.25