@Test
public void testWeighted() {
WeightedRunningAverage runningAverage = new WeightedRunningAverage();
assertEquals(0, runningAverage.getCount());
assertTrue(Double.isNaN(runningAverage.getAverage()));
runningAverage.addDatum(1.0, 2.0);
assertEquals(1.0, runningAverage.getAverage(), EPSILON);
runningAverage.addDatum(1.0);
assertEquals(1.0, runningAverage.getAverage(), EPSILON);
runningAverage.addDatum(8.0, 0.5);
assertEquals(2.0, runningAverage.getAverage(), EPSILON);
runningAverage.addDatum(-4.0);
assertEquals(2.0/3.0, runningAverage.getAverage(), EPSILON);
runningAverage.removeDatum(-4.0);
assertEquals(2.0, runningAverage.getAverage(), EPSILON);
runningAverage.removeDatum(2.0, 2.0);
assertEquals(2.0, runningAverage.getAverage(), EPSILON);
runningAverage.changeDatum(0.0);
assertEquals(2.0, runningAverage.getAverage(), EPSILON);
runningAverage.changeDatum(4.0, 0.5);
assertEquals(5.0/1.5, runningAverage.getAverage(), EPSILON);
}