public void ForwardTest3()
{
HiddenMarkovModel hmm = CreateModel3();
// L L R R
int[] observations = { 0, 0, 1, 1 };
double[,] actual = ForwardBackwardAlgorithm.Forward(hmm, observations);
// Forward matrices from R's HMM package are
// transposed in relation to the framework's:
Assert.AreEqual(4, actual.GetLength(0));
Assert.AreEqual(2, actual.GetLength(1));
Assert.AreEqual(0.675, actual[0, 0], 1e-10);
Assert.AreEqual(0.012, actual[0, 1], 1e-10);
Assert.AreEqual(0.4077, actual[1, 0], 1e-10);
Assert.AreEqual(0.017208, actual[1, 1], 1e-10);
Assert.AreEqual(0.0828306, actual[2, 0], 1e-10);
Assert.AreEqual(0.082355328, actual[2, 1], 1e-10);
Assert.AreEqual(0.0227427696, actual[3, 0], 1e-10);
Assert.AreEqual(0.065309067648, actual[3, 1], 1e-10);
foreach (double p in actual)
Assert.IsFalse(double.IsNaN(p));
}