package KomplexeMenge; import static org.junit.Assert.*; import java.util.Vector; import org.junit.Test; import de.dhbwstuttgart.typeinference.EinzelElement; import de.dhbwstuttgart.typeinference.KomplexeMenge; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.OderMenge; import de.dhbwstuttgart.typeinference.UndMenge; class TestKlasse { static int identifier = 0; public String name; int id; TestKlasse(String name){ this.name = name; id = 0; } public String toString(){ return name+" #"+id; } } class TestKlasseOderMenge extends OderMenge{ Menge set = new Menge<>(); @Override public Menge> getSet() { return set; } public void addItem(TestKlasse string) { TestUndMenge toAdd = new TestKlasseUndMenge(); toAdd.addItem(string); set.add(toAdd); } public void addItems(TestKlasseUndMenge undMenge) { set.add(undMenge); } } class TestKlasseUndMenge extends UndMenge{ Menge> set = new Menge<>(); @Override public Menge> getSet() { return set; } public void addItem(TestKlasse string) { set.add(new EinzelElement(string)); } public void addItems(KomplexeMenge oderMenge) { set.add(oderMenge); } } public class KeineDoppeltenVerweise { @Test public void test() { OderMenge oM1 = new TestOderMenge(); OderMenge oM2 = new OderMenge<>(); UndMenge oM3 = new UndMenge<>(); oM1.addItem(new TestKlasse("Menge 1, Item 1")); oM1.addItem(new TestKlasse("Menge 1, Item 2")); oM2.addItem(new TestKlasse("Menge 2, Item 1")); oM2.addItem(new TestKlasse("Menge 2, Item 2")); oM3.addItems(oM1); oM3.addItems(oM2); Menge> cP = oM3.cartesianProduct(); System.out.println(cP); cP.firstElement().firstElement().name="neu"; System.out.println(cP); check(cP); } private void check(Menge> cP){ Menge allElements = new Menge<>(); for(Vector v : cP)for(A i : v){ Object o = containsRef(allElements, i); if(o!=null){ fail("Ein Verweis ist im Karthesischen Produkt doppelt vorhanden: "+o+" == "+i); }else{ allElements.add(i); } } } private Object containsRef(Menge v, Object i){ for(Object o : v){ if(i == o)return o; } return null; } }