blob: 51cf59be1ac9796360b47135e5e9bd7134b6413d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.math3.stat.data;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.math3.TestUtils;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
*/
public abstract class CertifiedDataAbstractTest {
private DescriptiveStatistics descriptives;
private SummaryStatistics summaries;
private Map<String, Double> certifiedValues;
@Before
public void setUp() throws IOException {
descriptives = new DescriptiveStatistics();
summaries = new SummaryStatistics();
certifiedValues = new HashMap<String, Double>();
loadData();
}
private void loadData() throws IOException {
BufferedReader in = null;
try {
URL resourceURL = getClass().getClassLoader().getResource(getResourceName());
in = new BufferedReader(new InputStreamReader(resourceURL.openStream()));
String line = in.readLine();
while (line != null) {
/* this call to StringUtils did little for the
* following conditional structure
*/
line = line.trim();
// not empty line or comment
if (!("".equals(line) || line.startsWith("#"))) {
int n = line.indexOf('=');
if (n == -1) {
// data value
double value = Double.parseDouble(line);
descriptives.addValue(value);
summaries.addValue(value);
} else {
// certified value
String name = line.substring(0, n).trim();
String valueString = line.substring(n + 1).trim();
Double value = Double.valueOf(valueString);
certifiedValues.put(name, value);
}
}
line = in.readLine();
}
} finally {
if (in != null) {
in.close();
}
}
}
protected abstract String getResourceName();
protected double getMaximumAbsoluteError() {
return 1.0e-5;
}
@After
public void tearDown() {
descriptives.clear();
descriptives = null;
summaries.clear();
summaries = null;
certifiedValues.clear();
certifiedValues = null;
}
@Test
public void testCertifiedValues() {
for (String name : certifiedValues.keySet()) {
Double expectedValue = certifiedValues.get(name);
Double summariesValue = getProperty(summaries, name);
if (summariesValue != null) {
TestUtils.assertEquals("summary value for " + name + " is incorrect.",
summariesValue.doubleValue(), expectedValue.doubleValue(),
getMaximumAbsoluteError());
}
Double descriptivesValue = getProperty(descriptives, name);
if (descriptivesValue != null) {
TestUtils.assertEquals("descriptive value for " + name + " is incorrect.",
descriptivesValue.doubleValue(), expectedValue.doubleValue(),
getMaximumAbsoluteError());
}
}
}
protected Double getProperty(Object bean, String name) {
try {
// Get the value of prop
String prop = "get" + name.substring(0,1).toUpperCase() + name.substring(1);
Method meth = bean.getClass().getMethod(prop, new Class[0]);
Object property = meth.invoke(bean, new Object[0]);
if (meth.getReturnType().equals(Double.TYPE)) {
return (Double) property;
} else if (meth.getReturnType().equals(Long.TYPE)) {
return Double.valueOf(((Long) property).doubleValue());
} else {
Assert.fail("wrong type: " + meth.getReturnType().getName());
}
} catch (NoSuchMethodException nsme) {
// ignored
} catch (InvocationTargetException ite) {
Assert.fail(ite.getMessage());
} catch (IllegalAccessException iae) {
Assert.fail(iae.getMessage());
}
return null;
}
}