Skip to content
Snippets Groups Projects
Commit d403e16a authored by Matias Mennecart's avatar Matias Mennecart
Browse files

Edit tests

parent 7976bb9c
Branches
Tags
No related merge requests found
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));
}
}
......@@ -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);
});
}
}
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());
}
}
......@@ -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
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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment