TP_commit question 2 tests en échec

Programmation Avancée

Modérateur : douinj

castr_ju
Messages : 11
Inscription : 10 oct. 2020 13:59

TP_commit question 2 tests en échec

Message par castr_ju » 26 nov. 2020 8:56

Bonjour,

Lors de ma première soumission à JNEWS de la question 2 du TP commit, j'ai eu le retour d'erreur suivant:

1) testQuatreContributeursQuatreGroupesBis(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!
2) testQuatreContributeursQuatreGroupes(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!
6) testCompositeValide_bis(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!
7) testSurUnGroupeDeGroupe(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!
8) testQuatreContributeurs_bis(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!
9) testQuatreContributeursDeuxGroupes(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!
10) testCompositeValide_ter(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!

11) test_SansDoublon_accepter_dans_visite_du_groupe(question2): accepter n''est pas appelée ? curieux...
12) test_CompositeValide_accepter_dans_visite_du_groupe(question2): accepter n''est pas appelée ? curieux...
13) test_DebitMaximal_accepter_dans_visite_du_groupe(question2): accepter n''est pas appelée ? curieux...

3) testDebitMaximalSurUnGroupeDeGroupes(question2): le débit maximal est-il erroné ???
4) testTroisContributeursUnGroupe(question2): Le nombre de cotisants est-il erroné ??? expected:<3> but was:<4>
5) testCinqContributeursQuatreGroupes(question2): Le nombre de cotisants est-il erroné ??? expected:<4> but was:<5>

J'ai modifié mon code de la classe SansDoublon() pour le visiteur de GroupeDeContributeur:

Version initiale:

Code : Tout sélectionner

    public Boolean visite(GroupeDeContributeurs g){
       boolean res = false;// a compléter
       // a compléter
       res = true;

       Set s = new TreeSet<String>();
       s.add(g.nom());
       for(Cotisant c : g) {
         if(c.nombreDeCotisants()==1){
         res = res && s.add(c.nom());
        } else {
         res = res && (c.nom()==g.nom());
         res = res && this.visite((GroupeDeContributeurs) c);
        }
        }

        return res ;
    }
Version après retour des erreurs JNEWS:

Code : Tout sélectionner

    public Boolean visite(GroupeDeContributeurs g){
       boolean res = false;// a compléter
       // a compléter
       res = true;

        Set s = new TreeSet<String>();
        s.add(g.nom());
        try{
            if( g.getParent().nom()!=null && !s.add(g.getParent().nom()) ) return false;
        }catch(NullPointerException e){}
        for(Cotisant c : g) {
            if(c.nombreDeCotisants()==1){
                res = res && s.add(c.nom());
            } else  {
                res = res && s.add(c.nom());
                res = res && this.visite((GroupeDeContributeurs) c);
            }

        }
       }

J'ai écris deux méthodes de tests selon les indices de JNEWS, mon code passe ces deux tests:

Code : Tout sélectionner

    //echec test: 
    //1) testQuatreContributeursQuatreGroupesBis(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!
    // 2) testQuatreContributeursQuatreGroupes(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!! 
    // 6) testCompositeValide_bis(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!! 
    //7) testSurUnGroupeDeGroupe(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!! 
    //8) testQuatreContributeurs_bis(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!! 
    // 9) testQuatreContributeursDeuxGroupes(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!
    //10) testCompositeValide_ter(question2): Ce composite n''a pas de doublon, revoyez SansDoublon !!!  
   /**
    * ted.
    */
    public void testEchecDoublon(){
        GroupeDeContributeurs g1 = new GroupeDeContributeurs("g1");
        g1.ajouter(new Contributeur("g_a",100));
        GroupeDeContributeurs g2 = new GroupeDeContributeurs("g2");
        g2.ajouter(new Contributeur("g_b",100));
        GroupeDeContributeurs g3 = new GroupeDeContributeurs("g3");
        g3.ajouter(new Contributeur("g_c",100));
        GroupeDeContributeurs g4 = new GroupeDeContributeurs("g4");
        g4.ajouter(new Contributeur("g_d",100));

        GroupeDeContributeurs gg1 = new GroupeDeContributeurs("gg1");
        gg1.ajouter(g1);
        gg1.ajouter(g2);
        gg1.ajouter(g3);
        gg1.ajouter(g4);
        assertTrue(gg1.accepter(new SansDoublon()));

        g4.ajouter(new Contributeur("g_a",100));
        assertFalse(gg1.accepter(new SansDoublon()));

        GroupeDeContributeurs gg2 = new GroupeDeContributeurs("gg2");
        gg2.ajouter(g1);
        gg2.ajouter(g2);
        gg2.ajouter(g3);
        assertTrue(gg2.accepter(new SansDoublon()));

        Contributeur g1Node= new Contributeur("g1",100);
        g1.ajouter(g1Node);
        assertFalse(g1.accepter(new SansDoublon()));
        assertFalse(g1Node.accepter(new SansDoublon()));

        GroupeDeContributeurs gg2Node = new GroupeDeContributeurs("gg2");
        gg2.ajouter(gg2Node);
        assertFalse(gg2Node.accepter(new SansDoublon()));
        assertFalse(gg2.accepter(new SansDoublon()));

        GroupeDeContributeurs gg3 = new GroupeDeContributeurs("gg3");
        gg3.ajouter(g2);
        gg3.ajouter(g3);
        g3.ajouter(g4);
        assertTrue(gg3.accepter(new SansDoublon()));
        g4.ajouter(new Contributeur("g_b",100)); 
        assertFalse(gg3.accepter(new SansDoublon()));

                
    }
    //echec test:
    // 3) testDebitMaximalSurUnGroupeDeGroupes(question2): le débit maximal est-il erroné ??? 
    // 4) testTroisContributeursUnGroupe(question2): Le nombre de cotisants est-il erroné ??? expected:<3> but was:<4> 
    // 5) testCinqContributeursQuatreGroupes(question2): Le nombre de cotisants est-il erroné ??? expected:<4> but was:<5> 
    /**
     * tenc.
     */
    public void testEchecNbrCotisant(){
        GroupeDeContributeurs g = new GroupeDeContributeurs("g");
        g.ajouter(new Contributeur("a",100));
        g.ajouter(new Contributeur("b",100));
        g.ajouter(new Contributeur("c",75));
        assertEquals(3,g.nombreDeCotisants());
        assertTrue(g.accepter(new CompositeValide(50)));
        assertTrue(g.accepter(new CompositeValide(75)));
        assertFalse(g.accepter(new CompositeValide(76)));
                
        GroupeDeContributeurs g2 = new GroupeDeContributeurs("g2");
        GroupeDeContributeurs g2_1 = new GroupeDeContributeurs("g2_1");
        GroupeDeContributeurs g2_2 = new GroupeDeContributeurs("g2_2");
        GroupeDeContributeurs g2_3 = new GroupeDeContributeurs("g2_3");
        GroupeDeContributeurs g2_4 = new GroupeDeContributeurs("g2_4");
        g2.ajouter(g2_1);
        g2.ajouter(g2_2);
        g2.ajouter(g2_3);
        g2.ajouter(g2_4);
        g2_1.ajouter(new Contributeur("a",100));
        g2_2.ajouter(new Contributeur("a",100));
        g2_3.ajouter(new Contributeur("a",75));
        g2_4.ajouter(new Contributeur("a",100));
        g2_4.ajouter(new Contributeur("b",100));
        assertEquals(5,g2.nombreDeCotisants());
        assertFalse(g2.accepter(new SansDoublon()));
        assertEquals((Integer) 75,g2.accepter(new DebitMaximal()));

    
    }

Avant de re-soumettre à JNEWS est-il possible d'avoir votre retour?

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

Re: TP_commit question 2 tests en échec

Message par douinj » 26 nov. 2020 11:02

Bonjour,

Vous êtes sur la bonne voie, servez vous du retour de la méthode add sur un ensemble, lors du parcours si cette méthode retourne false --> il existe un doublon

Attention, votre ensemble doit-il être local à la méthode ou au visiteur

Code : Tout sélectionner

 public Boolean visite(GroupeDeContributeurs g){
       boolean res = false;// a compléter
       // a compléter
       res = true;

        Set s = new TreeSet<String>();
Bon tp_commit_q2

demai_ch
Messages : 3
Inscription : 23 oct. 2020 9:34

Re: TP_commit question 2 tests en échec

Message par demai_ch » 26 nov. 2020 18:49

Pour ma part JNews me marque 2 erreurs:

1/testDebitMaximalSurUnGroupeDeGroupes(question2): le débit maximal est-il-erroné ???
2/testTroisContributeursunGoupe(question2):Revoyez DébitMaximal!!!expected:<100>but was:<0>

Tous les tests sont au vert avec le TestsDesVisiteurs

Que teste JNews que je ne teste pas ? N'ai-je pas compris l'idée de ce visiteur ?

J'ai rajouté ceci dans le void testACompleter() :

Code : Tout sélectionner

           CompositeValide cv = new CompositeValide(20);
           CompositeValide cv1 = new CompositeValide(60);
           DebitMaximal db = new DebitMaximal();
           SansDoublon sd = new SansDoublon();
           SansDoublon sd1 = new SansDoublon();
           SansDoublon sd2 = new SansDoublon();
        
           GroupeDeContributeurs grpe = new GroupeDeContributeurs("grpe");
           grpe.ajouter(new Contributeur("annie",100));
           grpe.ajouter(new Contributeur("bastien",20));
           grpe.ajouter(new Contributeur("carl",50));
           assertTrue(" grpe composite valide", grpe.accepter(cv));
           System.out.println("debitMax  grpe :"+grpe.accepter(new DebitMaximal()));
           assertEquals("débit max de 20 pour grpe", new Integer(20), grpe.accepter(db));
           boolean b = grpe.accepter(sd);
           //System.out.println("test sans doublon grpe :" +b);
           assertTrue(" Composite grpe sans doublon", b);
           //System.out.println(grpe.toString());
           
           GroupeDeContributeurs grpe1 = new GroupeDeContributeurs("grpe1");
           grpe1.ajouter(new Contributeur("anne",100));
           grpe1.ajouter(new Contributeur("bool",60));
           grpe1.ajouter(new Contributeur("cecile",80));
           assertTrue(" grpe1 composite valide", grpe1.accepter(cv));
           System.out.println("debitMax  grpe1 :"+grpe1.accepter(new DebitMaximal()));
           assertEquals("débit max de 60 pour grpe1", new Integer(60), grpe1.accepter(db));
           boolean b2 = grpe1.accepter(sd1);
           //System.out.println("test sans doublon grpe1 :" +b2);
           assertTrue(" Composite grpe sans doublon", b2);
           //System.out.println(grpe1.toString());
           
           grpe.ajouter(grpe1);
           assertTrue(" grpe composite valide", grpe.accepter(cv));
           System.out.println("debitMax  grpe1 dans grpe  :"+grpe.accepter(new DebitMaximal()));
           assertEquals("débit max de 20 pour grpe", new Integer(20), grpe.accepter(db));
           boolean b3 = grpe.accepter(sd2);
           //System.out.println("test sans doublon grpe total :" +b3);
           assertTrue(" Composite grpe sans doublon", b3);
           //System.out.println(grpe.toString());
           //System.out.println(grpe.accepter(new VisiteurToString()));
           
           grpe.ajouter(new Contributeur("carl",150));
           boolean b4=grpe.accepter(new SansDoublon());
           //System.out.println("test sans doublon grpe total :" +b4);
           assertFalse(" Composite grpe qui a un doublon",b4);
           //System.out.println(grpe.toString());
           
           grpe.ajouter(new Contributeur("cerise",10));
           System.out.println("debitMax  grpe1 dans grpe +cerise :"+grpe.accepter(new DebitMaximal()));
           assertEquals("débit max de 10 pour grpe", new Integer(10), grpe.accepter(db));
           
           GroupeDeContributeurs grpe2 = new GroupeDeContributeurs("grpe2");
           grpe2.ajouter(new Contributeur("clementine",9));
           grpe.ajouter(grpe2);
           System.out.println("debitMax  grpe1 et 2 dans grpe :"+grpe.accepter(new DebitMaximal()));
           assertEquals("débit max de 9 pour grpe", new Integer(9), grpe.accepter(db));
           
           GroupeDeContributeurs grpe3 = new GroupeDeContributeurs("grpe3");
           grpe3.ajouter(new Contributeur("pomme",5));
           grpe1.ajouter(grpe3);
           System.out.println("debitMax  grpe3DSgrpe1 et grpe2 DS grpe :"+grpe.accepter(new DebitMaximal()));
           assertEquals("débit max de 5 pour grpe", new Integer(5), grpe.accepter(db));
           
           GroupeDeContributeurs g = new GroupeDeContributeurs("g");
            g.ajouter(new Contributeur("g_a",100));
            g.ajouter(new Contributeur("g_b",200));
            g.ajouter(new Contributeur("g_c",300));
            assertTrue(" Ce composite est valide, revoyez CompositeValide !!!", g.accepter(new CompositeValide(0)));
            System.out.println(g.accepter(new DebitMaximal()));
            assertEquals(" Revoyez DébitMaximal !!!", new Integer(100),g.accepter(new DebitMaximal()));
            GroupeDeContributeurs g1 = new GroupeDeContributeurs("g1");
            g1.ajouter(new Contributeur("g1_a",50));
            g1.ajouter(new Contributeur("g1_b",200));
            g1.ajouter(new Contributeur("g1_c",300));
            g1.ajouter(g);
            assertTrue(" Ce composite est valide, revoyez CompositeValide !!!", g1.accepter(new CompositeValide(0)));
            System.out.println(g.accepter(new DebitMaximal()));
            assertEquals(" Revoyez DébitMaximal !!!", new Integer(50),g1.accepter(new DebitMaximal()));
Merci de votre aide

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

Re: TP_commit question 2 tests en échec

Message par douinj » 26 nov. 2020 19:15

Bonsoir,

Vous y êtes presque, deux petites erreurs ...

ci-dessous le code du test que vous pouvez obtenir à la 5ème tentative
Ce n'est pas anne et cécile mais g-a et g-c ;-)

bons tests

Code : Tout sélectionner

 public void testDebitMaximalSurUnGroupeDeGroupes(){
        try{
            GroupeDeContributeurs g = new GroupeDeContributeurs("g");
            g.ajouter(new Contributeur("g_a",120));
            g.ajouter(new Contributeur("g_b",200));
            g.ajouter(new Contributeur("g_c",300));
            GroupeDeContributeurs g1 = new GroupeDeContributeurs("g1");
            GroupeDeContributeurs g2 = new GroupeDeContributeurs("g2");
            g2.ajouter(new Contributeur("g1_a1",30));
            g1.ajouter(g2);
            g.ajouter(g1);
            assertTrue(" Ce composite est valide, revoyez CompositeValide !!!", g.accepter(new CompositeValide(0)));
            GroupeDeContributeurs g3 = new GroupeDeContributeurs("g3");
            g1.ajouter(g3);
            assertFalse(" Ce composite n'est pas valide, revoyez CompositeValide !!!", g.accepter(new CompositeValide(0)));

            assertTrue(" le débit maximal est-il erroné ??? ", g.accepter(new DebitMaximal()) == 30);

        }catch(Exception e){
            fail("exception inattendue !!! " + e.getMessage());
        }
    }

demai_ch
Messages : 3
Inscription : 23 oct. 2020 9:34

Re: TP_commit question 2 tests en échec

Message par demai_ch » 26 nov. 2020 23:09

Ha, compris ! Je suis partie sur le postulat qu'un groupe soumis à ce visiteur était forcément valide !
En prenant en compte le cas, je passe bien les tests :)

Merci beaucoup !!

Répondre