public void LikelihoodTest()
{
var hmm = DiscreteHiddenMarkovModelFunctionTest.CreateModel2();
int states = hmm.States;
int symbols = hmm.Symbols;
var hcrf = new ConditionalRandomField<int>(states,
new MarkovDiscreteFunction(hmm));
var hmm0 = new HiddenMarkovModel(states, symbols);
var hcrf0 = new ConditionalRandomField<int>(states,
new MarkovDiscreteFunction(hmm0));
int[] observations = new int[] { 0, 0, 1, 1, 1, 2 };
double la = hcrf.LogLikelihood(observations, observations);
double lb = hcrf0.LogLikelihood(observations, observations);
Assert.IsTrue(la > lb);
double lc = hmm.Evaluate(observations, observations);
double ld = hmm0.Evaluate(observations, observations);
Assert.IsTrue(lc > ld);
double za = hcrf.LogPartition(observations);
double zb = hcrf0.LogPartition(observations);
la += za;
lb += zb;
Assert.AreEqual(la, lc, 1e-6);
Assert.AreEqual(lb, ld, 1e-6);
}