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; 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.model.LoadableData;
import fr.univlille.sae.classification.knn.MethodKNN; import fr.univlille.sae.classification.knn.MethodKNN;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Map; import java.util.Map;
public class DistanceManhattanNormaliseeTest { import static org.junit.jupiter.api.Assertions.*;
class DistanceManhattanNormaliseeTest {
private DistanceManhattanNormalisee distanceManhattan; private DistanceManhattanNormalisee distanceManhattanNormalisee;
@BeforeEach @BeforeEach
public void setUp() { void setUp() {
// Initialisation de l'objet DistanceManhattanNormalisee avant chaque test distanceManhattanNormalisee = new DistanceManhattanNormalisee();
distanceManhattan = new DistanceManhattanNormalisee();
// Définition des valeurs de normalisation dans MethodKNN (à ajuster selon votre logique) // Configurer les valeurs statiques pour la normalisation
MethodKNN.minData = new double[] {0.0, 0.0}; // Valeurs minimales pour les attributs MethodKNN.minData = new double[]{1.0, 2.0, 0.5};
MethodKNN.amplitude = new double[] {1.0, 1.0}; // Amplitude pour la normalisation MethodKNN.amplitude = new double[]{4.0, 3.0, 2.5};
} }
@Test @Test
public void testDistanceSimple() { void testDistance_Calculation() {
// Création de deux objets LoadableData avec des attributs simples LoadableData l1 = new LoadableData() {
LoadableData data1 = new LoadableData() { @Override
public double[] getAttributes() {
return new double[]{2.0, 5.0, 1.0};
}
@Override @Override
public String getClassification() { public String getClassification() {
return null; return "Class1";
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) {
} }
@Override @Override
...@@ -42,25 +44,25 @@ public class DistanceManhattanNormaliseeTest { ...@@ -42,25 +44,25 @@ public class DistanceManhattanNormaliseeTest {
return null; return null;
} }
@Override
public double[] getAttributes() {
return new double[0];
}
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[0]; 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 @Override
public String getClassification() { public String getClassification() {
return null; return "Class2";
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) {
} }
@Override @Override
...@@ -68,39 +70,36 @@ public class DistanceManhattanNormaliseeTest { ...@@ -68,39 +70,36 @@ public class DistanceManhattanNormaliseeTest {
return null; return null;
} }
@Override
public double[] getAttributes() {
return new double[0];
}
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[0]; return new String[0];
} }
}; };
// Calcul de la distance manhattan normalisée double expectedDistance =
double result = distanceManhattan.distance(data1, data2); (Math.abs(2.0 - 4.0) - 1.0) / 4.0 +
(Math.abs(5.0 - 4.0) - 2.0) / 3.0 +
// Calcul attendu : (|1.0 - 3.0| / 1.0) + (|2.0 - 5.0| / 1.0) (Math.abs(1.0 - 2.0) - 0.5) / 2.5;
double expected = (Math.abs(1.0 - 3.0) / 1.0) + (Math.abs(2.0 - 5.0) / 1.0);
// Vérification du résultat assertEquals(expectedDistance, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
assertEquals(expected, result, 0.001);
} }
@Test @Test
public void testDistanceZero() { void testDistance_ZeroDistance() {
// Deux objets avec les mêmes attributs (la distance devrait être 0) MethodKNN.minData = new double[]{0.0, 0.0, 0.0};
LoadableData data1 = new LoadableData() { LoadableData l1 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[]{3.0, 3.0, 3.0};
}
@Override @Override
public String getClassification() { public String getClassification() {
return null; return "Class1";
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) {
} }
@Override @Override
...@@ -108,25 +107,25 @@ public class DistanceManhattanNormaliseeTest { ...@@ -108,25 +107,25 @@ public class DistanceManhattanNormaliseeTest {
return null; return null;
} }
@Override
public double[] getAttributes() {
return new double[0];
}
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[0]; 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 @Override
public String getClassification() { public String getClassification() {
return null; return "Class1";
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) {
} }
@Override @Override
...@@ -134,60 +133,31 @@ public class DistanceManhattanNormaliseeTest { ...@@ -134,60 +133,31 @@ public class DistanceManhattanNormaliseeTest {
return null; return null;
} }
@Override
public double[] getAttributes() {
return new double[0];
}
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[0]; return new String[0];
} }
}; };
// Vérification que la distance est bien 0 assertEquals(0.0, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
double result = distanceManhattan.distance(data1, data2);
assertEquals(0.0, result, 0.001);
} }
@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 @Override
public double[] getAttributes() { public double[] getAttributes() {
return new double[0]; return new double[]{};
} }
@Override
public String[] getStringAttributes() {
return new String[0];
}
};
LoadableData data2 = new LoadableData() {
@Override @Override
public String getClassification() { public String getClassification() {
return null; return "Class1";
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) {
} }
@Override @Override
...@@ -195,38 +165,25 @@ public class DistanceManhattanNormaliseeTest { ...@@ -195,38 +165,25 @@ public class DistanceManhattanNormaliseeTest {
return null; return null;
} }
@Override
public double[] getAttributes() {
return new double[0];
}
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[0]; return new String[0];
} }
}; };
double result = distanceManhattan.distance(data1, data2); LoadableData l2 = new LoadableData() {
@Override
// Calcul de la distance, ici l'effet de normalisation devrait être pris en compte public double[] getAttributes() {
double expected = (Math.abs(Double.MAX_VALUE - Double.MIN_VALUE) / 1.0) + return new double[]{};
(Math.abs(Double.MIN_VALUE - Double.MAX_VALUE) / 1.0); }
assertEquals(expected, result, 0.001);
}
@Test
public void testDistanceAvecDonneesNulles() {
// Test avec des données nulles
LoadableData data1 = new LoadableData() {
@Override @Override
public String getClassification() { public String getClassification() {
return null; return "Class2";
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) {
} }
@Override @Override
...@@ -234,38 +191,30 @@ public class DistanceManhattanNormaliseeTest { ...@@ -234,38 +191,30 @@ public class DistanceManhattanNormaliseeTest {
return null; return null;
} }
@Override
public double[] getAttributes() {
return new double[0];
}
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[0]; return new String[0];
} }
}; };
LoadableData data2 = null;
assertEquals(0.0, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
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
}
} }
@Test @Test
public void testDistanceAvecDonneesVides() { void testDistance_DifferentLengthAttributes() {
// Test avec des données vides (tous les attributs sont 0 ou absents) LoadableData l1 = new LoadableData() {
LoadableData data1 = new LoadableData() { @Override
public double[] getAttributes() {
return new double[]{2.0, 3.0};
}
@Override @Override
public String getClassification() { public String getClassification() {
return null; return "Class1";
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) {
} }
@Override @Override
...@@ -273,25 +222,25 @@ public class DistanceManhattanNormaliseeTest { ...@@ -273,25 +222,25 @@ public class DistanceManhattanNormaliseeTest {
return null; return null;
} }
@Override
public double[] getAttributes() {
return new double[0];
}
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[0]; return new String[0];
} }
}; };
LoadableData data2 = new LoadableData() {
LoadableData l2 = new LoadableData() {
@Override
public double[] getAttributes() {
return new double[]{2.0};
}
@Override @Override
public String getClassification() { public String getClassification() {
return null; return "Class2";
} }
@Override @Override
public void setClassification(String classification) { public void setClassification(String classification) {
} }
@Override @Override
...@@ -299,19 +248,17 @@ public class DistanceManhattanNormaliseeTest { ...@@ -299,19 +248,17 @@ public class DistanceManhattanNormaliseeTest {
return null; return null;
} }
@Override
public double[] getAttributes() {
return new double[0];
}
@Override @Override
public String[] getStringAttributes() { public String[] getStringAttributes() {
return new String[0]; return new String[0];
} }
}; };
// La distance devrait être 0 car il n'y a aucune différence d'attribut Exception exception = assertThrows(
double result = distanceManhattan.distance(data1, data2); ArrayIndexOutOfBoundsException.class,
assertEquals(0.0, result, 0.001); () -> 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