Skip to content
Snippets Groups Projects
Commit 0abb3d7d authored by Maxence Antoine's avatar Maxence Antoine
Browse files

Dernier test passe

parent de7e7940
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 org.junit.jupiter.api.Test;
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.util.Map;
public class DistanceManhattanNormaliseeTest {
import static org.junit.jupiter.api.Assertions.*;
class DistanceManhattanNormaliseeTest {
private DistanceManhattanNormalisee distanceManhattan;
private DistanceManhattanNormalisee distanceManhattanNormalisee;
@BeforeEach
public void setUp() {
// Initialisation de l'objet DistanceManhattanNormalisee avant chaque test
distanceManhattan = new DistanceManhattanNormalisee();
void setUp() {
distanceManhattanNormalisee = new DistanceManhattanNormalisee();
// Définition des valeurs de normalisation dans MethodKNN (à ajuster selon votre logique)
MethodKNN.minData = new double[] {0.0, 0.0}; // Valeurs minimales pour les attributs
MethodKNN.amplitude = new double[] {1.0, 1.0}; // Amplitude pour la normalisation
// 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
public void testDistanceSimple() {
// Création de deux objets LoadableData avec des attributs simples
LoadableData data1 = new LoadableData() {
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 null;
return "Class1";
}
@Override
public void setClassification(String classification) {
}
@Override
......@@ -42,25 +44,25 @@ public class DistanceManhattanNormaliseeTest {
return null;
}
@Override
public double[] getAttributes() {
return new double[0];
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
LoadableData data2 = new LoadableData() {
LoadableData l2 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[]{4.0, 4.0, 2.0};
}
@Override
public String getClassification() {
return null;
return "Class2";
}
@Override
public void setClassification(String classification) {
}
@Override
......@@ -68,39 +70,36 @@ public class DistanceManhattanNormaliseeTest {
return null;
}
@Override
public double[] getAttributes() {
return new double[0];
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
// Calcul de la distance manhattan normalisée
double result = distanceManhattan.distance(data1, data2);
// Calcul attendu : (|1.0 - 3.0| / 1.0) + (|2.0 - 5.0| / 1.0)
double expected = (Math.abs(1.0 - 3.0) / 1.0) + (Math.abs(2.0 - 5.0) / 1.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;
// Vérification du résultat
assertEquals(expected, result, 0.001);
assertEquals(expectedDistance, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
}
@Test
public void testDistanceZero() {
// Deux objets avec les mêmes attributs (la distance devrait être 0)
LoadableData data1 = new LoadableData() {
void testDistance_ZeroDistance() {
MethodKNN.minData = new double[]{0.0, 0.0, 0.0};
LoadableData l1 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[]{3.0, 3.0, 3.0};
}
@Override
public String getClassification() {
return null;
return "Class1";
}
@Override
public void setClassification(String classification) {
}
@Override
......@@ -108,25 +107,25 @@ public class DistanceManhattanNormaliseeTest {
return null;
}
@Override
public double[] getAttributes() {
return new double[0];
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
LoadableData data2 = new LoadableData() {
LoadableData l2 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[]{3.0, 3.0, 3.0};
}
@Override
public String getClassification() {
return null;
return "Class1";
}
@Override
public void setClassification(String classification) {
}
@Override
......@@ -134,60 +133,31 @@ public class DistanceManhattanNormaliseeTest {
return null;
}
@Override
public double[] getAttributes() {
return new double[0];
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
// Vérification que la distance est bien 0
double result = distanceManhattan.distance(data1, data2);
assertEquals(0.0, result, 0.001);
assertEquals(0.0, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
}
@Test
public void testDistanceAvecValeursExtremes() {
// Test avec des valeurs maximales ou minimales (hypothétiques dans ce cas)
LoadableData data1 = new LoadableData() {
@Override
public String getClassification() {
return null;
}
@Override
public void setClassification(String classification) {
}
@Override
public Map<String, Object> getAttributesNames() {
return null;
}
@Test
void testDistance_EmptyAttributes() {
LoadableData l1 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[0];
return new double[]{};
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
LoadableData data2 = new LoadableData() {
@Override
public String getClassification() {
return null;
return "Class1";
}
@Override
public void setClassification(String classification) {
}
@Override
......@@ -195,38 +165,25 @@ public class DistanceManhattanNormaliseeTest {
return null;
}
@Override
public double[] getAttributes() {
return new double[0];
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
double result = distanceManhattan.distance(data1, data2);
// Calcul de la distance, ici l'effet de normalisation devrait être pris en compte
double expected = (Math.abs(Double.MAX_VALUE - Double.MIN_VALUE) / 1.0) +
(Math.abs(Double.MIN_VALUE - Double.MAX_VALUE) / 1.0);
assertEquals(expected, result, 0.001);
}
LoadableData l2 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[]{};
}
@Test
public void testDistanceAvecDonneesNulles() {
// Test avec des données nulles
LoadableData data1 = new LoadableData() {
@Override
public String getClassification() {
return null;
return "Class2";
}
@Override
public void setClassification(String classification) {
}
@Override
......@@ -234,38 +191,30 @@ public class DistanceManhattanNormaliseeTest {
return null;
}
@Override
public double[] getAttributes() {
return new double[0];
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
LoadableData data2 = null;
try {
distanceManhattan.distance(data1, data2);
fail("La méthode devrait lever une exception quand l'un des objets est nul");
} catch (NullPointerException e) {
// Vérification qu'une exception est lancée
}
assertEquals(0.0, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
}
@Test
public void testDistanceAvecDonneesVides() {
// Test avec des données vides (tous les attributs sont 0 ou absents)
LoadableData data1 = new LoadableData() {
void testDistance_DifferentLengthAttributes() {
LoadableData l1 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[]{2.0, 3.0};
}
@Override
public String getClassification() {
return null;
return "Class1";
}
@Override
public void setClassification(String classification) {
}
@Override
......@@ -273,25 +222,25 @@ public class DistanceManhattanNormaliseeTest {
return null;
}
@Override
public double[] getAttributes() {
return new double[0];
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
LoadableData data2 = new LoadableData() {
LoadableData l2 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[]{2.0};
}
@Override
public String getClassification() {
return null;
return "Class2";
}
@Override
public void setClassification(String classification) {
}
@Override
......@@ -299,19 +248,17 @@ public class DistanceManhattanNormaliseeTest {
return null;
}
@Override
public double[] getAttributes() {
return new double[0];
}
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
// La distance devrait être 0 car il n'y a aucune différence d'attribut
double result = distanceManhattan.distance(data1, data2);
assertEquals(0.0, result, 0.001);
Exception exception = assertThrows(
ArrayIndexOutOfBoundsException.class,
() -> distanceManhattanNormalisee.distance(l1, l2)
);
assertEquals("Index 1 out of bounds for length 1", exception.getMessage());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment