public void testForwardBackwardOnRainmanHmmFor3daysData()
{
List<String> perceptions = new List<String>();
perceptions.Add(HmmConstants.SEE_UMBRELLA);
perceptions.Add(HmmConstants.SEE_UMBRELLA);
perceptions.Add(HmmConstants.SEE_NO_UMBRELLA);
List<RandomVariable> results = rainmanHmm.forward_backward(perceptions);
Assert.AreEqual(4, results.Count);
Assert.IsNull(results[0]);
RandomVariable smoothedDayOne = results[1];
Assert.AreEqual(0.964, smoothedDayOne
.getProbabilityOf(HmmConstants.RAINING), TOLERANCE);
Assert.AreEqual(0.036, smoothedDayOne
.getProbabilityOf(HmmConstants.NOT_RAINING), TOLERANCE);
RandomVariable smoothedDayTwo = results[2];
Assert.AreEqual(0.484, smoothedDayTwo
.getProbabilityOf(HmmConstants.RAINING), TOLERANCE);
Assert.AreEqual(0.516, smoothedDayTwo
.getProbabilityOf(HmmConstants.NOT_RAINING), TOLERANCE);
RandomVariable smoothedDayThree = results[3];
Assert.AreEqual(0.190, smoothedDayThree
.getProbabilityOf(HmmConstants.RAINING), TOLERANCE);
Assert.AreEqual(0.810, smoothedDayThree
.getProbabilityOf(HmmConstants.NOT_RAINING), TOLERANCE);
}