public static PrimarySpiderDiagram getVennABCDiagramWithPartlyShadedBAndSpiderInZoneBC_A() { PrimarySpiderDiagram modelDiagram = getVennABCDiagramWithPartlyShadedB(); HashMap<String, Region> habitats = new HashMap<>(); habitats.put("s", new Region(Zone.fromInContours("B", "C").withOutContours("A"))); return SpiderDiagrams.createPrimarySD( asList("s"), habitats, modelDiagram.getShadedZones(), modelDiagram.getPresentZones()); }
@Override CompoundSpiderDiagram createSD( Map<String, Entry<Object, CommonTree>> attributes, CommonTree mainNode) throws ReadingException { String operator = (String) attributes.remove(SDTextOperatorAttribute).getKey(); ArrayList<SpiderDiagram> operands = new ArrayList<>(); int i = 1; Entry<Object, CommonTree> curSD, lastSD = null; while ((curSD = attributes.remove(CompoundSpiderDiagram.SDTextArgAttribute + i++)) != null && curSD.getKey() instanceof SpiderDiagram) { operands.add((SpiderDiagram) curSD.getKey()); lastSD = curSD; } if (curSD != null) { throw new ReadingException( i18n("GERR_ILLEGAL_STATE"), (CommonTree) curSD.getValue().getChild(0)); } if (!attributes.isEmpty()) { throw new ReadingException( i18n("ERR_TRANSLATE_UNKNOWN_ATTRIBUTES", attributes.keySet()), (CommonTree) attributes.values().iterator().next().getValue().getChild(0)); } try { return SpiderDiagrams.createCompoundSD(operator, operands, false); } catch (Exception e) { throw new ReadingException( e.getLocalizedMessage(), lastSD == null ? mainNode : (CommonTree) lastSD.getValue().getChild(0)); } }
@Test public void areContoursDisjoint_should_return_false_when_not_all_shared_zones_are_shaded() { Set<Zone> present = new HashSet<>(); present.add(Zone.fromOutContours("A", "B", "C", "D")); ContourRelations contourRelations = new ContourRelations( SpiderDiagrams.createPrimarySD( null, null, getZonesInsideAllContours(POWER_REGION_ABCD, "A", "B", "C"), present)); assertFalse(contourRelations.areContoursDisjoint("A", "D")); }
@Override @SuppressWarnings("unchecked") PrimarySpiderDiagram createSD( Map<String, Entry<Object, CommonTree>> attributes, CommonTree mainNode) throws ReadingException { Entry<Object, CommonTree> presentZonesAttribute = attributes.get(SDTextPresentZonesAttribute); return SpiderDiagrams.createPrimarySDNoCopy( (Collection<String>) attributes.get(SDTextSpidersAttribute).getKey(), (Map<String, Region>) attributes.get(SDTextHabitatsAttribute).getKey(), (Collection<Zone>) attributes.get(SDTextShadedZonesAttribute).getKey(), presentZonesAttribute == null ? null : (Collection<Zone>) presentZonesAttribute.getKey()); }
@Test public void areContoursDisjoint_should_return_true_when_the_spiders_are_not_in_the_shared_shaded_zones() { TreeMap<String, Region> habitats = new TreeMap<>(); String spider = "s"; habitats.put(spider, new Region(Zone.fromInContours("A", "C").withOutContours("B", "D"))); Set<Zone> present = new HashSet<>(); present.add(Zone.fromOutContours("A", "B", "C", "D")); PrimarySpiderDiagram diagramWithASpiderInTheIntersection = SpiderDiagrams.createPrimarySD( asList(spider), habitats, getZonesInsideAllContours(POWER_REGION_ABCD, "A", "D"), present); ContourRelations contourRelations = new ContourRelations(diagramWithASpiderInTheIntersection); assertTrue(contourRelations.areContoursDisjoint("A", "D")); }
public static PrimarySpiderDiagram getVennABCDiagramWithShadedBC() { ArrayList<Zone> zonesBC = Zones.getZonesInsideAllContours(POWER_REGION_ABC, "B", "C"); return SpiderDiagrams.createPrimarySD(null, null, zonesBC, POWER_REGION_ABC); }
public class ContourRelationsTest { private final Zone zoneAB = Zone.fromInContours("A", "B"); private final Zone zoneB_A = Zone.fromInContours("B").withOutContours("A"); private final ArrayList<Zone> powerRegionAB = allZonesForContours("A", "B"); private final PrimarySpiderDiagram diagramWithContoursAB = SpiderDiagrams.createPrimarySD(null, null, null, powerRegionAB); private final PrimarySpiderDiagram diagramWithShadedB = SpiderDiagrams.createPrimarySD(null, null, asList(zoneB_A, zoneAB), powerRegionAB); private final PrimarySpiderDiagram diagramWithShadedIntersection = SpiderDiagrams.createPrimarySD(null, null, asList(zoneAB), powerRegionAB); @Test public void areContoursDisjoint_should_return_false_in_a_Venn_diagram() { ContourRelations contourRelations = new ContourRelations(diagramWithContoursAB); assertFalse(contourRelations.areContoursDisjoint("A", "B")); } @Test(expected = IllegalArgumentException.class) public void areContoursDisjoint_should_throw_an_exception_if_any_of_the_contours_is_not_in_the_diagram() { new ContourRelations(diagramWithContoursAB).areContoursDisjoint("C", "D"); } @Test public void areContoursDisjoint_should_return_true_when_zone_AsubB_is_shaded() { ContourRelations contourRelations = new ContourRelations(diagramWithShadedIntersection); assertTrue(contourRelations.areContoursDisjoint("A", "B")); } @Test public void areContoursDisjoint_should_return_false_when_not_all_shared_zones_are_shaded() { Set<Zone> present = new HashSet<>(); present.add(Zone.fromOutContours("A", "B", "C", "D")); ContourRelations contourRelations = new ContourRelations( SpiderDiagrams.createPrimarySD( null, null, getZonesInsideAllContours(POWER_REGION_ABCD, "A", "B", "C"), present)); assertFalse(contourRelations.areContoursDisjoint("A", "D")); } @Test public void areContoursDisjoint_should_return_true_when_there_are_multiple_zones_and_all_shared_zones_are_shaded() { Set<Zone> present = new HashSet<>(); present.add(Zone.fromOutContours("A", "B", "C", "D")); ContourRelations contourRelations = new ContourRelations( SpiderDiagrams.createPrimarySD( null, null, getZonesInsideAllContours(POWER_REGION_ABCD, "A", "D"), present)); assertTrue(contourRelations.areContoursDisjoint("A", "D")); } @Test public void areContoursDisjoint_should_return_false_when_there_are_any_spiders_in_the_shared_shaded_zones() { TreeMap<String, Region> habitats = new TreeMap<>(); String spider = "s"; habitats.put(spider, new Region(Zone.fromInContours("A", "C", "D").withOutContours("B"))); Set<Zone> present = new HashSet<>(); present.add(Zone.fromOutContours("A", "B", "C", "D")); PrimarySpiderDiagram diagramWithASpiderInTheIntersection = SpiderDiagrams.createPrimarySD( asList(spider), habitats, getZonesInsideAllContours(POWER_REGION_ABCD, "A", "D"), present); ContourRelations contourRelations = new ContourRelations(diagramWithASpiderInTheIntersection); assertFalse(contourRelations.areContoursDisjoint("A", "D")); } @Test public void areContoursDisjoint_should_return_true_when_the_spiders_are_not_in_the_shared_shaded_zones() { TreeMap<String, Region> habitats = new TreeMap<>(); String spider = "s"; habitats.put(spider, new Region(Zone.fromInContours("A", "C").withOutContours("B", "D"))); Set<Zone> present = new HashSet<>(); present.add(Zone.fromOutContours("A", "B", "C", "D")); PrimarySpiderDiagram diagramWithASpiderInTheIntersection = SpiderDiagrams.createPrimarySD( asList(spider), habitats, getZonesInsideAllContours(POWER_REGION_ABCD, "A", "D"), present); ContourRelations contourRelations = new ContourRelations(diagramWithASpiderInTheIntersection); assertTrue(contourRelations.areContoursDisjoint("A", "D")); } @Test public void contourContainsAnother_should_return_false_for_a_Venn_diagram() { ContourRelations contourRelations = new ContourRelations(diagramWithContoursAB); assertFalse(contourRelations.contourContainsAnother("A", "B")); } @Test(expected = IllegalArgumentException.class) public void contourContainsAnother_should_throw_an_exception_when_the_contours_are_not_contained_in_the_diagram() { ContourRelations diagramContourRelations = new ContourRelations(diagramWithContoursAB); diagramContourRelations.contourContainsAnother("A", "C"); } @Test public void contourContainsAnother_should_return_true_when_the_other_contour_is_entirely_shaded() { ContourRelations diagramContourRelations = new ContourRelations(diagramWithShadedB); assertTrue(diagramContourRelations.contourContainsAnother("A", "B")); } @Test public void contourContainsAnother_should_return_false_when_the_other_contour_is_not_entirely_shaded() { ContourRelations diagramContourRelations = new ContourRelations(getVennABCDiagramWithShadedBC()); assertFalse(diagramContourRelations.contourContainsAnother("A", "B")); } @Test public void contourContainsAnother_should_return_false_when_the_other_contour_is_not_shaded() { ContourRelations diagramContourRelations = new ContourRelations(diagramWithContoursAB); assertFalse(diagramContourRelations.contourContainsAnother("A", "B")); } @Test public void contourContainsAnother_should_return_true_when_the_only_unshaded_part_of_B_is_in_A() { ContourRelations diagramContourRelations = new ContourRelations(getVennABCDiagramWithPartlyShadedB()); assertTrue(diagramContourRelations.contourContainsAnother("A", "B")); } @Test public void contourContainsAnother_should_return_false_when_the_only_unshaded_part_of_B_is_in_A_but_there_is_a_spider_in_B() { ContourRelations diagramContourRelations = new ContourRelations(getVennABCDiagramWithPartlyShadedBAndSpiderInZoneBC_A()); assertFalse(diagramContourRelations.contourContainsAnother("A", "B")); } public static PrimarySpiderDiagram getVennABCDiagramWithPartlyShadedB() { ArrayList<Zone> zonesBC = Zones.getZonesInsideAllContours(POWER_REGION_ABC, "B"); zonesBC.remove(Zone.fromInContours("A", "B", "C")); return SpiderDiagrams.createPrimarySD(null, null, zonesBC, POWER_REGION_ABC); } public static PrimarySpiderDiagram getVennABCDiagramWithShadedBC() { ArrayList<Zone> zonesBC = Zones.getZonesInsideAllContours(POWER_REGION_ABC, "B", "C"); return SpiderDiagrams.createPrimarySD(null, null, zonesBC, POWER_REGION_ABC); } public static PrimarySpiderDiagram getVennABCDiagramWithPartlyShadedBAndSpiderInZoneBC_A() { PrimarySpiderDiagram modelDiagram = getVennABCDiagramWithPartlyShadedB(); HashMap<String, Region> habitats = new HashMap<>(); habitats.put("s", new Region(Zone.fromInContours("B", "C").withOutContours("A"))); return SpiderDiagrams.createPrimarySD( asList("s"), habitats, modelDiagram.getShadedZones(), modelDiagram.getPresentZones()); } }
public static PrimarySpiderDiagram getVennABCDiagramWithPartlyShadedB() { ArrayList<Zone> zonesBC = Zones.getZonesInsideAllContours(POWER_REGION_ABC, "B"); zonesBC.remove(Zone.fromInContours("A", "B", "C")); return SpiderDiagrams.createPrimarySD(null, null, zonesBC, POWER_REGION_ABC); }