From 6f5c77ae7694d5ab14c6cfeab58f0708594fddb3 Mon Sep 17 00:00:00 2001
From: Malori ALVAREZ <malori.alvarez.etu@univ-lille.fr>
Date: Mon, 28 Apr 2025 16:55:36 +0200
Subject: [PATCH] TP 5-7

---
 .gitignore                              |   4 +-
 lib/tp07-res.jar                        | Bin 0 -> 4246 bytes
 src/tp4/UsePendingCaseQueue.java        |   2 +-
 src/tp7/BidirectionalPhoneBookTest.java | 189 ++++++++++++++++++++++++
 src/tp7/BreedingFarmTest.java           | 164 ++++++++++++++++++++
 src/tp7/DuckTest.java                   |  56 +++++++
 src/tp7/GooseTest.java                  |  56 +++++++
 src/tp7/HenTest.java                    |  56 +++++++
 src/tp7/ProPhoneNumber.java             |  24 +++
 src/tp7/ProPhoneNumberTest.java         |  73 +++++++++
 src/tp7/UniversityDepartment.java       |  34 +++++
 11 files changed, 655 insertions(+), 3 deletions(-)
 create mode 100644 lib/tp07-res.jar
 create mode 100644 src/tp7/BidirectionalPhoneBookTest.java
 create mode 100644 src/tp7/BreedingFarmTest.java
 create mode 100644 src/tp7/DuckTest.java
 create mode 100644 src/tp7/GooseTest.java
 create mode 100644 src/tp7/HenTest.java
 create mode 100644 src/tp7/ProPhoneNumber.java
 create mode 100644 src/tp7/ProPhoneNumberTest.java
 create mode 100644 src/tp7/UniversityDepartment.java

diff --git a/.gitignore b/.gitignore
index ce2251c..c96612d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,11 +2,11 @@
 .class 
 
 
-#Fichiers
+# Fichiers
 .jar 
 .tar.gz
 
