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 EH120Requirement = new HashSet(); EH120Requirement.add(TC120); Set TA5Incompatibilities = new HashSet(); TA5Incompatibilities.add(EG100); Set TSF7Incompatibilities = new HashSet(); TSF7Incompatibilities.add(EG100); TSF7Incompatibilities.add(EG133); TSF7Incompatibilities.add(ED110); Set TC120Requirement = new HashSet(); TC120Requirement.add(EH120); Set XCIncompatibilities = new HashSet(); XCIncompatibilities.add(EG210); Set XMIncompatibilities = new HashSet(); XMIncompatibilities.add(EG100); Set XSIncompatibilities = new HashSet(); XSIncompatibilities.add(EG100); Set XSRequirement = new HashSet(); XSRequirement.add(IS); Set ISIncompatibilities = new HashSet(); ISIncompatibilities.add(EG100); ISIncompatibilities.add(TM5); Set ISRequirement = new HashSet(); 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 setEG100 = new HashSet(); 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 setTC120 = new HashSet(); 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 setEG100 = new HashSet(); 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 egIncompatibilities = new HashSet(); egIncompatibilities.add(tr); cm.addIncompatibilities(eg, egIncompatibilities); Set efRequirement = new HashSet(); 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 egIncompatibilities = new HashSet(); egIncompatibilities.add(tr); cm.addIncompatibilities(eg, egIncompatibilities); Set efRequirement = new HashSet(); 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()); } }