From d403e16a3236596177cbce1ef0b4abbfe9f942eb Mon Sep 17 00:00:00 2001 From: Numbtus <matias.mennecart.etu@univ-lille.fr> Date: Fri, 29 Nov 2024 22:57:00 +0100 Subject: [PATCH] Edit tests --- .../DistanceEuclidienneNormaliseeTest.java | 373 +------------- .../knn/distance/DistanceEuclidienneTest.java | 372 +------------- .../DistanceManhattanNormaliseeTest.java | 374 +------------- .../knn/distance/DistanceManhattanTest.java | 461 +----------------- .../model/ClassificationModelTest.java | 12 +- 5 files changed, 94 insertions(+), 1498 deletions(-) diff --git a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneNormaliseeTest.java b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneNormaliseeTest.java index e41a60c..9134574 100644 --- a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneNormaliseeTest.java +++ b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneNormaliseeTest.java @@ -1,379 +1,58 @@ package fr.univlille.sae.classification.knn.distance; -import static org.junit.jupiter.api.Assertions.*; + +import com.opencsv.exceptions.CsvRequiredFieldEmptyException; import fr.univlille.sae.classification.knn.MethodKNN; +import fr.univlille.sae.classification.model.ClassificationModel; +import fr.univlille.sae.classification.model.Iris; import javafx.scene.paint.Color; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; import fr.univlille.sae.classification.model.LoadableData; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import java.io.File; import java.util.Map; -public class DistanceEuclidienneNormaliseeTest { - - @BeforeAll - public static void setupMethodKNN() { - MethodKNN.minData = new double[]{0.0, 2.0, 4.0}; - MethodKNN.amplitude = new double[]{10.0, 3.0, 2.0}; // Assurez-vous que toutes les amplitudes sont non nulles - } - - @Test - public void testDistanceMatchingAttributes() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{2.0, 3.0, 6.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{8.0, 5.0, 8.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - DistanceEuclidienneNormalisee distance = new DistanceEuclidienneNormalisee(); - double result = distance.distance(data1, data2); - assertEquals(1.3432961119739923, result, 0.0001); - } - - @Test - public void testDistanceDifferentStringAttributes() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; - @Override - public double[] getAttributes() { - return new double[]{2.0, 3.0, 6.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } +public class DistanceEuclidienneNormaliseeTest { - @Override - public int getClassificationType() { - return 0; - } + private ClassificationModel model; + private DistanceEuclidienneNormalisee distance; + private String path = System.getProperty("user.dir") + File.separator + "res" + File.separator; - @Override - public void setClassification(String classification) { + @BeforeEach + public void initialize() throws CsvRequiredFieldEmptyException { - } + model = ClassificationModel.getClassificationModel(); + distance = new DistanceEuclidienneNormalisee(); - @Override - public Map<String, Object> getAttributesNames() { - return null; - } + model.setDistance(distance); + model.loadData(new File(path + "data/iris.csv")); - @Override - public double[] getAttributes() { - return new double[]{8.0, 5.0, 8.0}; - } - @Override - public String[] getStringAttributes() { - return new String[]{"A", "C"}; - } - }; - DistanceEuclidienneNormalisee distance = new DistanceEuclidienneNormalisee(); - double result = distance.distance(data1, data2); - assertEquals(1.674647558277396, result, 0.0001); + MethodKNN.updateModel(model.getDatas()); } @Test - public void testDistanceDifferentAttributeLengths() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{2.0, 3.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } + public void test_distance_est_correcte() { - @Override - public void setClassification(String classification) { + Iris iris = new Iris(1.0, 1.0, 1.0,1.0); + Iris iris2 = new Iris(1.0, 1.0, 1.0,1.0); + assertEquals(0, distance.distance(iris, iris2), 0.001); - } + Iris iris3 = new Iris(2.0, 2.0, 2.0, 2.0); + assertEquals(0.49, distance.distance(iris, iris3), 0.01); - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{8.0, 5.0, 8.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A"}; - } - }; - - DistanceEuclidienneNormalisee distance = new DistanceEuclidienneNormalisee(); - assertThrows(IllegalArgumentException.class, () -> distance.distance(data1, data2)); } - @Test - public void testDistanceDifferentStringAttributeLengths() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{2.0, 3.0, 6.0}; - } - @Override - public String[] getStringAttributes() { - return new String[]{"A"}; - } - }; - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{8.0, 5.0, 8.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - DistanceEuclidienneNormalisee distance = new DistanceEuclidienneNormalisee(); - assertThrows(IllegalArgumentException.class, () -> distance.distance(data1, data2)); - } } diff --git a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneTest.java b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneTest.java index 1ce0de7..8c0bd66 100644 --- a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneTest.java +++ b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneTest.java @@ -2,375 +2,47 @@ package fr.univlille.sae.classification.knn.distance; import static org.junit.jupiter.api.Assertions.*; +import com.opencsv.exceptions.CsvRequiredFieldEmptyException; +import fr.univlille.sae.classification.knn.MethodKNN; +import fr.univlille.sae.classification.model.ClassificationModel; +import fr.univlille.sae.classification.model.Iris; import javafx.scene.paint.Color; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import fr.univlille.sae.classification.model.LoadableData; +import java.io.File; import java.util.Map; public class DistanceEuclidienneTest { - @Test - public void testDistanceMatchingAttributes() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{1.0, 2.0, 3.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{4.0, 6.0, 3.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - DistanceEuclidienne distance = new DistanceEuclidienne(); - double result = distance.distance(data1, data2); - - assertEquals(5.0, result, 0.0001); // Distance euclidienne entre les deux points - } - - @Test - public void testDistanceDifferentStringAttributes() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{1.0, 2.0, 3.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - } - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{1.0, 2.0, 3.0}; - } + private ClassificationModel model; + private DistanceEuclidienne distance; + private String path = System.getProperty("user.dir") + File.separator + "res" + File.separator; - @Override - public String[] getStringAttributes() { - return new String[]{"A", "C"}; - } - }; + @BeforeEach + public void initialize() throws CsvRequiredFieldEmptyException { - DistanceEuclidienne distance = new DistanceEuclidienne(); - double result = distance.distance(data1, data2); + model = ClassificationModel.getClassificationModel(); + distance = new DistanceEuclidienne(); - assertEquals(1.0, result, 0.0001); // Une différence dans les attributs string - } - - @Test - public void testDistanceDifferentAttributeLengths() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{1.0, 2.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } + model.setDistance(distance); + model.loadData(new File(path + "data/iris.csv")); - @Override - public double[] getAttributes() { - return new double[]{1.0, 2.0, 3.0}; - } - @Override - public String[] getStringAttributes() { - return new String[]{"A"}; - } - }; - DistanceEuclidienne distance = new DistanceEuclidienne(); - - assertThrows(IllegalArgumentException.class, () -> { - distance.distance(data1, data2); - }); + MethodKNN.updateModel(model.getDatas()); } @Test - public void testDistanceDifferentStringAttributeLengths() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{1.0, 2.0, 3.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{1.0, 2.0, 3.0}; - } + public void test_distance_est_correcte() { - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; + Iris iris = new Iris(1.0, 1.0, 1.0,1.0); + Iris iris2 = new Iris(1.0, 1.0, 1.0,1.0); + assertEquals(0, distance.distance(iris, iris2), 0.001); - DistanceEuclidienne distance = new DistanceEuclidienne(); + Iris iris3 = new Iris(2.0, 2.0, 2.0, 2.0); + assertEquals(2.0, distance.distance(iris, iris3), 0.01); - assertThrows(IllegalArgumentException.class, () -> { - distance.distance(data1, data2); - }); } } diff --git a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanNormaliseeTest.java b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanNormaliseeTest.java index 7db233c..f2514d4 100644 --- a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanNormaliseeTest.java +++ b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanNormaliseeTest.java @@ -1,384 +1,50 @@ package fr.univlille.sae.classification.knn.distance; +import com.opencsv.exceptions.CsvRequiredFieldEmptyException; +import fr.univlille.sae.classification.model.ClassificationModel; +import fr.univlille.sae.classification.model.Iris; import fr.univlille.sae.classification.model.LoadableData; import fr.univlille.sae.classification.knn.MethodKNN; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; class DistanceManhattanNormaliseeTest { - private DistanceManhattanNormalisee distanceManhattanNormalisee; - @BeforeEach - void setUp() { - distanceManhattanNormalisee = new DistanceManhattanNormalisee(); - - // Configurer les valeurs statiques pour la normalisation - MethodKNN.minData = new double[]{1.0, 2.0, 0.5}; - MethodKNN.amplitude = new double[]{4.0, 3.0, 2.5}; - } - - @Test - void testDistance_Calculation() { - LoadableData l1 = new LoadableData() { - @Override - public double[] getAttributes() { - return new double[]{2.0, 5.0, 1.0}; - } - - @Override - public String getClassification() { - return "Class1"; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public String[] getStringAttributes() { - return new String[0]; - } - }; - - LoadableData l2 = new LoadableData() { - @Override - public double[] getAttributes() { - return new double[]{4.0, 4.0, 2.0}; - } - - @Override - public String getClassification() { - return "Class2"; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public String[] getStringAttributes() { - return new String[0]; - } - }; - - double expectedDistance = - (Math.abs(2.0 - 4.0) - 1.0) / 4.0 + - (Math.abs(5.0 - 4.0) - 2.0) / 3.0 + - (Math.abs(1.0 - 2.0) - 0.5) / 2.5; - - assertEquals(expectedDistance, distanceManhattanNormalisee.distance(l1, l2), 1e-6); - } - - @Test - void testDistance_ZeroDistance() { - MethodKNN.minData = new double[]{1.0, 1.0, 1.0}; - LoadableData l1 = new LoadableData() { - @Override - public double[] getAttributes() { - return new double[]{2.0, 2.0, 2.0}; - } - - @Override - public String getClassification() { - return "Class1"; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public String[] getStringAttributes() { - return new String[0]; - } - }; - - LoadableData l2 = new LoadableData() { - @Override - public double[] getAttributes() { - return new double[]{1.0, 1.0, 1.0}; - } - - @Override - public String getClassification() { - return "Class1"; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { + private ClassificationModel model; + private DistanceManhattanNormalisee distance; + private String path = System.getProperty("user.dir") + File.separator + "res" + File.separator; - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } + @BeforeEach + public void initialize() throws CsvRequiredFieldEmptyException { - @Override - public int getClassificationType() { - return 0; - } + model = ClassificationModel.getClassificationModel(); + distance = new DistanceManhattanNormalisee(); - @Override - public void setClassification(String classification) { - } + model.setDistance(distance); + model.loadData(new File(path + "data/iris.csv")); - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public String[] getStringAttributes() { - return new String[0]; - } - }; - assertEquals(0.0, distanceManhattanNormalisee.distance(l1, l2), 1e-6); + MethodKNN.updateModel(model.getDatas()); } - @Test - void testDistance_EmptyAttributes() { - LoadableData l1 = new LoadableData() { - @Override - public double[] getAttributes() { - return new double[]{}; - } - - @Override - public String getClassification() { - return "Class1"; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } + public void test_distance_est_correcte() { - @Override - public String[] getStringAttributes() { - return new String[0]; - } - }; + Iris iris = new Iris(1.0, 1.0, 1.0,1.0); + Iris iris2 = new Iris(1.0, 1.0, 1.0,1.0); + assertEquals(0, distance.distance(iris, iris2), 0.001); - LoadableData l2 = new LoadableData() { - @Override - public double[] getAttributes() { - return new double[]{}; - } + Iris iris3 = new Iris(2.0, 2.0, 2.0, 2.0); + assertEquals(0.89, distance.distance(iris, iris3), 0.01); - @Override - public String getClassification() { - return "Class2"; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public String[] getStringAttributes() { - return new String[0]; - } - }; - - assertEquals(0.0, distanceManhattanNormalisee.distance(l1, l2), 1e-6); } - @Test - void testDistance_DifferentLengthAttributes() { - LoadableData l1 = new LoadableData() { - @Override - public double[] getAttributes() { - return new double[]{2.0, 3.0}; - } - - @Override - public String getClassification() { - return "Class1"; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public String[] getStringAttributes() { - return new String[0]; - } - }; - - LoadableData l2 = new LoadableData() { - @Override - public double[] getAttributes() { - return new double[]{2.0}; - } - - @Override - public String getClassification() { - return "Class2"; - } - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public String[] getStringAttributes() { - return new String[0]; - } - }; - - Exception exception = assertThrows( - ArrayIndexOutOfBoundsException.class, - () -> distanceManhattanNormalisee.distance(l1, l2) - ); - - assertEquals("Index 1 out of bounds for length 1", exception.getMessage()); - } } diff --git a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanTest.java b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanTest.java index 3feeeb3..2ae7ad8 100644 --- a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanTest.java +++ b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanTest.java @@ -2,464 +2,47 @@ package fr.univlille.sae.classification.knn.distance; import static org.junit.jupiter.api.Assertions.*; +import com.opencsv.exceptions.CsvRequiredFieldEmptyException; +import fr.univlille.sae.classification.knn.MethodKNN; +import fr.univlille.sae.classification.model.ClassificationModel; +import fr.univlille.sae.classification.model.Iris; import javafx.scene.paint.Color; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import fr.univlille.sae.classification.model.LoadableData; +import java.io.File; import java.util.Map; public class DistanceManhattanTest { - @Test - public void testDistanceMatchingAttributes() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{2.0, 3.0, 6.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{5.0, 8.0, 3.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - DistanceManhattan distance = new DistanceManhattan(); - double result = distance.distance(data1, data2); - assertEquals(11.0, result, 0.0001); - } - - @Test - public void testDistanceWithZeros() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{0.0, 0.0, 0.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{0.0, 0.0, 0.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - DistanceManhattan distance = new DistanceManhattan(); - double result = distance.distance(data1, data2); - assertEquals(0.0, result, 0.0001); - } - - @Test - public void testDistanceWithNegativeValues() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } + private ClassificationModel model; + private DistanceManhattan distance; + private String path = System.getProperty("user.dir") + File.separator + "res" + File.separator; - @Override - public int getClassificationType() { - return 0; - } + @BeforeEach + public void initialize() throws CsvRequiredFieldEmptyException { - @Override - public void setClassification(String classification) { + model = ClassificationModel.getClassificationModel(); + distance = new DistanceManhattan(); - } + model.setDistance(distance); + model.loadData(new File(path + "data/iris.csv")); - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{-2.0, -3.0, -6.0}; - } - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{2.0, 3.0, 6.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A", "B"}; - } - }; - - DistanceManhattan distance = new DistanceManhattan(); - double result = distance.distance(data1, data2); - assertEquals(22.0, result, 0.0001); - } - - @Test - public void testDistanceWithDifferentAttributeLengths() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - @Override - public double[] getAttributes() { - return new double[]{1.0, 2.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A"}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{3.0}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{"A"}; - } - }; - - DistanceManhattan distance = new DistanceManhattan(); - assertThrows(ArrayIndexOutOfBoundsException.class, () -> distance.distance(data1, data2)); + MethodKNN.updateModel(model.getDatas()); } @Test - public void testDistanceEmptyAttributes() { - LoadableData data1 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } - - @Override - public double[] getAttributes() { - return new double[]{}; - } - - @Override - public String[] getStringAttributes() { - return new String[]{}; - } - }; - - LoadableData data2 = new LoadableData() { - @Override - public String getClassification() { - return ""; - } - - @Override - public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException { - - } - - @Override - public Map<String, Object> getClassifiedAttributes() { - return Map.of(); - } - - @Override - public int getClassificationType() { - return 0; - } - - @Override - public void setClassification(String classification) { - - } - - @Override - public Map<String, Object> getAttributesNames() { - return null; - } + public void test_distance_est_correcte() { - @Override - public double[] getAttributes() { - return new double[]{}; - } + Iris iris = new Iris(1.0, 1.0, 1.0,1.0); + Iris iris2 = new Iris(1.0, 1.0, 1.0,1.0); + assertEquals(0, distance.distance(iris, iris2), 0.001); - @Override - public String[] getStringAttributes() { - return new String[]{}; - } - }; + Iris iris3 = new Iris(2.0, 2.0, 2.0, 2.0); + assertEquals(4.0, distance.distance(iris, iris3), 0.01); - DistanceManhattan distance = new DistanceManhattan(); - double result = distance.distance(data1, data2); - assertEquals(0.0, result, 0.0001); } } \ No newline at end of file diff --git a/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java b/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java index 78f16ad..e572d2e 100644 --- a/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java +++ b/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java @@ -1,6 +1,7 @@ package fr.univlille.sae.classification.model; import com.opencsv.exceptions.CsvBadConverterException; +import com.opencsv.exceptions.CsvDataTypeMismatchException; import com.opencsv.exceptions.CsvRequiredFieldEmptyException; import fr.univlille.sae.classification.knn.DataComparator; import fr.univlille.sae.classification.knn.distance.DistanceEuclidienne; @@ -54,7 +55,7 @@ class ClassificationModelTest { "4.9,3.2,2.1,0.4,\"Setosa\"\n"; Files.write(Paths.get(errorCsv.getAbsolutePath()), errorCsvTest.getBytes()); - + model.setType(DataType.IRIS); } @Test @@ -101,23 +102,19 @@ class ClassificationModelTest { model.loadData(errorCsv); }); - assertTrue(e.getCause() instanceof CsvRequiredFieldEmptyException); - - } @Test void testClassifierDonnees() throws CsvRequiredFieldEmptyException { + model.loadData(csvTemp); model.ajouterDonnee(5.1, 3.5, 1.4, 0.2); model.setK(3); model.classifierDonnees(); - - model.ajouterDonnee(4.9, 3.0, 1.4, 0.2); assertEquals(true, model.getDataToClass().get(model.getDataToClass().keySet().toArray()[0])); - assertEquals(false, model.getDataToClass().get(model.getDataToClass().keySet().toArray()[1])); + } @Test @@ -138,7 +135,6 @@ class ClassificationModelTest { @Test public void test_changing_k() { // verifie que le k par default est bien 1 - assertEquals(1, model.getK()); model.setK(3); model.setKOptimal(6); -- GitLab