public void MarkovChainNotCongenericZeroRankTwoTest()
{
// using mock of random generator
IGenerator generator = new MockGenerator();
// rank of markov chain is 2 (each element depends on one previous element)
const int MarkovChainRank = 2;
// heterogeneity is 1 (there are 2 models - for odd and even positions)
const int NoCongenericRank = 0;
// creating markov chain
var markovChain = new MarkovChainNotCongenericStatic(MarkovChainRank, NoCongenericRank, generator);
// length of generated sequence
const int Length = 30;
// teaching markov chain (TeachingMethod.None means there is no preprocessing)
markovChain.Teach(secondTestChain, TeachingMethod.Cycle);
var temp = markovChain.Generate(Length);
/*
* 1. Sequence a a a a a a b a a a b a
* first level (unconditional probability)
*
* a| 10/12 (0,83333) not more than 0,83333|
* b| 2/12 (0,16667) not more than 1|
*
* second level (conditional probability taking into account 1 previous element)
*
* | a | b |
* ---|------|------|
* a |7/9(7)|2/9(2)|
* ---|------|------|
* b |1,0(1)|0,0(0)|
* ---|------|------|
*/
// expected result of generation
var resultTheory = new Chain(30);
resultTheory[0] = (ValueString)"a"; // "a" 0.77;
resultTheory[1] = (ValueString)"a"; // "a" 0.15;
resultTheory[2] = (ValueString)"b"; // "b" 0.96;
resultTheory[3] = (ValueString)"a"; // "a" 0.61;
resultTheory[4] = (ValueString)"a"; // "a" 0.15;
resultTheory[5] = (ValueString)"b"; // "b" 0.85;
resultTheory[6] = (ValueString)"a"; // "a" 0.67;
resultTheory[7] = (ValueString)"a"; // "a" 0.51;
resultTheory[8] = (ValueString)"a"; // "a" 0.71;
resultTheory[9] = (ValueString)"a"; // "a" 0.2;
resultTheory[10] = (ValueString)"a"; // "a" 0.77;
resultTheory[11] = (ValueString)"a"; // "a" 0.15;
resultTheory[12] = (ValueString)"b"; // "b" 0.96;
resultTheory[13] = (ValueString)"a"; // "a" 0.61;
resultTheory[14] = (ValueString)"a"; // "a" 0.15;
resultTheory[15] = (ValueString)"b"; // "b" 0.85;
resultTheory[16] = (ValueString)"a"; // "a" 0.67;
resultTheory[17] = (ValueString)"a"; // "a" 0.51;
resultTheory[18] = (ValueString)"a"; // "a" 0.71;
resultTheory[19] = (ValueString)"a"; // "a" 0.2;
resultTheory[20] = (ValueString)"a"; // "a" 0.77;
resultTheory[21] = (ValueString)"a"; // "a" 0.15;
resultTheory[22] = (ValueString)"b"; // "b" 0.96;
resultTheory[23] = (ValueString)"a"; // "a" 0.61;
resultTheory[24] = (ValueString)"a"; // "a" 0.15;
resultTheory[25] = (ValueString)"b"; // "b" 0.85;
resultTheory[26] = (ValueString)"a"; // "a" 0.67;
resultTheory[27] = (ValueString)"a"; // "a" 0.51;
resultTheory[28] = (ValueString)"a"; // "a" 0.71;
resultTheory[29] = (ValueString)"a"; // "a" 0.2;
Assert.AreEqual(resultTheory, temp);
}