74 lines
3.4 KiB
Bash
74 lines
3.4 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Test end-to-end de Qwen3 — tâches de difficulté croissante
|
||
|
|
set -uo pipefail
|
||
|
|
|
||
|
|
TESTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/test_qwen3_output"
|
||
|
|
mkdir -p "$TESTDIR"
|
||
|
|
pass=0
|
||
|
|
fail=0
|
||
|
|
|
||
|
|
check() {
|
||
|
|
local n="$1" desc="$2" cond="$3" reason="$4"
|
||
|
|
if eval "$cond" 2>/dev/null; then
|
||
|
|
echo " ✓ PASS"
|
||
|
|
pass=$((pass + 1))
|
||
|
|
else
|
||
|
|
echo " ✗ FAIL: $reason"
|
||
|
|
fail=$((fail + 1))
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
run() {
|
||
|
|
local n="$1" desc="$2" file="$3" prompt="$4"
|
||
|
|
echo "[TEST $n] $desc"
|
||
|
|
content="$(aichat --no-stream "$prompt" 2>/dev/null | sed 's/^```[a-z]*$//' | sed '/^```$/d')" || true
|
||
|
|
printf '%s\n' "$content" > "$file"
|
||
|
|
}
|
||
|
|
|
||
|
|
# --- Programmation ---
|
||
|
|
|
||
|
|
run 1 "hello.py — Python basique" "$TESTDIR/hello.py" \
|
||
|
|
"Génère uniquement le contenu d'un fichier Python qui affiche 'Hello, World!' avec print. Sans balises markdown, sans explication."
|
||
|
|
check 1 "hello.py" \
|
||
|
|
"[[ -f '$TESTDIR/hello.py' ]] && grep -q 'print' '$TESTDIR/hello.py'" \
|
||
|
|
"fichier absent ou pas de print"
|
||
|
|
|
||
|
|
run 2 "count.sh — boucle bash 1 à 5" "$TESTDIR/count.sh" \
|
||
|
|
"Génère uniquement le contenu d'un script bash qui affiche les nombres de 1 à 5 un par ligne avec une boucle for. Sans balises markdown, sans explication."
|
||
|
|
chmod +x "$TESTDIR/count.sh" 2>/dev/null || true
|
||
|
|
check 2 "count.sh" \
|
||
|
|
"[[ -f '$TESTDIR/count.sh' ]] && bash '$TESTDIR/count.sh' | grep -q '5'" \
|
||
|
|
"fichier absent ou ne produit pas '5'"
|
||
|
|
|
||
|
|
run 3 "fibonacci.py — récursion" "$TESTDIR/fibonacci.py" \
|
||
|
|
"Génère uniquement le contenu d'un fichier Python avec une fonction fib(n) (fib(1)=1, fib(2)=1) et à la fin print(fib(10)). Sans balises markdown, sans explication."
|
||
|
|
check 3 "fibonacci.py" \
|
||
|
|
"[[ -f '$TESTDIR/fibonacci.py' ]] && [[ \"\$(python3 '$TESTDIR/fibonacci.py' 2>/dev/null)\" == '55' ]]" \
|
||
|
|
"fichier absent ou fib(10) != 55"
|
||
|
|
|
||
|
|
# --- Markdown ---
|
||
|
|
|
||
|
|
run 4 "intro.md — titre + paragraphe" "$TESTDIR/intro.md" \
|
||
|
|
"Génère uniquement le contenu markdown d'un fichier avec un titre H1 'CrazyClaude' et un paragraphe de présentation d'au moins 50 caractères. Sans balises de code."
|
||
|
|
check 4 "intro.md" \
|
||
|
|
"[[ -f '$TESTDIR/intro.md' ]] && head -1 '$TESTDIR/intro.md' | grep -q '^#' && [[ \$(wc -c < '$TESTDIR/intro.md') -gt 50 ]]" \
|
||
|
|
"fichier absent, pas de H1 ou trop court"
|
||
|
|
|
||
|
|
run 5 "api.md — documentation de fonction" "$TESTDIR/api.md" \
|
||
|
|
"Génère uniquement le contenu markdown documentant la fonction process(data, options) avec ces 4 sections : Description, Paramètres, Retour, Exemple. Sans balises de code."
|
||
|
|
check 5 "api.md" \
|
||
|
|
"[[ -f '$TESTDIR/api.md' ]] && grep -qi 'description' '$TESTDIR/api.md' && grep -qi 'param' '$TESTDIR/api.md' && grep -qi 'retour\|return' '$TESTDIR/api.md' && grep -qi 'exemple\|example' '$TESTDIR/api.md'" \
|
||
|
|
"fichier absent ou sections manquantes"
|
||
|
|
|
||
|
|
run 6 "changelog.md — format semver avec 3 entrées" "$TESTDIR/changelog.md" \
|
||
|
|
"Génère uniquement le contenu markdown d'un changelog avec 3 entrées au format '## [1.x.0] - YYYY-MM-DD', chacune avec au moins une sous-section ### Added, ### Fixed ou ### Changed. Sans balises de code."
|
||
|
|
check 6 "changelog.md" \
|
||
|
|
"[[ -f '$TESTDIR/changelog.md' ]] && [[ \$(grep -c '## \[' '$TESTDIR/changelog.md') -ge 3 ]]" \
|
||
|
|
"fichier absent ou moins de 3 entrées versionnées"
|
||
|
|
|
||
|
|
# --- Résumé ---
|
||
|
|
echo ""
|
||
|
|
echo "Sorties conservées dans $TESTDIR"
|
||
|
|
echo "=== Résultats : $pass/6 tests passés ==="
|
||
|
|
[[ $fail -eq 0 ]]
|