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); }
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); }
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); }