Example #1
0
        public void TestComapreSimpleDateStructureAndCompSetTree()
        {
            const int numOfSets   = 10000;
            var       rand        = new Random();
            var       diagnosises = new List <Diagnosis>();
            var       id          = 1;

            for (var j = 0; j < numOfSets; j++)
            {
                var numOfGates = rand.Next(1, 100);
                var diagnosis  = new Diagnosis();
                for (var i = 0; i < numOfGates; i++)
                {
                    Gate gate = new MultipleInputComponent(id, Gate.Type.and);
                    diagnosis.AddCompToDiagnosis(gate);
                    id++;
                }
                diagnosises.Add(diagnosis);
            }

            var diagnosiSetsDataStructure = new SetsDataStructure("Diagnosis");
            var diagnosisesTree           = new CompSetTree.CompSetTree();

            var sw = new Stopwatch();

            sw.Start();
            foreach (var diagnosise in diagnosises)
            {
                diagnosiSetsDataStructure.AddSet(diagnosise.TheDiagnosis);
            }
            sw.Stop();
            var timeSpan1 = sw.Elapsed; sw.Start();

            sw.Reset();
            sw.Start();
            foreach (var diagnosise in diagnosises)
            {
                diagnosisesTree.AddSet(diagnosise.TheDiagnosis);
            }
            sw.Stop();
            var timeSpan2 = sw.Elapsed; sw.Start();

            sw.Reset();
            var count1 = diagnosiSetsDataStructure.GetCompSets().Count;
            var count2 = diagnosisesTree.GetAllCompsSets().Count;

            Debug.WriteLine("Simple Data Structure Time: " + timeSpan1 + ", Comp Tree Time: " + timeSpan2);
            Assert.AreEqual(count1, count2);
            Assert.IsTrue(timeSpan2 < timeSpan1);
        }
        public void TestFindHittingSet()
        {
            Dictionary <int, Gate> idTGates = new Dictionary <int, Gate>();

            Gate gate1 = new MultipleInputComponent(1, Gate.Type.and);

            idTGates.Add(gate1.Id, gate1);
            Gate gate2 = new MultipleInputComponent(2, Gate.Type.or);

            idTGates.Add(gate2.Id, gate2);
            Gate gate3 = new MultipleInputComponent(3, Gate.Type.xor);

            idTGates.Add(gate3.Id, gate3);
            Gate gate4 = new MultipleInputComponent(4, Gate.Type.and);

            idTGates.Add(gate4.Id, gate4);

            List <Gate> gateList1 = new List <Gate>();

            gateList1.Add(gate1);
            gateList1.Add(gate2);
            gateList1.Add(gate3);
            Conflict conflict1 = new Conflict(gateList1);

            List <Gate> gateList2 = new List <Gate>();

            gateList2.Add(gate3);
            gateList2.Add(gate4);
            Conflict conflict2 = new Conflict(gateList2);

            List <Gate> gateList3 = new List <Gate>();

            gateList3.Add(gate2);
            gateList3.Add(gate4);
            Conflict conflict3 = new Conflict(gateList3);

            List <List <Gate> > conflictSet = new List <List <Gate> >();

            conflictSet.Add(conflict1.TheConflict);
            conflictSet.Add(conflict2.TheConflict);
            conflictSet.Add(conflict3.TheConflict);
            List <List <Gate> > hittingSets = SwitchingAlgorithmHittingSetFinder.FindHittingSet(conflictSet, 10, idTGates);

            Assert.AreEqual(hittingSets.Count, 4);

            printSetList(hittingSets);
        }
