TP 6 - règle d'inférence

Programmation Avancée

Modérateur : douinj

charp_n1
Messages : 23
Inscription : 07 oct. 2020 17:35

TP 6 - règle d'inférence

Message par charp_n1 » 05 nov. 2020 0:48

Bonjour à tous,

J'ai un échec JNews à la question 3 du TP6 : le TantQue échoue, la faute au non respect de la "règle d'inférence".
Pourtant mes tests locaux passent.
M. Douin m'a demandé de poster cette question sur le forum, si quelqu'un a une idée je suis preneur.

douinj
Messages : 204
Inscription : 18 mars 2009 15:46

Re: TP 6 - règle d'inférence

Message par douinj » 05 nov. 2020 19:35

Bonjour, l'idée est de se servir des règles d'inférence pour les instructions notamment le TantQue

Que disent ces règles :
M comme mémoire de votre PC, l'instruction TantQue(Condition) faire Instruction finTantQue

Avec ces règles on définit l'effet des instructions sur une mémoire d'ordinateur, (une sémantique opérationnelle cf. Henessy)

[M] Condition est évaluée à faux
-------------------------------------------------------------------------
[M] TantQue(Condition) faire Instruction finTantQue[M]
en java cette règle nous dit que
x=0; // une mémoire ou x==0
while(x>10){x=x+1;}
// dans la mémoire x est toujours égal à 0
Si la Conditionest fausse l'instruction n' aucun effet sur la mémoire M


[M] Condition est évaluée à vraie
[M] Instruction ; TantQue(Condition) faire Instruction finTantQue [M1]
------------------------------------------------------------------------------
[M] TantQue(Condition) faire Instruction finTantQue[M1]

en java cette règle nous dit que
x=0; // une mémoire ou x==0
while(x<10){x=x+1;}
// pour obtenir la mémoire M1
revient à exécuter la séquence

x=x+1; // la mémoire M
while(x<10){x=x+1;}
// la mémoire M1

Si la Condition est vraie cela revient à exécuter le corps de la boucle suivi du TantQue

Nous prendrons le temps le soir du cours6 ou en ED pour vous parler des bienfaits des règles d'inférence ...

Bonne lecture

burgha_j
Messages : 7
Inscription : 05 oct. 2020 23:06

Re: TP 6 - règle d'inférence

Message par burgha_j » 11 nov. 2020 17:01

Bonjour,

Pour ma part, j'ai un problème pour les assertions.

J'utilise le test "testAssertionError" fournit (question 3) : J'ai un problème, c'est peut être une incompréhension de ma part. Pourtant mon cas d'évaluation "Egal" marche correctement.

si j'enlève le bloc "try/catch" dans testAssertionError :
  • Mon assertion lève bien une erreur de type AssertionError avec le message que je lui ai fournit quand la constante vaut 6
  • quand la constante vaut 5, le "fail" remonte son message
si je laisse le bloc "try/catch" dans testAssertionError:
  • Mon test testAssertionError est bon quand la constante vaut 6
  • Mon test testAssertionError est bon quand la constate vaut 5
Pourriez vous m'aider à comprendre cette sorcellerie ? :)

douinj
Messages : 204
Inscription : 18 mars 2009 15:46

Re: TP 6 - règle d'inférence

Message par douinj » 11 nov. 2020 19:02

Bonsoir,

C'est à vérifier, dites moi car je modifierai le test côté JNEWS en conséquence

Code : Tout sélectionner

si je laisse le bloc "try/catch" dans testAssertionError:

    Mon test testAssertionError est bon quand la constante vaut 6  
<-- le assert lève une exception qui est attrapée

Code : Tout sélectionner

Mon test testAssertionError est bon quand la constate vaut 5
<-- le fail lève une exception qui est attrapée

à suivre

burgha_j
Messages : 7
Inscription : 05 oct. 2020 23:06

Re: TP 6 - règle d'inférence

Message par burgha_j » 11 nov. 2020 22:49

charp_n1 a écrit :
05 nov. 2020 0:48
Bonjour à tous,

J'ai un échec JNews à la question 3 du TP6 : le TantQue échoue, la faute au non respect de la "règle d'inférence".
Pourtant mes tests locaux passent.
M. Douin m'a demandé de poster cette question sur le forum, si quelqu'un a une idée je suis preneur.
J'ai ouvert un topic ou je détail mon code : si tu as une idée aussi.

douinj
Messages : 204
Inscription : 18 mars 2009 15:46

Re: TP 6 - règle d'inférence

Message par douinj » 13 nov. 2020 13:50

Bonjour,

Il y a avait bien une erreur dans le test des assertions, sans incidence sur les tests JNEWS de votre TP6, une correction possible

Code : Tout sélectionner

 public void testAssertionError(){
        Contexte m = new Memoire();
        Variable x = new Variable(m,"x",5);
        VisiteurExpression ve = new VisiteurEvaluation(m);
        VisiteurExpressionBooleenne vb = new VisiteurBoolEvaluation(ve);
        VisiteurInstruction vi = new VisiteurInstEvaluation(ve,vb);

        VisiteurExpression ves = new VisiteurInfixe(m);
        VisiteurExpressionBooleenne vbs = new VisiteurBoolToString(ves);
        VisiteurInstruction vs = new VisiteurInstToString(ves,vbs);

        Instruction i = new Assertion(new Egal(x,new Constante(6)));
        try{
            i.accepter(vi);
            fail();
        }catch(junit.framework.AssertionFailedError e){
            fail("attention, " + i.accepter(vs) + " est-il sans effet ???");
        }catch(AssertionError e){
            
        }
            

    }     

Répondre