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

Edit tests

parent 7976bb9c
No related branches found
No related tags found
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