Example #3
0
        public void TestAddChild()
        {
            Gate gate1 = new MultipleInputComponent(1, Gate.Type.and);
            Gate gate2 = new MultipleInputComponent(2, Gate.Type.and);
            Gate gate3 = new MultipleInputComponent(3, Gate.Type.and);
            Gate gate4 = new MultipleInputComponent(4, Gate.Type.and);
            Gate gate5 = new MultipleInputComponent(5, Gate.Type.and);
            Gate gate6 = new MultipleInputComponent(6, Gate.Type.and);
            Gate gate7 = new MultipleInputComponent(7, Gate.Type.and);
            Gate gate8 = new MultipleInputComponent(8, Gate.Type.and);

            List <Gate> child1 = new List <Gate>();

            child1.Add(gate1);
            child1.Add(gate4);
            child1.Add(gate2);
            List <Gate> child2 = new List <Gate>();

            child2.Add(gate4);
            child2.Add(gate6);
            child2.Add(gate5);
            List <Gate> child3 = new List <Gate>();

            child3.Add(gate2);
            child3.Add(gate5);
            List <Gate> child4 = new List <Gate>();

            child4.Add(gate2);
            child4.Add(gate3);
            List <Gate> child5 = new List <Gate>();

            child5.Add(gate1);
            child5.Add(gate2);
            child5.Add(gate5);
            child5.Add(gate4);
            List <Gate> child6 = new List <Gate>();

            child6.Add(gate1);
            child6.Add(gate2);
            child6.Add(gate5);
            List <Gate> child7 = new List <Gate>();

            child7.Add(gate7);
            //TODO - How to eliminate super set of new set????
            //List<Gate> child8 = new List<Gate>();
            //child8.Add(gate5);
            //child8.Add(gate6);
            List <Gate> child9 = new List <Gate>();

            child9.Add(gate2);

            List <Gate> child10 = new List <Gate>();

            child10.Add(gate5);
            child10.Add(gate7);
            child10.Add(gate8);
            List <Gate> child11 = new List <Gate>();

            child11.Add(gate5);
            child11.Add(gate6);
            child11.Add(gate8);
            List <Gate> child12 = new List <Gate>();

            child12.Add(gate6);
            child12.Add(gate8);



            var tree = new CompSetTree.CompSetTree();

            tree.AddSet(child1);
            tree.AddSet(child2);
            tree.AddSet(child3);
            tree.AddSet(child4);
            tree.AddSet(child5);
            tree.AddSet(child6);
            //tree.AddSet(child7);
            // tree.AddSet(child8);
            tree.AddSet(child9);
            tree.AddSet(child10);
            tree.AddSet(child11);
            tree.AddSet(child12);

            tree.PrintTree();
            Assert.AreEqual(1, 1);
        }
Example #4
0
        public void TestAddComponentToDataStructure()
        {
            Gate gate1 = new MultipleInputComponent(1, Gate.Type.and);
            Gate gate2 = new MultipleInputComponent(2, Gate.Type.or);
            Gate gate3 = new MultipleInputComponent(3, Gate.Type.xor);
            Gate gate4 = new MultipleInputComponent(4, Gate.Type.and);

            List <Gate> gateList1 = new List <Gate>();

            gateList1.Add(gate1);
            gateList1.Add(gate4);
            gateList1.Add(gate2);
            gateList1.Add(gate3);

            Diagnosis set1 = new Diagnosis(gateList1);

            SetsDataStructure diagnosiSetsDataStructure = new SetsDataStructure("Diagnosis");

            diagnosiSetsDataStructure.AddSet(set1.TheDiagnosis);

            Assert.AreEqual(diagnosiSetsDataStructure.SetIdsToSet.Count, 1);

            Gate gate5 = new MultipleInputComponent(5, Gate.Type.or);
            //trying to add new set
            List <Gate> gateList2 = new List <Gate>();

            gateList2.Add(gate1);
            gateList2.Add(gate5);
            gateList2.Add(gate4);

            Diagnosis set2 = new Diagnosis(gateList2);

            diagnosiSetsDataStructure.AddSet(set2.TheDiagnosis);

            Assert.AreEqual(diagnosiSetsDataStructure.SetIdsToSet.Count, 2);

            //trying to add super set
            List <Gate> gateList3 = new List <Gate>();

            gateList3.Add(gate1);
            gateList3.Add(gate5);
            gateList3.Add(gate4);
            gateList3.Add(gate2);
            gateList3.Add(gate3);

            Diagnosis set3 = new Diagnosis(gateList3);

            diagnosiSetsDataStructure.AddSet(set3.TheDiagnosis);

            Assert.AreEqual(diagnosiSetsDataStructure.SetIdsToSet.Count, 2);

            //trying to add sub set
            List <Gate> gateList4 = new List <Gate>();

            gateList4.Add(gate1);
            gateList4.Add(gate5);

            Diagnosis set4 = new Diagnosis(gateList4);

            diagnosiSetsDataStructure.AddSet(set4.TheDiagnosis);

            Assert.AreEqual(diagnosiSetsDataStructure.SetIdsToSet.Count, 2);

            DiagnosisSet diagnosisSet = new DiagnosisSet();

            foreach (List <Gate> gates in diagnosiSetsDataStructure.GetCompSets())
            {
                diagnosisSet.AddDiagnosis(new Diagnosis(gates));;
            }

            Assert.AreEqual(diagnosiSetsDataStructure.SetIdsToSet.Count, diagnosisSet.Count);
        }