Esempio n. 1
0
def test_probleme_encodage():
    """Test."""
    personnel_str_1 = """
    Février / 3 /
    Mars / 4 /
    
    Avril / 7 / 7
    """
    personnel_str_2 = """
    Février / 3 /
    Mars / 4 /
    Avril / 7 / 8
    """
    echange_str = """
    3 / .33
    """
    couts_str = """
    160 / 200 / 200
    """
    h_supp_str = """
    .25
    """
    with pytest.raises(ValueError):
        Probleme.par_str(personnel_str_1, echange_str, couts_str, h_supp_str)
    with pytest.raises(ValueError):
        Probleme.par_str(personnel_str_2, echange_str, couts_str, h_supp_str)
Esempio n. 2
0
def test_instanciation(personnel, echange, couts, h_supp):
    """Création."""
    probleme = Probleme(personnel, echange, couts, h_supp)
    assert isinstance(probleme, Probleme)
    assert probleme._personnel == {
        prerequis.mois: prerequis
        for prerequis in personnel
    }
Esempio n. 3
0
def test_encode_echange():
    """Teste l'encodage d'une ligne en un objet de classe Echange."""
    correspondance = {
        "3 / .33": Echange(ajout_max=3, suppression_max=.33),
        "2 / .25": Echange(ajout_max=2, suppression_max=.25)
    }
    for entree, attendu in correspondance.items():
        assert attendu == Probleme._encode_echange(entree)
Esempio n. 4
0
def probleme_sans_solution():
    """Retranscription du problème d'exemple en graphe."""
    return Probleme(personnel=[
        Prerequis(mois="Février", nb_employes_min=3, nb_employes_max=Inf),
        Prerequis(mois="Mars", nb_employes_min=7, nb_employes_max=7)
    ],
                    echange=Echange(3, 1 / 3),
                    couts=Couts(160, 200, 200),
                    h_supp=1 / 4)
Esempio n. 5
0
def probleme():
    """Problème utilisé pour les tests."""
    return Probleme(personnel=[
        Prerequis(mois="Février", nb_employes_min=3, nb_employes_max=Inf),
        Prerequis(mois="Mars", nb_employes_min=4, nb_employes_max=Inf),
        Prerequis(mois="Avril", nb_employes_min=2, nb_employes_max=2)
    ],
                    echange=Echange(1, 1 / 2),
                    couts=Couts(90, 100, 300),
                    h_supp=1 / 4)
Esempio n. 6
0
def test_encode_couts():
    """Teste l'encodage d'une ligne en objet de classe Couts."""
    correspondance = {
        "100 / 200 / 40":
        Couts(changement=100, sur_effectif=200, sous_effectif=40),
        "10 / 2000 / 400":
        Couts(changement=10, sur_effectif=2000, sous_effectif=400)
    }
    for entree, attendu in correspondance.items():
        assert attendu == Probleme._encode_couts(entree)
Esempio n. 7
0
def test_encode_prerequis():
    """Teste l'encodage d'une ligne en un objet de classe Prerequis."""
    correspondance = {
        "Février / 1 / 6":
        Prerequis(mois="Février", nb_employes_min=1, nb_employes_max=6),
        "Mars / 2 / 9":
        Prerequis(mois="Mars", nb_employes_min=2, nb_employes_max=9)
    }
    for entree, attendu in correspondance.items():
        assert attendu == Probleme._encode_prerequis(entree)
def probleme_non_valide():
    """Problème ne pouvant pas être résolu."""
    return Probleme(
        personnel = [
            Prerequis(mois = "Février", nb_employes_min = 3, nb_employes_max = Inf),
            Prerequis(mois = "Mars", nb_employes_min = 1, nb_employes_max = 1)
        ],
        echange = Echange(3, 1/3),
        couts = Couts(160, 200, 200),
        h_supp = 1/4
    )
Esempio n. 9
0
def test_constructeur(personnel, echange, couts, h_supp):
    """Constructeur alternatif."""
    personnel_str = """
    Février / 3 /
    Mars / 4 /
    Avril / 7 /
    Mai / 7 /
    Juin / 5 / 5
    """
    echange_str = """
    3 / .33
    """
    couts_str = """
    160 / 200 / 200
    """
    h_supp_str = """
    .25
    """
    probleme = Probleme.par_str(personnel_str, echange_str, couts_str,
                                h_supp_str)
    assert probleme == Probleme(personnel, echange, couts, h_supp)