-#Divers
+# Divers
 .vscode
 /doc/*
 
diff --git a/lib/tp07-res.jar b/lib/tp07-res.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6926c42ee68ba1e984e142fe33e8dd818aae5833
GIT binary patch
literal 4246
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
Q6d4p50@)cD^f^I10JOk}6aWAK

literal 0
HcmV?d00001

diff --git a/src/tp4/UsePendingCaseQueue.java b/src/tp4/UsePendingCaseQueue.java
index 665a3bb..29aa0f5 100755
--- a/src/tp4/UsePendingCaseQueue.java
+++ b/src/tp4/UsePendingCaseQueue.java
@@ -1,5 +1,5 @@
 package tp4;
-import tpOO.tp04.PendingCase;
+import tpOO.tp4.PendingCase;
 
 public class UsePendingCaseQueue {
     public static void main(String[] args) {
diff --git a/src/tp7/BidirectionalPhoneBookTest.java b/src/tp7/BidirectionalPhoneBookTest.java
new file mode 100644
index 0000000..fc2aad5
--- /dev/null
+++ b/src/tp7/BidirectionalPhoneBookTest.java
@@ -0,0 +1,189 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class BidirectionalPhoneBookTest {
+    public String s1, s2, s3;
+    public String name1, name2, name3;
+    public ProPhoneNumber ppn1, ppn2, ppn3, ppn4, ppn5;
+    public BidirectionalPhoneBook bpb1;
+
+    @BeforeEach
+    void initialization() {
+        s1 = "1234";
+        s2 = "1111";
+        s3 = "2222";
+        name1 = "alice";
+        name2 = "bruno";
+        name3 = "clément";
+        ppn1 = new ProPhoneNumber(s1, UniversityDepartment.IUT);
+        ppn2 = new ProPhoneNumber(s1, UniversityDepartment.FST);
+        ppn3 = new ProPhoneNumber(s2, UniversityDepartment.IUT);
+        ppn4 = new ProPhoneNumber(s1, UniversityDepartment.IUT);
+        ppn5 = new ProPhoneNumber(s3, UniversityDepartment.IUT);
+        bpb1 = new BidirectionalPhoneBook();
+    }
+
+    @Test
+    void testAdd() {
+        assertEquals(0, bpb1.getNbEntries());
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertFalse(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertFalse(bpb1.add(name2, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertFalse(bpb1.add(name1, UniversityDepartment.IUT, s2));
+        assertEquals(1, bpb1.getNbEntries());
+        assertTrue(bpb1.add(name2, UniversityDepartment.IUT, s2));
+        assertEquals(2, bpb1.getNbEntries());
+    }
+
+    @Test
+    void testAlreadyRegistered() {
+        assertEquals(0, bpb1.getNbEntries());
+        assertFalse(bpb1.alreadyRegistered(name1));
+        assertFalse(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertFalse(bpb1.alreadyRegistered(name2));
+        assertFalse(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s2));
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertTrue(bpb1.alreadyRegistered(name1));
+        assertTrue(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertFalse(bpb1.alreadyRegistered(name2));
+        assertFalse(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s2));
+        assertTrue(bpb1.add(name2, UniversityDepartment.IUT, s2));
+        assertEquals(2, bpb1.getNbEntries());
+        assertTrue(bpb1.alreadyRegistered(name1));
+        assertTrue(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertTrue(bpb1.alreadyRegistered(name2));
+        assertTrue(bpb1.alreadyRegistered(UniversityDepartment.IUT.getDiallingCode()+s2));
+    }
+
+    @Test
+    void testGetProPhoneNumberFromName() {
+        assertEquals(0, bpb1.getNbEntries());
+        assertNull(bpb1.getProPhoneNumberFromName(name1));
+        assertNull(bpb1.getProPhoneNumberFromName(name2));
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertEquals(ppn1, bpb1.getProPhoneNumberFromName(name1));
+        assertNull(bpb1.getProPhoneNumberFromName(name2));
+        assertTrue(bpb1.add(name2, UniversityDepartment.FST, s1));
+        assertEquals(2, bpb1.getNbEntries());
+        assertEquals(ppn1, bpb1.getProPhoneNumberFromName(name1));
+        assertEquals(ppn2, bpb1.getProPhoneNumberFromName(name2));
+    }
+
+    @Test
+    void testGetNameFromFiveDigits() {
+        assertEquals(0, bpb1.getNbEntries());
+        assertNull(bpb1.getNameFromFiveDigits(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertNull(bpb1.getNameFromFiveDigits(UniversityDepartment.FST.getDiallingCode()+s1));
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        assertEquals(1, bpb1.getNbEntries());
+        assertEquals(name1, bpb1.getNameFromFiveDigits(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertNull(bpb1.getNameFromFiveDigits(UniversityDepartment.FST.getDiallingCode()+s1));
+        assertTrue(bpb1.add(name2, UniversityDepartment.FST, s1));
+        assertEquals(2, bpb1.getNbEntries());
+        assertEquals(name1, bpb1.getNameFromFiveDigits(UniversityDepartment.IUT.getDiallingCode()+s1));
+        assertEquals(name2, bpb1.getNameFromFiveDigits(UniversityDepartment.FST.getDiallingCode()+s1));
+    }
+
+    @Test
+    void testListing() {
+        String resultIUT = UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator");
+        String resultFST = UniversityDepartment.FST.getLabelLong() + System.getProperty("line.separator");
+        String resultFH = UniversityDepartment.FH.getLabelLong() + System.getProperty("line.separator");
+        assertEquals(0, bpb1.getNbEntries());
+        assertEquals(resultIUT, bpb1.listing(UniversityDepartment.IUT));
+        assertEquals(resultFST, bpb1.listing(UniversityDepartment.FST));
+        assertEquals(resultFH, bpb1.listing(UniversityDepartment.FH));
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        resultIUT += name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        assertEquals(1, bpb1.getNbEntries());
+        assertEquals(resultIUT, bpb1.listing(UniversityDepartment.IUT));
+        assertEquals(resultFST, bpb1.listing(UniversityDepartment.FST));
+        assertEquals(resultFH, bpb1.listing(UniversityDepartment.FH));
+        assertTrue(bpb1.add(name2, UniversityDepartment.FST, s1));
+        resultFST += name2 + ":" + ppn2.internToString() + System.getProperty("line.separator");
+        assertEquals(2, bpb1.getNbEntries());
+        assertEquals(resultIUT, bpb1.listing(UniversityDepartment.IUT));
+        assertEquals(resultFST, bpb1.listing(UniversityDepartment.FST));
+        assertEquals(resultFH, bpb1.listing(UniversityDepartment.FH));
+        assertTrue(bpb1.add(name3, UniversityDepartment.IUT, s3));
+        resultIUT = UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator")+ name3 + ":" + ppn5.internToString() + System.getProperty("line.separator") + name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        assertEquals(3, bpb1.getNbEntries());
+        assertEquals(resultIUT, bpb1.listing(UniversityDepartment.IUT));
+        assertEquals(resultFST, bpb1.listing(UniversityDepartment.FST));
+        assertEquals(resultFH, bpb1.listing(UniversityDepartment.FH));
+    }
+
+    @Test
+    void testListing2() {
+        // empty listing
+        String result = "";
+        for(int i=0; i<UniversityDepartment.values().length; i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }
+        assertEquals(0, bpb1.getNbEntries());
+        assertEquals(result, bpb1.listing());
+        // first addition (IUT)
+        assertTrue(bpb1.add(name1, UniversityDepartment.IUT, s1));
+        {result = "";
+        for(int i=0; i<UniversityDepartment.IUT.ordinal(); i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }
+        result += UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator");
+        result += name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        for(int i=UniversityDepartment.IUT.ordinal()+1; i<UniversityDepartment.values().length; i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }}
+        assertEquals(1, bpb1.getNbEntries());
+        assertEquals(result, bpb1.listing());
+        // second addition (FST)
+        assertTrue(bpb1.add(name2, UniversityDepartment.FST, s1));
+        {result = "";
+        for(int i=0; i<UniversityDepartment.FST.ordinal(); i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }
+        result += UniversityDepartment.FST.getLabelLong() + System.getProperty("line.separator");
+        result += name2 + ":" + ppn2.internToString() + System.getProperty("line.separator");
+        result += UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator");
+        result += name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        for(int i=UniversityDepartment.IUT.ordinal()+1; i<UniversityDepartment.values().length; i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }}
+        assertEquals(2, bpb1.getNbEntries());
+        assertEquals(result, bpb1.listing());
+        // third addition (IUT)
+        assertTrue(bpb1.add(name3, UniversityDepartment.IUT, s3));
+        {result = "";
+        for(int i=0; i<UniversityDepartment.FST.ordinal(); i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }
+        result += UniversityDepartment.FST.getLabelLong() + System.getProperty("line.separator");
+        result += name2 + ":" + ppn2.internToString() + System.getProperty("line.separator");
+        result += UniversityDepartment.IUT.getLabelLong() + System.getProperty("line.separator");
+        result += name3 + ":" + ppn5.internToString() + System.getProperty("line.separator");
+        result += name1 + ":" + ppn1.internToString() + System.getProperty("line.separator");
+        for(int i=UniversityDepartment.IUT.ordinal()+1; i<UniversityDepartment.values().length; i++) {
+            UniversityDepartment ud = UniversityDepartment.values()[i];
+            result += ud.getLabelLong() + System.getProperty("line.separator");
+        }}
+        assertEquals(3, bpb1.getNbEntries());
+        assertEquals(result, bpb1.listing());
+    }
+}
diff --git a/src/tp7/BreedingFarmTest.java b/src/tp7/BreedingFarmTest.java
new file mode 100644
index 0000000..49f8df8
--- /dev/null
+++ b/src/tp7/BreedingFarmTest.java
@@ -0,0 +1,164 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class BreedingFarmTest {
+    int id1, id2, id3, id4, id5, id6, size1;
+    double w1, w2, w3;
+    Duck d1, d2;
+    Hen h1, h2;
+    Goose g1, g2;
+    BreedingFarm bf1, bf2;
+
+    @BeforeEach
+    void testInitialization() {
+        id1=1; id2=2; id3=10; id4=20; id5=100; id6=200;
+        size1=3;
+        w1=3.0; w2=6.0; w3=15.0;
+        d1 = new Duck(id1, w1);
+        d2 = new Duck(id2, w2);
+        h1 = new Hen(id3, w1);
+        h2 = new Hen(id4, w2);
+        g1 = new Goose(id5, w2);
+        g2 = new Goose(id6, w3);
+        bf1 = new BreedingFarm(size1);
+        bf2 = new BreedingFarm();
+    }
+
+    @Test
+    void testAdd() {
+        // bf1 --> élevage taille max = size1
+        // bf2 --> élevage taille max par défaut
+        assertEquals(0, bf1.getFarmSize());
+        assertEquals(0, bf2.getFarmSize());
+        bf1.add(d1); bf2.add(d1);
+        assertEquals(1, bf1.getFarmSize());
+        assertEquals(1, bf2.getFarmSize());
+        bf1.add(h1); bf2.add(h1);
+        assertEquals(2, bf1.getFarmSize());
+        assertEquals(2, bf2.getFarmSize());
+        bf1.add(g1); bf2.add(g1);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(3, bf2.getFarmSize());
+        bf1.add(d2); bf2.add(d2);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(4, bf2.getFarmSize());
+    }
+
+    @Test
+    void testGetNbDuck() {
+        assertEquals(0, bf1.getNbDuck());
+        bf1.add(d1);
+        assertEquals(1, bf1.getFarmSize());
+        assertEquals(1, bf1.getNbDuck());
+        bf1.add(h1);
+        assertEquals(2, bf1.getFarmSize());
+        assertEquals(1, bf1.getNbDuck());
+        bf1.add(d2);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(2, bf1.getNbDuck());
+    }
+
+    @Test
+    void testSearch() {
+        bf1.add(d1); bf1.add(h1); bf1.add(g1);
+        assertEquals(3, bf1.getFarmSize());
+        assertSame(d1, bf1.search(id1));
+        assertNull(bf1.search(id2));
+        assertSame(h1, bf1.search(id3));
+        assertNull(bf1.search(id4));
+        assertSame(g1, bf1.search(id5));
+        assertNull(bf1.search(id6));
+    }
+
+    @Test
+    void testGetDuck() {
+        bf1.add(d1); bf1.add(h1); bf1.add(d2);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(2, bf1.getNbDuck());
+        assertSame(d1, bf1.getDuck(1));
+        assertSame(d2, bf1.getDuck(2));
+        assertNull(bf1.getDuck(3));
+    }
+
+    @Test
+    void testUpdateWeight() {
+        bf1.add(d1); bf1.add(h1); bf1.add(g1);
+        assertEquals(3, bf1.getFarmSize());
+        assertEquals(w1, d1.getWeight());
+        bf1.updateWeight(id1, w2);
+        assertEquals(w2, d1.getWeight());
+    }
+
+    @Test
+    void testIsFatEnough() {
+        assertFalse(d1.isFatEnough());
+        assertTrue(d2.isFatEnough());
+        assertFalse(h1.isFatEnough());
+        assertTrue(h2.isFatEnough());
+        assertFalse(g1.isFatEnough());
+        assertTrue(g2.isFatEnough());
+    }
+
+    @Test
+    void testPotentialProfit() {
+        double profit = 0.0;
+        assertEquals(0, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(d1); // too thin
+        assertEquals(1, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(d2); // can be slaughtered
+        profit += d2.getWeight() * d2.getPriceKg();
+        assertEquals(2, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(h1); // too thin
+        assertEquals(3, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(h2); // can be slaughtered
+        profit += h2.getWeight() * h2.getPriceKg();
+        assertEquals(4, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(g1); // too thin
+        assertEquals(5, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+        bf2.add(g2); // can be slaughtered
+        profit += g2.getWeight() * g2.getPriceKg();
+        assertEquals(6, bf2.getFarmSize());
+        assertEquals(profit, bf2.potentialProfit());
+    }
+
+    @Test
+    void testSlaughtering() {
+        List<Poultry> toSlaughter = new ArrayList<Poultry>();
+        bf2.add(d1); bf2.add(h1);
+        assertEquals(2, bf2.getFarmSize());
+        toSlaughter = bf2.slaughtering();
+        assertEquals(2, bf2.getFarmSize());
+        assertEquals(0, toSlaughter.size());
+        bf2.add(d2);
+        assertEquals(3, bf2.getFarmSize());
+        toSlaughter = bf2.slaughtering();
+        assertEquals(2, bf2.getFarmSize());
+        assertEquals(1, toSlaughter.size());
+        assertEquals(d2, toSlaughter.get(0));
+        bf2.add(d2); bf2.add(h2);
+        assertEquals(4, bf2.getFarmSize());
+        toSlaughter = bf2.slaughtering();
+        assertEquals(2, bf2.getFarmSize());
+        assertEquals(2, toSlaughter.size());
+        assertEquals(d2, toSlaughter.get(0));
+        assertEquals(h2, toSlaughter.get(1));
+    }
+
+}
diff --git a/src/tp7/DuckTest.java b/src/tp7/DuckTest.java
new file mode 100644
index 0000000..4b8dbb1
--- /dev/null
+++ b/src/tp7/DuckTest.java
@@ -0,0 +1,56 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class DuckTest {
+    public int id1, id2, id3;
+    public double w1, w2, w3;
+    public Duck d1, d2, d3;
+
+    @BeforeEach
+    void testInitialization() {
+        id1=10; id2=20; id3=30;
+        w1=1.0; w2=2.0; w3=3.0;
+        d1 = new Duck(id1, w1);
+        d2 = new Duck(id2, w2);
+        d3 = new Duck(id3, w3);
+    }
+
+    @Test
+    void testGetIdentity() {
+        assertEquals(id1, d1.getIdentity());
+        assertEquals(id2, d2.getIdentity());
+        assertEquals(id3, d3.getIdentity());
+    }
+
+    @Test
+    void testSetIdentity() {
+        assertEquals(id1, d1.getIdentity());
+        d1.setIdentity(id2);
+        assertEquals(id2, d1.getIdentity());
+    }
+
+    @Test
+    void testGetWeight() {
+        assertEquals(w1, d1.getWeight());
+        assertEquals(w2, d2.getWeight());
+        assertEquals(w3, d3.getWeight());
+    }
+
+    @Test
+    void testSetWeight() {
+        assertEquals(w1, d1.getWeight());
+        d1.setWeight(w2);
+        assertEquals(w2, d1.getWeight());
+    }
+
+    @Test
+    void testGetPrice() {
+        assertEquals(w1*d1.getPriceKg(), d1.getPrice());
+        assertEquals(w2*d2.getPriceKg(), d2.getPrice());
+        assertEquals(w3*d3.getPriceKg(), d3.getPrice());
+    }
+}
diff --git a/src/tp7/GooseTest.java b/src/tp7/GooseTest.java
new file mode 100644
index 0000000..1ee4b04
--- /dev/null
+++ b/src/tp7/GooseTest.java
@@ -0,0 +1,56 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class GooseTest {
+    public int id1, id2, id3;
+    public double w1, w2, w3;
+    public Goose g1, g2, g3;
+
+    @BeforeEach
+    void testInitialization() {
+        id1=10; id2=20; id3=30;
+        w1=1.0; w2=2.0; w3=3.0;
+        g1 = new Goose(id1, w1);
+        g2 = new Goose(id2, w2);
+        g3 = new Goose(id3, w3);
+    }
+
+    @Test
+    void testGetIdentity() {
+        assertEquals(id1, g1.getIdentity());
+        assertEquals(id2, g2.getIdentity());
+        assertEquals(id3, g3.getIdentity());
+    }
+
+    @Test
+    void testSetIdentity() {
+        assertEquals(id1, g1.getIdentity());
+        g1.setIdentity(id2);
+        assertEquals(id2, g1.getIdentity());
+    }
+
+    @Test
+    void testGetWeight() {
+        assertEquals(w1, g1.getWeight());
+        assertEquals(w2, g2.getWeight());
+        assertEquals(w3, g3.getWeight());
+    }
+
+    @Test
+    void testSetWeight() {
+        assertEquals(w1, g1.getWeight());
+        g1.setWeight(w2);
+        assertEquals(w2, g1.getWeight());
+    }
+
+    @Test
+    void testGetPrice() {
+        assertEquals(w1*g1.getPriceKg(), g1.getPrice());
+        assertEquals(w2*g2.getPriceKg(), g2.getPrice());
+        assertEquals(w3*g3.getPriceKg(), g3.getPrice());
+    }
+}
diff --git a/src/tp7/HenTest.java b/src/tp7/HenTest.java
new file mode 100644
index 0000000..29d883c
--- /dev/null
+++ b/src/tp7/HenTest.java
@@ -0,0 +1,56 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class HenTest {
+    public int id1, id2, id3;
+    public double w1, w2, w3;
+    public Hen h1, h2, h3;
+
+    @BeforeEach
+    void testInitialization() {
+        id1=10; id2=20; id3=30;
+        w1=1.0; w2=2.0; w3=3.0;
+        h1 = new Hen(id1, w1);
+        h2 = new Hen(id2, w2);
+        h3 = new Hen(id3, w3);
+    }
+
+    @Test
+    void testGetIdentity() {
+        assertEquals(id1, h1.getIdentity());
+        assertEquals(id2, h2.getIdentity());
+        assertEquals(id3, h3.getIdentity());
+    }
+
+    @Test
+    void testSetIdentity() {
+        assertEquals(id1, h1.getIdentity());
+        h1.setIdentity(id2);
+        assertEquals(id2, h1.getIdentity());
+    }
+
+    @Test
+    void testGetWeight() {
+        assertEquals(w1, h1.getWeight());
+        assertEquals(w2, h2.getWeight());
+        assertEquals(w3, h3.getWeight());
+    }
+
+    @Test
+    void testSetWeight() {
+        assertEquals(w1, h1.getWeight());
+        h1.setWeight(w2);
+        assertEquals(w2, h1.getWeight());
+    }
+
+    @Test
+    void testGetPrice() {
+        assertEquals(w1*h1.getPriceKg(), h1.getPrice());
+        assertEquals(w2*h2.getPriceKg(), h2.getPrice());
+        assertEquals(w3*h3.getPriceKg(), h3.getPrice());
+    }
+}
diff --git a/src/tp7/ProPhoneNumber.java b/src/tp7/ProPhoneNumber.java
new file mode 100644
index 0000000..48a9201
--- /dev/null
+++ b/src/tp7/ProPhoneNumber.java
@@ -0,0 +1,24 @@
+package tp7;
+import td00.td01.*;
+
+public class ProPhoneNumber{
+    private UniversityDepartment dept;
+    private PhoneNumber numbers;
+
+    public ProPhoneNumber(String n, UniversityDepartment d){
+        this.numbers = new PhoneNumber(33,3,20,dept.getDiallingCode(), Integer.valueOf(n.substring(n.length()-4,n.length()-2)), Integer.valueOf(n.substring(n.length()-2)));
+        this.dept = d;
+    }
+    
+    public UniversityDepartment getDepartment(){
+        return dept; 
+    }
+
+    public String internToString(){
+        return + numbers + "(" + dept + ")";
+    }
+
+    public String externToString(){
+        return numbers + "(" + dept + ")";
+    }
+}
diff --git a/src/tp7/ProPhoneNumberTest.java b/src/tp7/ProPhoneNumberTest.java
new file mode 100644
index 0000000..18bc73c
--- /dev/null
+++ b/src/tp7/ProPhoneNumberTest.java
@@ -0,0 +1,73 @@
+package tpOO.tp07;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class ProPhoneNumberTest {
+    public String s1, s2;
+    public ProPhoneNumber un, deux, trois, quatre;
+
+    @BeforeEach
+    void initialization() {
+        s1 = "1234";
+        s2 = "1111";
+        un = new ProPhoneNumber(s1, UniversityDepartment.IUT);
+        deux = new ProPhoneNumber(s1, UniversityDepartment.FST);
+        trois = new ProPhoneNumber(s2, UniversityDepartment.IUT);
+        quatre = new ProPhoneNumber(s1, UniversityDepartment.IUT);
+    }
+
+    @Test
+    void testEquals() {
+        assertTrue(un.equals(un));
+        assertFalse(un.equals(deux));
+        assertFalse(un.equals(trois));
+        assertTrue(un.equals(quatre));
+        assertFalse(deux.equals(trois));
+        assertFalse(deux.equals(quatre));
+    }
+
+    @Test
+    void testEquals2() {
+        assertTrue(un.equals(s1));
+        assertFalse(un.equals(s2));
+        assertTrue(deux.equals(s1));
+        assertFalse(deux.equals(s2));
+    }
+
+    @Test
+    void testInternToString() {
+        String res = "31234(" + UniversityDepartment.IUT.getLabelShort() + ")";
+        assertEquals(res, un.internToString());
+        res = "21234(" + UniversityDepartment.FST.getLabelShort() + ")";
+        assertEquals(res, deux.internToString());
+        res = "31111(" + UniversityDepartment.IUT.getLabelShort() + ")";
+        assertEquals(res, trois.internToString());
+        res = "31234(" + UniversityDepartment.IUT.getLabelShort() + ")";
+        assertEquals(res, quatre.internToString());
+    }
+
+    @Test
+    void testExternToString() {
+        String res = "+33.3.20.03.12.34 (" + UniversityDepartment.IUT.getLabelLong() + ")";
+        assertEquals(res, un.externToString());
+        res = "+33.3.20.02.12.34 (" + UniversityDepartment.FST.getLabelLong() + ")";
+        assertEquals(res, deux.externToString());
+        res = "+33.3.20.03.11.11 (" + UniversityDepartment.IUT.getLabelLong() + ")";
+        assertEquals(res, trois.externToString());
+        res = "+33.3.20.03.12.34 (" + UniversityDepartment.IUT.getLabelLong() + ")";
+        assertEquals(res, quatre.externToString());
+    }
+
+    @Test
+    void testGetDepartment() {
+        assertEquals(UniversityDepartment.IUT, un.getDepartment());
+        assertEquals(UniversityDepartment.FST, deux.getDepartment());
+        assertEquals(UniversityDepartment.IUT, trois.getDepartment());
+        assertEquals(UniversityDepartment.IUT, quatre.getDepartment());
+    }
+}
diff --git a/src/tp7/UniversityDepartment.java b/src/tp7/UniversityDepartment.java
new file mode 100644
index 0000000..5d15252
--- /dev/null
+++ b/src/tp7/UniversityDepartment.java
@@ -0,0 +1,34 @@
+package tp7; // à adapter éventuellement selon la structure de votre projet
+
+public enum UniversityDepartment {
+    F3S(1,"Faculté des Sciences de Santé et du Sport"),
+    FST(2,"Faculté des Sciences et Technologies"),
+    IUT(3,"Institut Universitaire de Technologies"),
+    FSJPS(4,"Faculté des Sciences Juridiques, Politiques et Sociales"),
+    FSEST(5,"Faculté des Sciences Économiques, Sociales et des Territoires"),
+    FH(6,"Faculté des Humanités"),
+    FLCS(7,"Faculté des Langues, Cultures et Sociétés"),
+    FPSEF(8,"Faculté de Psychologie, Sciences de l’Education et de la Formation");
+
+    private String departement; 
+    private int composante;
+
+    private UniversityDepartment (int c, String d){
+        this.composante=c;
+        this.departement=d;
+    }
+
+    public String getLabelShort(){
+        return this.name();
+    }
+
+    public String getLabelLong(){
+        return this.departement;
+    }
+
+    public int getDiallingCode(){
+        return this.composante;
+    }
+
+    
+}
-- 
GitLab