@Test
public void testWeightedAndStdDev() {
WeightedRunningAverageAndStdDev runningAverage = new WeightedRunningAverageAndStdDev();
assertEquals(0, runningAverage.getCount());
assertTrue(Double.isNaN(runningAverage.getAverage()));
assertTrue(Double.isNaN(runningAverage.getStandardDeviation()));
runningAverage.addDatum(1.0);
assertEquals(1.0, runningAverage.getAverage(), EPSILON);
assertTrue(Double.isNaN(runningAverage.getStandardDeviation()));
runningAverage.addDatum(1.0, 2.0);
assertEquals(1.0, runningAverage.getAverage(), EPSILON);
assertEquals(0.0, runningAverage.getStandardDeviation(), EPSILON);
runningAverage.addDatum(8.0, 0.5);
assertEquals(2.0, runningAverage.getAverage(), EPSILON);
assertEquals(Math.sqrt(10.5), runningAverage.getStandardDeviation(), EPSILON);
runningAverage.addDatum(-4.0);
assertEquals(2.0/3.0, runningAverage.getAverage(), EPSILON);
assertEquals(Math.sqrt(15.75), runningAverage.getStandardDeviation(), EPSILON);
runningAverage.removeDatum(-4.0);
assertEquals(2.0, runningAverage.getAverage(), EPSILON);
assertEquals(Math.sqrt(10.5), runningAverage.getStandardDeviation(), EPSILON);
runningAverage.removeDatum(2.0, 2.0);
assertEquals(2.0, runningAverage.getAverage(), EPSILON);
assertEquals(Math.sqrt(31.5), runningAverage.getStandardDeviation(), EPSILON);
}