Files
cartailor/src/fr/test/test.java
2024-12-20 21:01:30 +01:00

336 lines
11 KiB
Java

package src.fr.test;
import java.util.Set;
import java.util.HashSet;
import static org.junit.Assert.assertFalse;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import src.fr.impl.*;
import src.fr.api.*;
public class test {
Category Engine = new CategoryImpl("Engine");
Category Transmission = new CategoryImpl("Transmission");
Category Exterior= new CategoryImpl("Exterior");
Category Interior= new CategoryImpl("Interior");
//PartType
PartType EG100= new PartTypeImpl("EG100", Engine);
PartType EG133= new PartTypeImpl("EG133", Engine);
PartType EG210= new PartTypeImpl("EG210", Engine);
PartType ED110= new PartTypeImpl("ED110", Engine);
PartType ED180= new PartTypeImpl("ED180", Engine);
PartType EH120= new PartTypeImpl("EH120", Engine);
PartType TM5= new PartTypeImpl("TM5", Transmission);
PartType TM6= new PartTypeImpl("TM6", Transmission);
PartType TA5= new PartTypeImpl("TA5", Transmission);
PartType TS6= new PartTypeImpl("TS6", Transmission);
PartType TSF7= new PartTypeImpl("TSF7", Transmission);
PartType TC120= new PartTypeImpl("TC120", Transmission);
PartType XC= new PartTypeImpl("XC", Exterior);
PartType XM= new PartTypeImpl("XM", Exterior);
PartType XS= new PartTypeImpl("XS", Exterior);
PartType IN= new PartTypeImpl("IN", Interior);
PartType IH= new PartTypeImpl("IH", Interior);
PartType IS= new PartTypeImpl("IS", Interior);
CompatibilityManager cm;
@BeforeEach
public void init(){
cm = new CompatibilityManagerImpl();
Set<PartType> EH120Requirement = new HashSet<PartType>();
EH120Requirement.add(TC120);
Set<PartType> TA5Incompatibilities = new HashSet<PartType>();
TA5Incompatibilities.add(EG100);
Set<PartType> TSF7Incompatibilities = new HashSet<PartType>();
TSF7Incompatibilities.add(EG100);
TSF7Incompatibilities.add(EG133);
TSF7Incompatibilities.add(ED110);
Set<PartType> TC120Requirement = new HashSet<PartType>();
TC120Requirement.add(EH120);
Set<PartType> XCIncompatibilities = new HashSet<PartType>();
XCIncompatibilities.add(EG210);
Set<PartType> XMIncompatibilities = new HashSet<PartType>();
XMIncompatibilities.add(EG100);
Set<PartType> XSIncompatibilities = new HashSet<PartType>();
XSIncompatibilities.add(EG100);
Set<PartType> XSRequirement = new HashSet<PartType>();
XSRequirement.add(IS);
Set<PartType> ISIncompatibilities = new HashSet<PartType>();
ISIncompatibilities.add(EG100);
ISIncompatibilities.add(TM5);
Set<PartType> ISRequirement = new HashSet<PartType>();
ISRequirement.add(XS);
cm.addRequirements(EH120, EH120Requirement);
cm.addIncompatibilities(TA5, TA5Incompatibilities);
cm.addIncompatibilities(TSF7, TSF7Incompatibilities);
cm.addRequirements(TC120, TC120Requirement);
cm.addIncompatibilities(XC, XCIncompatibilities);
cm.addIncompatibilities(XM, XMIncompatibilities);
cm.addIncompatibilities(XS, XSIncompatibilities);
cm.addRequirements(XS, XSRequirement);
cm.addIncompatibilities(IS, ISIncompatibilities);
cm.addRequirements(IS, ISRequirement);
}
@Test
public void test_Incompatibilities_Simple_1(){
assertTrue(cm.getIncompatibilities(TA5).contains(EG100));
}
@Test
public void test_multiple_Incompatibilities_Simple_2(){
assertTrue(
cm.getIncompatibilities(TSF7).contains(EG100)&&
cm.getIncompatibilities(TSF7).contains(EG133)&&
cm.getIncompatibilities(TSF7).contains(ED110)
);
}
@Test
public void test_Requirements_3(){
assertTrue(cm.getRequirements(EH120).contains(TC120));
}
/*
* A <-> B
* if A -> B then B -> A
*/
@Test
public void test_Incompatibilities_Complex_4(){
System.out.println("size EG100 incompatibilities : "+cm.getIncompatibilities(EG100).size());
assertTrue(cm.getIncompatibilities(EG100).contains(IS));
assertTrue(cm.getIncompatibilities(EG100).contains(XS));
}
/*
* if A require B
* then A is incompatible with all incompatible of B
*/
@Test
public void test_Require_Incompatibilities_Complex_5(){
assertTrue(cm.getIncompatibilities(XS).contains(EG100));
System.out.println("size XS incompatibilities : " + cm.getIncompatibilities(XS).size());
assertTrue(cm.getIncompatibilities(XS).contains(TM5));
}
/*
* Require Require Require
* if A -> B && B -> C then A -> C
*/
@Test
public void test_Incompatibilities_Complex_7(){
cm.addRequirements(TC120, Set.of(XC));
assertTrue(cm.getRequirements(TC120).contains(XC));
assertTrue(cm.getRequirements(EH120).contains(XC));
cm.removeRequirement(TC120, XC);
}
@Test
public void test_Empty_Requirements_5(){
assertTrue(cm.getRequirements(ED180).isEmpty());
}
@Test
public void test_Remove_and_restore_Incompatibilities_6(){
assertTrue(cm.getIncompatibilities(XM).contains(EG100));
cm.removeIncompatibility(XM, EG100);
assertFalse(cm.getIncompatibilities(XM).contains(EG100));
Set<PartType> setEG100 = new HashSet<PartType>();
setEG100.add(EG100);
cm.addIncompatibilities(XM, setEG100);
assertTrue(cm.getIncompatibilities(XM).contains(EG100));
}
@Test
public void test_Remove_Empty_7(){
assertTrue(cm.getIncompatibilities(EH120).isEmpty());
cm.removeIncompatibility(EH120, EG100);
assertTrue(cm.getIncompatibilities(EH120).isEmpty()); }
@Test
public void test_Remove_and_restore_Requirements_8(){
assertTrue(cm.getRequirements(EH120).contains(TC120));
cm.removeRequirement(EH120, TC120);
assertFalse(cm.getRequirements(EH120).contains(TC120));
Set<PartType> setTC120 = new HashSet<PartType>();
setTC120.add(TC120);
cm.addRequirements(EH120, setTC120);
assertTrue(cm.getRequirements(EH120).contains(TC120));
}
@Test
public void test_remove_incompatibilities_but_no_removable(){
assertTrue(cm.getIncompatibilities(EG100).contains(IS));
cm.removeIncompatibility(EG100, IS);
assertTrue(cm.getIncompatibilities(EG100).contains(IS));
}
@Test
public void test_Add_and_restore_Incompatibilities_9(){
assertTrue(cm.getIncompatibilities(TSF7).contains(EG100));
assertTrue(cm.getIncompatibilities(TSF7).contains(EG133));
assertTrue(cm.getIncompatibilities(TSF7).contains(ED110));
cm.removeIncompatibility(TSF7, EG100);
assertFalse(cm.getIncompatibilities(TSF7).contains(EG100));
assertTrue(cm.getIncompatibilities(TSF7).contains(EG133));
assertTrue(cm.getIncompatibilities(TSF7).contains(ED110));
Set<PartType> setEG100 = new HashSet<PartType>();
setEG100.add(EG100);
cm.addIncompatibilities(TSF7, setEG100);
assertTrue(cm.getIncompatibilities(TSF7).contains(EG100));
assertTrue(cm.getIncompatibilities(TSF7).contains(EG133));
assertTrue(cm.getIncompatibilities(TSF7).contains(ED110));
}
@Test
public void test_contradiction(){
CompatibilityManager cm2 = new CompatibilityManagerImpl();
PartType eg= new PartTypeImpl("Eg", Engine);
PartType tr= new PartTypeImpl("Tr", Transmission);
Set<PartType> egIncompatibilities = new HashSet<PartType>();
egIncompatibilities.add(tr);
cm.addIncompatibilities(eg, egIncompatibilities);
Set<PartType> efRequirement = new HashSet<PartType>();
efRequirement.add(eg);
cm.addRequirements(tr, efRequirement);
assertFalse(cm.getIncompatibilities(eg).contains(eg));
assertTrue(cm.getRequirements(tr).contains(eg));
assertTrue(cm.getIncompatibilities(tr).contains(tr)); //tr Require eg, eg Incompatible tr, -> eg Incompatible eg
}
@Test
public void test_isComplete_empty_config(){
ConfigurationImpl config1 = new ConfigurationImpl(cm);
assertFalse(config1.isComplete());
}
@Test
public void test_isComplete(){
ConfigurationImpl config1 = new ConfigurationImpl(cm);
config1.selectPart(EG210);
config1.selectPart(TM5);
config1.selectPart(XS);
config1.selectPart(IS);
assertTrue(config1.isComplete());
}
@Test
public void test_isNotComplete(){
ConfigurationImpl config1 = new ConfigurationImpl(cm);
config1.selectPart(EG210);
config1.selectPart(TM5);
config1.selectPart(XS);
assertFalse(config1.isComplete());
}
@Test
public void test_isNotValide_empty_config(){
ConfigurationImpl config1 = new ConfigurationImpl(cm);
assertFalse(config1.isValid());
}
@Test
public void test_isNotValide_not_complete(){
ConfigurationImpl config1 = new ConfigurationImpl(cm);
config1.selectPart(EG210);
config1.selectPart(TM5);
config1.selectPart(XS);
assertFalse(config1.isValid());
}
@Test
public void test_isValid_empty_cm(){
CompatibilityManager cm2 = new CompatibilityManagerImpl();
ConfigurationImpl config1 = new ConfigurationImpl(cm2);
config1.selectPart(EG210);
config1.selectPart(TM5);
config1.selectPart(XS);
config1.selectPart(IS);
assertTrue(config1.isValid());
}
@Test
public void test_isValid(){
ConfigurationImpl config1 = new ConfigurationImpl(cm);
config1.selectPart(EG210);
config1.selectPart(TS6);
config1.selectPart(XS);
config1.selectPart(IS);
assertTrue(config1.isValid());
}
@Test
public void test_isNotValid(){
ConfigurationImpl config1 = new ConfigurationImpl(cm);
config1.selectPart(EG210);
config1.selectPart(TM5);
config1.selectPart(XS);
config1.selectPart(IH);
assertFalse(config1.isValid());
}
@Test
public void test_contradiction_config(){
CompatibilityManager cm2 = new CompatibilityManagerImpl();
PartType eg= new PartTypeImpl("Eg", Engine);
PartType tr= new PartTypeImpl("Tr", Transmission);
PartType ex= new PartTypeImpl("Ex", Exterior);
PartType in= new PartTypeImpl("In", Interior);
Set<PartType> egIncompatibilities = new HashSet<PartType>();
egIncompatibilities.add(tr);
cm.addIncompatibilities(eg, egIncompatibilities);
Set<PartType> efRequirement = new HashSet<PartType>();
efRequirement.add(eg);
cm.addRequirements(eg, efRequirement);
ConfigurationImpl config1 = new ConfigurationImpl(cm);
config1.selectPart(eg);
config1.selectPart(tr);
config1.selectPart(ex);
config1.selectPart(in);
assertFalse(config1.isValid());
}
}