public void GivenKParameterOne_AndAlphaParameterOne_AndValueAttributeProgramista_ShouldReturnTheSameList()
        {
            var pid       = new Expression <Func <Person, object> >[] { p => p.FirstName, p => p.Surname, p => p.Age };
            var algorithm = new AKAnonimization(1, 1, "Programista", _jobDictionary, _cityDictionary, p => p.Job, pid);
            var anonymzed = algorithm.GetAnonymizedData(_people);

            Assert.IsTrue(_people.All(p => anonymzed.Exists(x => x.FirstName == p.FirstName && x.Surname == p.Surname && x.Age == p.Age)));
        }
        public void GivenEmptyPeopleList_ShouldReturn_EmptyList()
        {
            var pid        = new Expression <Func <Person, object> >[] { p => p.FirstName, p => p.Surname, p => p.Age };
            var algorithm  = new AKAnonimization(3, 0.5, "Programista", _jobDictionary, _cityDictionary, p => p.Job, pid);
            var anonymized = algorithm.GetAnonymizedData(new List <Person>());

            Assert.IsTrue(!anonymized.Any());
        }
        public void GivenKParameter_GreaterThan_1_AndAlphaParameter1_AndValueAttributeProgramista_ShouldReturnAnonymizedList(int parameterK)
        {
            var pid       = new Expression <Func <Person, object> >[] { p => p.FirstName, p => p.Surname, p => p.Age };
            var algorithm = new AKAnonimization(parameterK, 1, "Programista", _jobDictionary, _cityDictionary, p => p.Job, pid);

            var anonymzed = algorithm.GetAnonymizedData(_people);

            Assert.AreEqual(_people.Count, anonymzed.Count);
            Assert.IsTrue(anonymzed.GroupBy(x => new { x.FirstName, x.Surname, x.Age })
                          .Select(g => g.Count())
                          .All(c => c >= parameterK));
        }
        public void GivenKParameterFour_AndAlphaParameterGreaterThenHalf_AndValueGenderKOrM_ShouldReturnAnonymizedList(double parameterAlpha, string valueAttribute)
        {
            var parameterK = 4;
            var pid        = new Expression <Func <Person, object> >[] { p => p.Job, p => p.City, p => p.FirstName };
            var algorithm  = new AKAnonimization(parameterK, parameterAlpha, valueAttribute, _jobDictionary, _cityDictionary, p => p.Gender, pid);
            var anonymzed  = algorithm.GetAnonymizedData(_people);

            Assert.AreEqual(_people.Count, anonymzed.Count);
            Assert.IsTrue(anonymzed.GroupBy(x => new { x.Job, x.City, x.FirstName })
                          .All(g =>
            {
                var numberSearchValue       = g.Count(p => p.Gender == valueAttribute);
                var groupSize               = g.Count();
                var alphaParameterCondition = numberSearchValue / (double)groupSize <= parameterAlpha;
                var kParameterCondition     = groupSize >= parameterK;
                return(alphaParameterCondition && kParameterCondition);
            }));
        }