#!/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 ]]