public void testIntersection() { int[] array1 = {1, 2, 3, 4, 5, 6, 7}; int[] array2 = {1, 2, 7, 9, 4}; Constrainer C = new Constrainer("test"); IntSetVar var2 = C.addIntSetVar(array1); IntSetVar var1 = C.addIntSetVar(array2); IntSetVar var3 = var2.intersectionWith(var1); try { C.postConstraint(var3.cardinality().eq(2)); IntSetVarArray array = new IntSetVarArray(C, 2); array.set(var1, 0); array.set(var2, 1); assertTrue(C.execute(new GoalIntSetGenerate(array))); assertTrue(intersectionCardinality(var2.requiredSet(), var1.requiredSet()) == 2); } catch (Failure f) { fail("test failed: " + f); } var1 = C.addIntSetVar(new int[] {1, 2, 3, 4, 5}); var2 = C.addIntSetVar(new int[] {4, 5, 6, 7, 8}); var3 = var2.intersectionWith(var1); try { IntSetVarArray array = new IntSetVarArray(C, 2); array.set(var1, 0); array.set(var2, 1); assertTrue( C.execute(new GoalFastMinimize(new GoalIntSetGenerate(array), var3.cardinality().neg()))); assertTrue(var1.value().contains(new Integer(4))); assertTrue(var1.value().contains(new Integer(5))); assertTrue(var2.value().contains(new Integer(4))); assertTrue(var2.value().contains(new Integer(5))); } catch (Failure f) { fail("test failed: " + f); } }
static void printSet(IntSetVar var, boolean requiredOnly) { System.out.print(var.name()); Iterator iter; if (requiredOnly) { System.out.print(": "); iter = var.requiredSet().iterator(); } else { System.out.print("(possibleSet)" + ": "); iter = var.possibleSet().iterator(); } while (iter.hasNext()) { Integer val = (Integer) iter.next(); System.out.print(names[val.intValue()] + (iter.hasNext() ? ", " : "")); } }
static void checkResults(IntSetVarArray array) { int size = array.size(); for (int i = 0; i < size; i++) { IntSetVar var = array.get(i); Set checkSet = var.requiredSet(); assertTrue(checkSet.size() >= req[i][iNbMembers]); assertTrue(intersectionCardinality(checkSet, Stewards.possibleSet()) >= req[i][iStewards]); assertTrue( intersectionCardinality(checkSet, Hostesses.possibleSet()) >= req[i][iHostesses]); assertTrue(intersectionCardinality(checkSet, French.possibleSet()) >= req[i][iFrench]); assertTrue(intersectionCardinality(checkSet, German.possibleSet()) >= req[i][iGerman]); assertTrue(intersectionCardinality(checkSet, Spanish.possibleSet()) >= req[i][iSpanish]); } for (int i = 0; i < size - 2; i++) { assertTrue( intersectionCardinality(array.get(i).requiredSet(), array.get(i + 1).requiredSet()) == 0); } assertTrue( intersectionCardinality( array.get(size - 2).requiredSet(), array.get(size - 1).requiredSet()) == 0); }