public void OrdersControlsCorrectly()
        {
            var data1 = new DataPoint { ControlName = "c1", TimeOfInteraction = DateTime.Now };
            var data2 = new DataPoint { ControlName = "c2", TimeOfInteraction = DateTime.Now };
            var data3 = new DataPoint { ControlName = "c3", TimeOfInteraction = DateTime.Now };

            var learner = new BoundedLearner();
            learner.Learn(data2);
            learner.Learn(data3);
            learner.Learn(data2);
            learner.Learn(data1);
            learner.Learn(data3);
            learner.Learn(data2);

            var learnedPoints = learner.OrderControls();
            Assert.AreEqual(3, learnedPoints.Count, "Wrong number of learned controls");
            Assert.AreEqual(data2, learnedPoints[0], "First control should be c2");
            Assert.AreEqual(data3, learnedPoints[1], "Second control should be c3");
            Assert.AreEqual(data1, learnedPoints[2], "Third control should be c1");

            Assert.AreNotEqual(learnedPoints[0].Rank, learnedPoints[1].Rank, "First and second items shouldn't have same rank");
            Assert.IsTrue(learnedPoints[0].Rank > learnedPoints[1].Rank && learnedPoints[1].Rank > learnedPoints[2].Rank, "Points should be ordered");
        }
        public void SimpleLearningTest()
        {
            var data1 = new DataPoint { ControlName = "c1", TimeOfInteraction = DateTime.Now };
            var data2 = new DataPoint { ControlName = "c2", TimeOfInteraction = DateTime.Now };
            var data3 = new DataPoint { ControlName = "c3", TimeOfInteraction = DateTime.Now };

            var learner = new DumbAlgorithm();
            learner.Learn(data2);
            learner.Learn(data3);
            learner.Learn(data2);
            learner.Learn(data1);
            learner.Learn(data3);
            learner.Learn(data2);

            var learnedPoints = learner.OrderControls();
            Assert.AreEqual(3, learnedPoints.Count, "Wrong number of learned controls");
            Assert.AreEqual(data2, learnedPoints[0], "First control should be c2");
            Assert.AreEqual(data3, learnedPoints[1], "Second control should be c3");
            Assert.AreEqual(data1, learnedPoints[2], "Third control should be c1");
            Assert.AreEqual(1, learnedPoints[0].Rank);
            Assert.AreEqual(0.6, learnedPoints[1].Rank, 0.1);
            Assert.AreEqual(0.3, learnedPoints[2].Rank, 0.1);
        }
        public void SaveAndLoadDataTest()
        {
            var dataPersistance = new DataPersistance
            {
                Active = true,
                CreatedDate = DateTime.Now,
                UserName = "******",
            };
            var data1 = new DataPoint { ControlName = "c1", TimeOfInteraction = DateTime.Now };
            var data2 = new DataPoint { ControlName = "c2", TimeOfInteraction = DateTime.Now };

            dataPersistance.Data.Add(data1);
            dataPersistance.Data.Add(data2);

            // Save the data
            var persistData = new PersistData();
            persistData.SaveData(dataPersistance);

            // load the data
            var loadedData = persistData.LoadData("Sean");

            Assert.IsTrue(dataPersistance.Equals(loadedData), "Unable to save data correctly");
        }
        private void ProcessNumberButton(string param)
        {
            Debug.WriteLine($"{param} has been clicked.");

            var dp = new DataPoint(param);
            Algorithms.ForEach(x => x.Learn(dp));
            DataList.Add(dp);
        }