Esempio n. 10
0
def test_repr():
    """Teste le repr."""
    probleme = Probleme(personnel=[
        Prerequis(mois="Mars", nb_employes_min=2, nb_employes_max=Inf),
        Prerequis(mois="Avril", nb_employes_min=4, nb_employes_max=4)
    ],
                        echange=Echange(3, .33),
                        couts=Couts(160, 200, 200),
                        h_supp=1 / 4)
    assert (
        repr(probleme) ==
        "Probleme(personnel = [Prerequis(mois='Mars', nb_employes_min=2, nb_employes_max=inf), Prerequis(mois='Avril', nb_employes_min=4, nb_employes_max=4)], echange = Echange(ajout_max=3, suppression_max=0.33), couts = Couts(changement=160, sur_effectif=200, sous_effectif=200), h_supp = 0.25)"
    )
Esempio n. 11
0
 def _sur_clique(self, b):
     self.zone_probleme.clear_output()
     self.zone_solution.clear_output()
     self.zone_graphique.clear_output()
     echange_str = f"""
     {str(self.zone_entree_ajout_max.value)} / {str(self.zone_entree_suppression_max.value/100)}
     """
     couts_str = f"""
     {str(self.zone_entree_couts_changement.value)} / {str(self.zone_entree_couts_sur_effectif.value)} / {str(self.zone_entree_couts_sous_effectif.value)}
     """
     try:
         probleme = Probleme.par_str(
             self.zone_entree_personnel.value + "   \n" +
             self.zone_entree_objectif.value, echange_str, couts_str,
             str(self.zone_entree_h_supp.value / 100))
         solution = Resolution(grapheD=GrapheD(probleme=probleme))
     except ValueError:
         probleme = None
     with self.zone_probleme:
         if probleme is not None:
             display(probleme.genere_table_personnel())
             display(probleme.genere_table_contraintes())
             display(probleme._couts.genere_table_couts())
         else:
             print(
                 f"Veuillez relire le mode d'emploi \npour rentrer les données correctement !"
             )
     with self.zone_solution:
         if probleme is not None:
             if solution._est_resolvable():
                 display(solution.genere_table())
                 solution.genere_graphique()
             else:
                 print(
                     f"Configuration incorrecte ! \nIl ne peut pas y avoir {probleme[probleme.mois[-1]].nb_employes_min} employé(s) présent(s) au mois de {probleme[probleme.mois[-1]].mois}."
                 )
Esempio n. 12
0
def test_personnel(personnel, echange, couts, h_supp):
    """Teste la propriété personnel.
    La propriété personnel ne doit pas faire partie des attributs de la classe Probleme."""
    probleme = Probleme(personnel, echange, couts, h_supp)
    assert "personnel" not in vars(probleme)
    assert personnel == list(probleme.personnel)
Esempio n. 13
0
def test_validation_doublon(personnel, echange, couts, h_supp):
    """Vérifie la détection de deux prérequis associés au même mois."""
    a, b, c, d, e = personnel
    f = Prerequis(mois="Mars", nb_employes_min=2, nb_employes_max=8)
    with pytest.raises(ValueError):
        Probleme([a, b, c, d, e, f], echange, couts, h_supp)
Esempio n. 14
0
def test_egalite(personnel, echange, couts, h_supp):
    """Doit être différent de l'identité."""
    probleme1 = Probleme(personnel, echange, couts, h_supp)
    probleme2 = Probleme(personnel, echange, couts, h_supp)
    assert probleme1 == probleme2
Esempio n. 15
0
def test_getitem(personnel, echange, couts, h_supp):
    """Utilisation de []."""
    probleme = Probleme(personnel, echange, couts, h_supp)
    assert probleme["Février"] == personnel[0]
Esempio n. 16
0
def test_mois(personnel, echange, couts, h_supp):
    """Teste la propriété mois. 
    La propriété mois ne doit pas faire partie des attributs de la classe Probleme."""
    probleme = Probleme(personnel, echange, couts, h_supp)
    assert "mois" not in vars(probleme)
    assert ("Février Mars Avril Mai Juin").split() == list(probleme.mois)