public void MeanOfManyObservations() { IUniform valGen = UniformStreams.DefaultStreams.GetUniform(); IUniform timeGen = UniformStreams.DefaultStreams.GetUniform(); double weightedSum = 0.0; double sumOfWeights = 0.0; TimeValue lastObservation = new TimeValue(0L, valGen.NextDouble() * 100.0); TimeWeightedMean twm = new TimeWeightedMean(new Simulation()); twm.Observe(lastObservation.Value, lastObservation.Time); for (int i = 0; i < 1000; i++) { long newTime = lastObservation.Time + (long)(timeGen.NextDouble() * 10.0); TimeValue newObservation = new TimeValue(newTime, valGen.NextDouble() * 100.0); double weight = newObservation.Time - lastObservation.Time; weightedSum += weight * lastObservation.Value; sumOfWeights += weight; twm.Observe(newObservation.Value, newObservation.Time); lastObservation = newObservation; } double mean = weightedSum / sumOfWeights; Assert.AreEqual(mean, twm.Value); }
public void DefaultConstructor() { TimeWeightedMean twm = new TimeWeightedMean(new Simulation()); Assert.AreEqual(0, twm.Observations); Assert.IsTrue(Double.IsNaN(twm.Value)); TimeValue lastObservation = twm.LastObservation; Assert.IsFalse(lastObservation.IsValid); }
public void MeanOfFewObservations() { TimeWeightedMean twm = new TimeWeightedMean(new Simulation()); twm.Observe(3.0, 0L); twm.Observe(2.0, 4L); twm.Observe(6.0, 7L); twm.Observe(4.0, 8L); twm.Observe(2.0, 10L); Assert.AreEqual(3.2, twm.Value); }
public void MeanOfZeroWeights() { double d = 123.0; TimeWeightedMean twm = new TimeWeightedMean(new Simulation()); for (int i = 0; i < 1000; i++) { twm.Observe(d, 0L); } Assert.AreEqual(Double.NaN, twm.Value); }
public void MeanOfSameObservations() { double d = 123.0; TimeWeightedMean twm = new TimeWeightedMean(new Simulation()); for (int i = 0; i < 1000; i++) { twm.Observe(d, i); } Assert.AreEqual(1000, twm.Observations); Assert.AreEqual(d, twm.Value); TimeValue lastObservation = twm.LastObservation; Assert.IsTrue(lastObservation.IsValid); Assert.AreEqual(d, lastObservation.Value); Assert.AreEqual(999, lastObservation.Time); }
public void VarianceOfManyObservations() { IUniform valGen = UniformStreams.DefaultStreams.GetUniform(); IUniform timeGen = UniformStreams.DefaultStreams.GetUniform(); TimeValue lastObservation = new TimeValue(0L, valGen.NextDouble() * 100.0); double[] weights = new double[1000]; double[] values = new double[1000]; TimeWeightedVariance twv = new TimeWeightedVariance(new Simulation()); TimeWeightedMean twm = new TimeWeightedMean(new Simulation()); twm.Observe(lastObservation.Value, lastObservation.Time); twv.Observe(lastObservation.Value, lastObservation.Time); for (int i = 0; i < 1000; i++) { long newTime = lastObservation.Time + (long)(timeGen.NextDouble() * 10.0); TimeValue newObservation = new TimeValue(newTime, valGen.NextDouble() * 100.0); double weight = newObservation.Time - lastObservation.Time; twm.Observe(newObservation.Value, newObservation.Time); twv.Observe(newObservation.Value, newObservation.Time); weights[i] = weight; values[i] = lastObservation.Value; lastObservation = newObservation; } double sumW = 0.0; double sumWVals = 0.0; for (int i = 0; i < 1000; i++) { sumW += weights[i]; sumWVals += weights[i] * Math.Pow(values[i] - twm.Value, 2.0); } double variance = sumWVals / sumW; Assert.AreEqual(variance, twv.Value, 0.00001); }
public void AttachAndDetach() { TimeWeightedMean twm = new TimeWeightedMean(new Simulation()); twm.ObserveOnAttach = true; twm.ObserveOnDetach = true; _valueForTesting = 5.5; twm.Attach(this, "ValueForTesting"); TimeValue lastObservation = twm.LastObservation; Assert.AreEqual(1, twm.Observations); Assert.AreEqual(5.5, lastObservation.Value); _valueForTesting = 10.0; twm.Detach(this, "ValueForTesting"); lastObservation = twm.LastObservation; Assert.AreEqual(2, twm.Observations); Assert.AreEqual(10.0, lastObservation.Value); }
public void RequiresNonNullSimulation() { TimeWeightedMean twm = new TimeWeightedMean(null); }