public void testForwardBackwardOnRainmanHmm()
{
List<String> perceptions = new List<String>();
perceptions.Add(HmmConstants.SEE_UMBRELLA);
perceptions.Add(HmmConstants.SEE_UMBRELLA);
List<RandomVariable> results = rainmanHmm.forward_backward(perceptions);
Assert.AreEqual(3, results.Count);
Assert.IsNull(results[0]);
RandomVariable smoothedDayOne = results[1];
Assert.AreEqual(0.982, smoothedDayOne
.getProbabilityOf(HmmConstants.RAINING), TOLERANCE);
Assert.AreEqual(0.018, smoothedDayOne
.getProbabilityOf(HmmConstants.NOT_RAINING), TOLERANCE);
RandomVariable smoothedDayTwo = results[2];
Assert.AreEqual(0.883, smoothedDayTwo
.getProbabilityOf(HmmConstants.RAINING), TOLERANCE);
Assert.AreEqual(0.117, smoothedDayTwo
.getProbabilityOf(HmmConstants.NOT_RAINING), TOLERANCE);
}