/** * Helper method that checks if the number of results and the number of expected results are the * same and if the expected results are contained in the results. */ private boolean contains(Object[] results, Object[] expectedResult) { for (Object result : results) { assertThat(result, instanceOf(Object[].class)); if (checkArraysAreEqual((Object[]) result, expectedResult)) { return true; } } return false; }
private void testVisitor( String aggregateAttribute, String aggregateVisitor, String[] groupByAttributes, Object[][] expectedResults) throws Exception { GroupByVisitor visitor = executeVisitor( featureCollection, aggregateAttribute, aggregateVisitor, groupByAttributes); checkResults(visitor.getResult(), expectedResults); }
private void testVisitor( String aggregateAttribute, String aggregateVisitor, String firstGroupByAttribute, String secondGroupByAttribute, Object[][] expectedResults) throws Exception { testVisitor( aggregateAttribute, aggregateVisitor, new String[] {firstGroupByAttribute, secondGroupByAttribute}, expectedResults); }
/** * Helper method that construct the group by visitor and visit the given feature collection. The * visitor result is also checked against the expected result. */ private GroupByVisitor executeVisitor( FeatureCollection featureCollection, String aggregateAttribute, String aggregateVisitor, String[] groupByAttributes) throws Exception { GroupByVisitor visitor = buildVisitor(aggregateAttribute, aggregateVisitor, groupByAttributes); featureCollection.accepts(visitor, new NullProgressListener()); return visitor; }
/** Helper method the checks if the calculation result contains the expected result. */ private void checkResults(CalcResult calcResult, Object[][] expectedResults) { assertThat(calcResult, notNullValue()); // check that the array conversion looks sane Object[] results = calcResult.toArray(); assertThat(results.length, is(expectedResults.length)); // check that map conversion looks sane Map resultMap = calcResult.toMap(); assertThat(resultMap.entrySet().size(), is(expectedResults.length)); // check that the obtained values correspond to the expected ones for (Object[] expectedResult : expectedResults) { assertThat(contains(results, expectedResult), is(true)); } }
@Test public void testFeatureAttributeVisitor() { GroupByVisitor visitor = buildVisitor("energy_consumption", "Average", new String[] {"building_type"}); List<Expression> expressions = visitor.getExpressions(); Set<String> names = new HashSet<>(); for (Expression expression : expressions) { PropertyName pn = (PropertyName) expression; names.add(pn.getPropertyName()); } assertEquals(2, names.size()); assertTrue(names.contains("energy_consumption")); assertTrue(names.contains("building_type")); }
private void testVisitor( String aggregateAttribute, String aggregateVisitor, String groupByAttribute, Object[][] expectedResults) throws Exception { testVisitor( aggregateAttribute, aggregateVisitor, new String[] {groupByAttribute}, expectedResults); }
executeVisitor( featureCollectionA, "energy_consumption", "Average", new String[] {"building_type"}); checkResults( visitorA.getResult(), new Object[][] { executeVisitor( featureCollectionB, "energy_consumption", "Average", new String[] {"building_type"}); checkResults( visitorB.getResult(), new Object[][] { }); checkResults( visitorA.getResult().merge(visitorB.getResult()), new Object[][] {
@Test public void testGroupByWithStdDevAndSingleAttribute() throws Exception { testVisitor( "energy_consumption", "StdDev", "building_type", new Object[][] { new Object[] {"SCHOOL", 19.149}, new Object[] {"FABRIC", 194.487}, new Object[] {"HOUSE", 1.0} }); }
executeVisitor( featureCollectionA, "energy_consumption", "Average", new String[] {"building_type"}); checkResults( visitorA.getResult(), new Object[][] { executeVisitor( featureCollectionB, "energy_consumption", "Average", new String[] {"building_type"}); checkResults( visitorB.getResult(), new Object[][] { }); checkResults( visitorA.getResult().merge(visitorB.getResult()), new Object[][] {
@Test public void testGroupByWithMaxAndSingleAttribute() throws Exception { testVisitor( "energy_consumption", "Max", "building_type", new Object[][] { new Object[] {"SCHOOL", 60.0}, new Object[] {"FABRIC", 500.0}, new Object[] {"HOUSE", 6.0} }); }
@Test public void testGroupByWithMinAndSingleAttribute() throws Exception { testVisitor( "energy_consumption", "Min", "building_type", new Object[][] { new Object[] {"SCHOOL", 10.0}, new Object[] {"FABRIC", 20.0}, new Object[] {"HOUSE", 4.0} }); }
@Test public void testGroupByWithSumDevAndSingleAttribute() throws Exception { testVisitor( "energy_consumption", "Sum", "building_type", new Object[][] { new Object[] {"SCHOOL", 180.0}, new Object[] {"FABRIC", 700.0}, new Object[] {"HOUSE", 10.0} }); }
@Test public void testGroupByWithAverageAndSingleAttribute() throws Exception { testVisitor( "energy_consumption", "Average", "building_type", new Object[][] { new Object[] {"SCHOOL", 30.0}, new Object[] {"FABRIC", 175.0}, new Object[] {"HOUSE", 5.0} }); }
@Test public void testGroupByWithCountAndSingleAttribute() throws Exception { testVisitor( "energy_consumption", "Count", "building_type", new Object[][] { new Object[] {"SCHOOL", 6}, new Object[] {"FABRIC", 4}, new Object[] {"HOUSE", 2} }); }
@Test public void testGroupByWithMedianAndSingleAttribute() throws Exception { testVisitor( "energy_consumption", "Median", "building_type", new Object[][] { new Object[] {"SCHOOL", 25.0}, new Object[] {"FABRIC", 90.0}, new Object[] {"HOUSE", 5.0} }); }
@Test public void testGroupByWithMaxAndTwoAttributes() throws Exception { testVisitor( "energy_consumption", "Max", "building_type", "energy_type", new Object[][] { new Object[] {"FABRIC", "FLOWING_WATER", 500.0}, new Object[] {"FABRIC", "NUCLEAR", 150.0}, new Object[] {"FABRIC", "SOLAR", 30.0}, new Object[] {"FABRIC", "WIND", 20.0}, new Object[] {"HOUSE", "FUEL", 6.0}, new Object[] {"HOUSE", "NUCLEAR", 4.0}, new Object[] {"SCHOOL", "FLOWING_WATER", 50.0}, new Object[] {"SCHOOL", "FUEL", 60.0}, new Object[] {"SCHOOL", "NUCLEAR", 10.0}, new Object[] {"SCHOOL", "SOLAR", 30.0}, new Object[] {"SCHOOL", "WIND", 20.0} }); }
@Test public void testGroupByWithMinAndTwoAttributes() throws Exception { testVisitor( "energy_consumption", "Min", "building_type", "energy_type", new Object[][] { new Object[] {"FABRIC", "FLOWING_WATER", 500.0}, new Object[] {"FABRIC", "NUCLEAR", 150.0}, new Object[] {"FABRIC", "SOLAR", 30.0}, new Object[] {"FABRIC", "WIND", 20.0}, new Object[] {"HOUSE", "FUEL", 6.0}, new Object[] {"HOUSE", "NUCLEAR", 4.0}, new Object[] {"SCHOOL", "FLOWING_WATER", 50.0}, new Object[] {"SCHOOL", "FUEL", 60.0}, new Object[] {"SCHOOL", "NUCLEAR", 10.0}, new Object[] {"SCHOOL", "SOLAR", 30.0}, new Object[] {"SCHOOL", "WIND", 20.0} }); }
@Test public void testGroupByWithMedianAndTwoAttributes() throws Exception { testVisitor( "energy_consumption", "Median", "building_type", "energy_type", new Object[][] { new Object[] {"FABRIC", "FLOWING_WATER", 500.0}, new Object[] {"FABRIC", "NUCLEAR", 150.0}, new Object[] {"FABRIC", "SOLAR", 30.0}, new Object[] {"FABRIC", "WIND", 20.0}, new Object[] {"HOUSE", "FUEL", 6.0}, new Object[] {"HOUSE", "NUCLEAR", 4.0}, new Object[] {"SCHOOL", "FLOWING_WATER", 50.0}, new Object[] {"SCHOOL", "FUEL", 60.0}, new Object[] {"SCHOOL", "NUCLEAR", 10.0}, new Object[] {"SCHOOL", "SOLAR", 30.0}, new Object[] {"SCHOOL", "WIND", 20.0} }); }
@Test public void testGroupByWithCountAndTwoAttributes() throws Exception { testVisitor( "energy_consumption", "Count", "building_type", "energy_type", new Object[][] { new Object[] {"FABRIC", "FLOWING_WATER", 1}, new Object[] {"FABRIC", "NUCLEAR", 1}, new Object[] {"FABRIC", "SOLAR", 1}, new Object[] {"FABRIC", "WIND", 1}, new Object[] {"HOUSE", "FUEL", 1}, new Object[] {"HOUSE", "NUCLEAR", 1}, new Object[] {"SCHOOL", "FLOWING_WATER", 1}, new Object[] {"SCHOOL", "FUEL", 1}, new Object[] {"SCHOOL", "NUCLEAR", 2}, new Object[] {"SCHOOL", "SOLAR", 1}, new Object[] {"SCHOOL", "WIND", 1} }); }