-
Notifications
You must be signed in to change notification settings - Fork 0
Demos 2018 W28
Erik Martin-Dorel edited this page Jul 13, 2018
·
4 revisions
Link to this page: https://git.io/fNtKZ
- Se connecter à l'URL https://pfitaxel.github.io/pfitaxel-demo/
- Cliquer sur Éditeur
- Créer un nouvel exercice
- Choisir les méta-données ("demo_tp", "Démo TP", "Démonstration...") et Valider le formulaire
- Remplir l'onglet Question (à droite) avec le texte de l'exercice de TP (en Markdown)
- Vous pouvez copier-coller l'exemple de l'Annexe 1
- Remplir l'onglet Solution (à gauche) avec une correction complète (et correcte)
- Aller sur l'onglet Toplevel (à droite), cliquer sur Évaluer le code (en bas) et faire quelques tests
- Aller sur l'onglet Test (à droite) et cliquer sur Générer (en bas) pour générer 1 test par question (ou 2 tests en cas de fonction polymorphe) avec 10 cas de tests aléatoires par défaut
- Cliquer sur le bouton Noter! (en haut) (puis cliquer si besoin sur Compile pour valider)
- Le résultat de la correction-test devrait s'afficher dans l'onglet Rapport. (Vous venez de tester l'évaluation automatique de votre solution avec les tests compilés automatiquement !)
- Cliquer sur Test.ml
- Vous voyez alors le code OCaml généré à partir de votre spécification de tests de haut niveau.
- Revenir sur l'onglet Test et cliquer sur un des bandeaux de test déjà générés, puis (en laissant sélectionné le bouton radio Solution) ajoutez un ou deux cas de test "manuel" en respectant la syntaxe de l'Annexe 2
- Cliquer sur Sauvegarder (en haut)
- Cliquer sur Compiler (en bas)
- Cliquer à nouveau sur le bouton Noter!
- Cliquer sur l'onglet Patron (ou Template en anglais) puis sur le bouton Créer le patron (en bas) pour générer un squelette de code
- Un squelette de code avec des TODO est alors généré
- Vous pouvez le modifier et vérifier qu'il "type-check" en cliquant sur Valider
- Remplir légèrement l'onglet Prélude (à droite) avec une définition globale de variable (montrée à l'étudiant)
- Cliquer sur le bouton Tester situé en haut
- On voit alors l'énoncé de l'exercice avec une mise en forme riche
- La réponse de l'étudiant doit être faite à gauche
- Un buffer Toplevel est disponible pour faire des tests, regarder le type de fonctions, etc.
- Cliquer sur Valider (vérification de syntaxe et de typage)
- Cliquer sur Noter!
- Le résultat de la correction devrait s'afficher dans l'onglet Rapport
- Revenir à la vue enseignant en cliquant sur Éditer (en haut)
- Choisir des fonctions sur les listes (par exemple plusieurs fonctions de la première page de la feuille de TD Listes
- Compléter les 3 fichiers nécessaires (Question, Solution et Test (ou Test.ml))
- Tester le sujet
- Sauvegardez/téléchargez votre exercice au format .json et envoyez-le par e-mail à @erikmd
# Démo TP
## Question 1.
Écrivez la fonction suivante :
xor : bool -> bool -> bool
correspondant au **OU EXCLUSIF**.
*Remarque :* Vous pouvez fournir une fonction ayant un profil plus général.
## Question 2.
Écrivez la fonction suivante :
power : int -> int -> int
correspondant à l'exponentiation.
*Remarque :* `power m n` lèvera une exception (`failwith`) si `n < 0`.
Exemple de la syntaxe à utiliser pour spécifier les cas de tests dans l'onglet Test.
Liste de listes hétérogènes :
[false @:!! false;
false @:!! true;
true @:!! false;
true @:!! true]
Autre exemple :
[3 @: true @:!! "Aa";
1 @: false @:!! "B"]
Liste de couples (liste hétérogène, résultat)
:
[false @:!! false ==> false;
false @:!! true ==> true;
true @:!! false ==> true;
true @:!! true ==> false]
Les cas de tests des 3 types de questions utilisent ainsi des listes hétérogènes grâce aux notations suivantes (il y aura plus tard un commentaire dans l'interface Web donnant un exemple de la syntaxe) :
let (@:) a l = arg a @@ l
let (!!) b = last b
let (@:!!) a b = a @: !! b
let (==>) a b = (a, fun () -> b)
let (~~) b = if b then Correct None else Wrong None
Des listes hétérogènes de taille 1, 2, 3 peuvent donc être écrites comme suit :
!! 1
1 @:!! 2
1 @: 2 @:!! 3
Les 3 types de "tests fonctionnels de haut niveau" sont stockés (avant sérialisation dans le LocalStorage) sous la forme de termes du type suivant :
type test_qst_untyped =
| TestAgainstSol of
{ name: string
; ty: string
; gen: int
; suite: string
; tester: string
; sampler : string}
| TestAgainstSpec of
{ name: string
; ty: string
; gen: int
; suite: string
; spec : string
; tester: string
; sampler: string}
| TestSuite of
{ name: string;
ty: string;
suite: string;
tester :string}