public void TestSerializeFeguson()
        {
            double[,] a = { { 0, 1 }, { 1, 0 } };
            double[] pi = { 1, 0 };
            double[,] f = { { 0, 1 }, { 0, 1 } };
            double[,] b = { { 1, 0 }, { 0, 1 } };

            HsmFergusonModel initialModel = new HsmFergusonModel();

            initialModel.A  = a;
            initialModel.B  = b;
            initialModel.F  = f;
            initialModel.Pi = pi;

            JsonRepresentation <HsmFergusonModel> jsonSerializer = new JsonRepresentation <HsmFergusonModel>();
            string serializedModel = jsonSerializer.Serialize(initialModel);

            Assert.IsNotNull(serializedModel);
            HsmFergusonModel deserializedModel = jsonSerializer.Deserialize(serializedModel);

            Assert.IsNotNull(deserializedModel);
            Assert.AreEqual(initialModel.Type, deserializedModel.Type);
            Assert.AreEqual(initialModel.N, deserializedModel.N);
            Assert.AreEqual(initialModel.Q, deserializedModel.Q);
            CollectionAssert.AreEqual(initialModel.A, deserializedModel.A);
            CollectionAssert.AreEqual(initialModel.B, deserializedModel.B);
            CollectionAssert.AreEqual(initialModel.F, deserializedModel.F);
            CollectionAssert.AreEqual(initialModel.Pi, deserializedModel.Pi);
        }
        public void TestCalculate()
        {
            HsmFergusonModel model = createModel();

            int[]      sequenceArr = { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0 };
            List <int> sequence    = new List <int>(sequenceArr);
            HsmFergusonProbabilityCalculator calculator = new HsmFergusonProbabilityCalculator(model, sequence);
            double result = calculator.Calculate();

            Assert.AreEqual(1, result);
        }
        private HsmFergusonModel createModel()
        {
            double[,] a = { { 0, 1 }, { 1, 0 } };
            double[] pi = { 0, 1 };
            double[,] f = { { 0, 0, 1 }, { 0, 0, 1 } };
            double[,] b = { { 1, 0 }, { 0, 1 } };

            HsmFergusonModel model = new HsmFergusonModel();

            model.A  = a;
            model.B  = b;
            model.F  = f;
            model.Pi = pi;
            return(model);
        }
        public void TestGenerate()
        {
            HsmFergusonModel             model      = createModel();
            IPseudoRandomNumberGenerator randomizer = new StandartPrnGenerator();
            HsmFergusonModelGenerator    generator  = new HsmFergusonModelGenerator(model, randomizer);
            IList <int> result = generator.Generate(20);

            Assert.AreEqual(20, result.Count);
            foreach (int i in result)
            {
                if (i % 4 == 0 || i % 4 == 1)
                {
                    Assert.AreEqual(1, result[i]);
                }
                else
                {
                    Assert.AreEqual(0, result[i]);
                }
            }
        }
 public HsmFergusonProbabilityCalculator(HsmFergusonModel model, List <int> sequence) : base(model, sequence)
 {
 }