@Test public void recalculate() throws EditStateException, IllegalEditException { // union beed has no source $unionBeed.recalculate(); assertTrue($unionBeed.get().isEmpty()); // create source EditableSetBeed<SetBeed<WellBeanBeed, SetEvent<WellBeanBeed>>> source = new EditableSetBeed<SetBeed<WellBeanBeed, SetEvent<WellBeanBeed>>>($owner); // add source to mean beed $unionBeed.setSource(source); // {} // recalculate (source contains no elements) $unionBeed.recalculate(); assertTrue($unionBeed.get().isEmpty()); SetEdit<SetBeed<WellBeanBeed, SetEvent<WellBeanBeed>>> sourceEdit = new SetEdit<SetBeed<WellBeanBeed, SetEvent<WellBeanBeed>>>(source); sourceEdit.addElementToAdd($setBeed1); sourceEdit.perform(); // recalculate (source contains {1,2}) $unionBeed.recalculate(); assertEquals($unionBeed.get().size(), 2); assertTrue($unionBeed.get().contains($well1)); assertTrue($unionBeed.get().contains($well2)); // recalculate (setBeed contains beed 1) $unionBeed.recalculate(); assertEquals($unionBeed.get().size(), 2); assertTrue($unionBeed.get().contains($well1)); assertTrue($unionBeed.get().contains($well2)); // add beed sourceEdit = new SetEdit<SetBeed<WellBeanBeed, SetEvent<WellBeanBeed>>>(source); sourceEdit.addElementToAdd($setBeed2); sourceEdit.perform(); // recalculate (setBeed contains {1,2} and {3}) $unionBeed.recalculate(); assertEquals($unionBeed.get().size(), 3); assertTrue($unionBeed.get().contains($well1)); assertTrue($unionBeed.get().contains($well2)); assertTrue($unionBeed.get().contains($well3)); // recalculate (setBeed contains {1,2} and {3}) assertEquals($unionBeed.get().size(), 3); assertTrue($unionBeed.get().contains($well1)); assertTrue($unionBeed.get().contains($well2)); assertTrue($unionBeed.get().contains($well3)); // add beed sourceEdit = new SetEdit<SetBeed<WellBeanBeed, SetEvent<WellBeanBeed>>>(source); sourceEdit.addElementToAdd($setBeed3); sourceEdit.perform(); // recalculate (setBeed contains {1,2} and {3} and {0,1,3}) $unionBeed.recalculate(); assertEquals($unionBeed.get().size(), 4); assertTrue($unionBeed.get().contains($well0)); assertTrue($unionBeed.get().contains($well1)); assertTrue($unionBeed.get().contains($well2)); assertTrue($unionBeed.get().contains($well3)); }