public void With_a_singleton_only_the_correct_set_is_returned()
        {
            //Given
            var a     = new ItemSet <IFact <string> >(factA);
            var empty = new ItemSet <IFact <string> >();

            //When
            var result = PowerSetGenerator <string> .GeneratePowerSet(a);

            //Then
            Assert.Equal(2, result.Count);
            Assert.Contains(a, result);
            Assert.Contains(empty, result);
        }
        public List <AssociationRule <T> > GenerateCandidateRules(List <ItemSet <IFact <T> > > frequentPatterns)
        {
            var candidateRules = new List <AssociationRule <T> >();

            frequentPatterns.ForEach(x =>
            {
                var powerSet = PowerSetGenerator <T> .GeneratePowerSet(x);

                candidateRules.AddRange(powerSet.Where(set => !set.IsEmpty() && set.Items.Count < x.Items.Count).Select(set =>
                {
                    return(new AssociationRule <T>(set, x.Not(set)));
                }));
            });
            return(candidateRules);
        }
        public List <AssociationRule <T> > GenerateCandidateRules(IEnumerable <IFact <T> > targetFacts, List <ItemSet <IFact <T> > > frequentPatterns)
        {
            if (targetFacts == null)
            {
                return(GenerateCandidateRules(frequentPatterns));
            }

            var candidateRules = new List <AssociationRule <T> >();

            frequentPatterns.ForEach(x =>
            {
                var powerSet = PowerSetGenerator <T> .GeneratePowerSet(x);

                candidateRules.AddRange(powerSet.Where(set => !set.IsEmpty() && !candidateRules.Any(rule => rule.Left.Equals(set))).Select(set =>
                {
                    var targetItemset = new ItemSet <IFact <T> >(targetFacts);
                    return(new AssociationRule <T>(set, targetItemset));
                }));
            });
            return(candidateRules);
        }
        public void With_a_three_item_set_only_the_correct_sets_are_returned()
        {
            //Given
            var abc = new ItemSet <IFact <string> >(new List <IFact <string> >()
            {
                factA, factB, factC
            });

            //When
            var result = PowerSetGenerator <string> .GeneratePowerSet(abc);

            //Then
            var empty = new ItemSet <IFact <string> >();
            var a     = new ItemSet <IFact <string> >(factA);
            var b     = new ItemSet <IFact <string> >(factB);
            var c     = new ItemSet <IFact <string> >(factC);
            var ab    = new ItemSet <IFact <string> >(new List <IFact <string> >()
            {
                factA, factB
            });
            var bc = new ItemSet <IFact <string> >(new List <IFact <string> >()
            {
                factB, factC
            });
            var ac = new ItemSet <IFact <string> >(new List <IFact <string> >()
            {
                factA, factC
            });

            Assert.Equal(8, result.Count);
            Assert.Contains(a, result);
            Assert.Contains(b, result);
            Assert.Contains(c, result);
            Assert.Contains(ab, result);
            Assert.Contains(ac, result);
            Assert.Contains(bc, result);
            Assert.Contains(abc, result);
            Assert.Contains(empty, result);
        }