public void TestSamplingOnlyNonDominatedObjectsWithinSampleSkyline() { string skylineSampleSql = TestContext.DataRow["skylineSampleSQL"].ToString(); string entireSkylineSql = TestContext.DataRow["entireSkylineSQL"].ToString(); string testComment = TestContext.DataRow["comment"].ToString(); Debug.WriteLine(testComment); Debug.WriteLine(skylineSampleSql); string baseQuery; string operators; int numberOfRecords; string[] parameter; var common = new SQLCommon { SkylineType = new SkylineBNL() { Provider = Helper.ProviderName, ConnectionString = Helper.ConnectionString } }; PrefSQLModel prefSqlModelSkylineSample = common.GetPrefSqlModelFromPreferenceSql(skylineSampleSql); string ansiSql = common.GetAnsiSqlFromPrefSqlModel(prefSqlModelSkylineSample); prefSQL.SQLParser.Helper.DetermineParameters(ansiSql, out parameter, out baseQuery, out operators, out numberOfRecords); IEnumerable <CLRSafeHashSet <int> > useSubsets = UseSubsets(prefSqlModelSkylineSample); var subsetsProducer = new FixedSkylineSamplingSubsetsProducer(useSubsets); var utility = new SkylineSamplingUtility(subsetsProducer); var skylineSample = new SkylineSampling(utility) { SubsetCount = prefSqlModelSkylineSample.SkylineSampleCount, SubsetDimension = prefSqlModelSkylineSample.SkylineSampleDimension, SelectedStrategy = common.SkylineType }; DataTable entireSkyline = common.ParseAndExecutePrefSQL(Helper.ConnectionString, Helper.ProviderName, entireSkylineSql); DataTable sampleSkyline = skylineSample.GetSkylineTable(baseQuery, operators); HashSet <int> entireSkylineObjectsIds = GetHashSetOfIdsFromDataTable(entireSkyline); HashSet <int> sampleSkylineObjectsIds = GetHashSetOfIdsFromDataTable(sampleSkyline); sampleSkylineObjectsIds.ExceptWith(entireSkylineObjectsIds); Debug.WriteLine("wrong objects:"); foreach (int i in sampleSkylineObjectsIds) { Debug.WriteLine(i); } Assert.IsTrue(sampleSkylineObjectsIds.IsSubsetOf(entireSkylineObjectsIds), "Dominated objects contained in Sample Skyline (i.e., objects which are not contained in the entire Skyline)."); }
private static void ExecuteSampleSkylines(IReadOnlyCollection <IEnumerable <CLRSafeHashSet <int> > > producedSubsets, PrefSQLModel prefSqlModel, SQLCommon common) { var objectsCount = 0; var timeSpent = 0L; string strQuery; string operators; int numberOfRecords; string[] parameter; string ansiSql = common.GetAnsiSqlFromPrefSqlModel(prefSqlModel); Debug.Write(ansiSql); prefSQL.SQLParser.Helper.DetermineParameters(ansiSql, out parameter, out strQuery, out operators, out numberOfRecords); var sw = new Stopwatch(); foreach (IEnumerable <CLRSafeHashSet <int> > subset in producedSubsets) { var subsetsProducer = new FixedSkylineSamplingSubsetsProducer(subset); var utility = new SkylineSamplingUtility(subsetsProducer); var skylineSample = new SkylineSampling(utility) { SubsetCount = prefSqlModel.SkylineSampleCount, SubsetDimension = prefSqlModel.SkylineSampleDimension, SelectedStrategy = common.SkylineType }; sw.Restart(); DataTable dataTable = skylineSample.GetSkylineTable(strQuery, operators); sw.Stop(); objectsCount += dataTable.Rows.Count; timeSpent += skylineSample.TimeMilliseconds; foreach (CLRSafeHashSet <int> attribute in subset) { Console.Write("["); foreach (int attribute1 in attribute) { Console.Write(attribute1 + ","); } Console.Write("],"); } Console.WriteLine(); Console.WriteLine("alg time : " + skylineSample.TimeMilliseconds); Console.WriteLine("full time : " + sw.ElapsedMilliseconds); Console.WriteLine("objects : " + dataTable.Rows.Count); } Console.WriteLine("time average: " + (double)timeSpent / producedSubsets.Count); Console.WriteLine("objects average: " + (double)objectsCount / producedSubsets.Count); }
public void TestSamplingBinomialCoefficient() { int n = int.Parse(TestContext.DataRow["n"].ToString()); int[] coefficients = TestContext.DataRow["coefficients"].ToString().Split(',').Select(int.Parse).ToArray(); for (var k = 0; k <= n; k++) { int expected = coefficients[k]; int actual = SkylineSamplingUtility.BinomialCoefficient(n, k); Assert.AreEqual(expected, actual); } }
public void TestSamplingNumberOfObjectsWithinSampleSkyline() { string skylineSampleSQL = TestContext.DataRow["skylineSampleSQL"].ToString(); string testComment = TestContext.DataRow["comment"].ToString(); int expectedNumberOfSkylineSampleObjects = int.Parse(TestContext.DataRow["expectedNumberOfSkylineSampleObjects"].ToString()); Debug.WriteLine(testComment); Debug.WriteLine(skylineSampleSQL); string baseQuery; string operators; int numberOfRecords; string[] parameter; var common = new SQLCommon { SkylineType = new SkylineBNL() { Provider = Helper.ProviderName, ConnectionString = Helper.ConnectionString } }; PrefSQLModel prefSqlModelSkylineSample = common.GetPrefSqlModelFromPreferenceSql(skylineSampleSQL); string ansiSql = common.GetAnsiSqlFromPrefSqlModel(prefSqlModelSkylineSample); prefSQL.SQLParser.Helper.DetermineParameters(ansiSql, out parameter, out baseQuery, out operators, out numberOfRecords); IEnumerable <CLRSafeHashSet <int> > useSubsets = UseSubsets(prefSqlModelSkylineSample); var subsetsProducer = new FixedSkylineSamplingSubsetsProducer(useSubsets); var utility = new SkylineSamplingUtility(subsetsProducer); var skylineSample = new SkylineSampling(utility) { SubsetCount = prefSqlModelSkylineSample.SkylineSampleCount, SubsetDimension = prefSqlModelSkylineSample.SkylineSampleDimension, SelectedStrategy = common.SkylineType }; DataTable skyline = skylineSample.GetSkylineTable(baseQuery, operators); Assert.AreEqual(expectedNumberOfSkylineSampleObjects, skyline.Rows.Count, "Unexpected number of Sample Skyline objects."); }
public void TestSamplingProducedSubsets() { string testComment = TestContext.DataRow["comment"].ToString(); Debug.WriteLine(testComment); int attributesCount = int.Parse(TestContext.DataRow["attributesCount"].ToString()); int subsetsCount = int.Parse(TestContext.DataRow["subsetsCount"].ToString()); int subsetDimension = int.Parse(TestContext.DataRow["subsetDimension"].ToString()); var subjectUnderTest = new SkylineSamplingUtility { AllPreferencesCount = attributesCount, SubsetCount = subsetsCount, SubsetDimension = subsetDimension }; var preferencesInProducedSubsets = new HashSet <HashSet <int> >(); foreach (CLRSafeHashSet <int> subset in subjectUnderTest.Subsets) { preferencesInProducedSubsets.Add(subset.ToUnsafeForCLRHashSet()); } HashSet <HashSet <int> > preferencesInExpectedSubsets = ExpectedSubsets(); Assert.AreEqual(preferencesInExpectedSubsets.Count, preferencesInProducedSubsets.Count, "Number of expected subsets is not equal to number of actual subsets produced."); foreach (HashSet <int> preferencesInSingleExpectedSubset in preferencesInExpectedSubsets) { var expectedSubsetIsContainedInProducedSubsets = false; foreach (HashSet <int> preferencesInSingleProducedSubset in preferencesInProducedSubsets) { if (preferencesInSingleProducedSubset.SetEquals(preferencesInSingleExpectedSubset)) { expectedSubsetIsContainedInProducedSubsets = true; } } Assert.IsTrue(expectedSubsetIsContainedInProducedSubsets, string.Format("Expected subset not produced: {0}.", string.Join(", ", preferencesInSingleExpectedSubset))); } }
public void TestSamplingOutsideOfValidIntervalParametersForBinomialCoefficient() { int n = int.Parse(TestContext.DataRow["n"].ToString()); int[] coefficients = TestContext.DataRow["coefficients"].ToString().Split(',').Select(int.Parse).ToArray(); const int expected = 0; int actual = SkylineSamplingUtility.BinomialCoefficient(n, -1); Assert.AreEqual(expected, actual); actual = SkylineSamplingUtility.BinomialCoefficient(n, -2); Assert.AreEqual(expected, actual); actual = SkylineSamplingUtility.BinomialCoefficient(n, n + 1); Assert.AreEqual(expected, actual); actual = SkylineSamplingUtility.BinomialCoefficient(n, n + 2); Assert.AreEqual(expected, actual); }
public void TestSamplingNumberOfObjectsWithinSampleSkyline() { string skylineSampleSQL = TestContext.DataRow["skylineSampleSQL"].ToString(); string testComment = TestContext.DataRow["comment"].ToString(); int expectedNumberOfSkylineSampleObjects = int.Parse(TestContext.DataRow["expectedNumberOfSkylineSampleObjects"].ToString()); Debug.WriteLine(testComment); Debug.WriteLine(skylineSampleSQL); string baseQuery; string operators; int numberOfRecords; string[] parameter; var common = new SQLCommon { SkylineType = new SkylineBNL() {Provider = Helper.ProviderName, ConnectionString = Helper.ConnectionString} }; PrefSQLModel prefSqlModelSkylineSample = common.GetPrefSqlModelFromPreferenceSql(skylineSampleSQL); string ansiSql = common.GetAnsiSqlFromPrefSqlModel(prefSqlModelSkylineSample); prefSQL.SQLParser.Helper.DetermineParameters(ansiSql, out parameter, out baseQuery, out operators, out numberOfRecords); IEnumerable<CLRSafeHashSet<int>> useSubsets = UseSubsets(prefSqlModelSkylineSample); var subsetsProducer = new FixedSkylineSamplingSubsetsProducer(useSubsets); var utility = new SkylineSamplingUtility(subsetsProducer); var skylineSample = new SkylineSampling(utility) { SubsetCount = prefSqlModelSkylineSample.SkylineSampleCount, SubsetDimension = prefSqlModelSkylineSample.SkylineSampleDimension, SelectedStrategy = common.SkylineType }; DataTable skyline = skylineSample.GetSkylineTable(baseQuery, operators); Assert.AreEqual(expectedNumberOfSkylineSampleObjects, skyline.Rows.Count, "Unexpected number of Sample Skyline objects."); }
public void TestSamplingIncorrectSubsetQueries() { var hasExceptionBeenRaised = false; string testComment = TestContext.DataRow["comment"].ToString(); Debug.WriteLine(testComment); int attributesCount = int.Parse(TestContext.DataRow["attributesCount"].ToString()); int subsetsCount = int.Parse(TestContext.DataRow["subsetsCount"].ToString()); int subsetDimension = int.Parse(TestContext.DataRow["subsetDimension"].ToString()); var subjectUnderTest = new SkylineSamplingUtility { AllPreferencesCount = attributesCount, SubsetCount = subsetsCount, SubsetDimension = subsetDimension }; try { var subsets = new HashSet <HashSet <int> >(); foreach (CLRSafeHashSet <int> subset in subjectUnderTest.Subsets) { subsets.Add(subset.ToUnsafeForCLRHashSet()); } } catch (Exception exception) { hasExceptionBeenRaised = true; Debug.WriteLine(exception.Message); } if (!hasExceptionBeenRaised) { Assert.Fail("Syntactically incorrect SQL Query should have thrown an Exception."); } }
public void TestSamplingIncorrectSubsetQueries() { var hasExceptionBeenRaised = false; string testComment = TestContext.DataRow["comment"].ToString(); Debug.WriteLine(testComment); int attributesCount = int.Parse(TestContext.DataRow["attributesCount"].ToString()); int subsetsCount = int.Parse(TestContext.DataRow["subsetsCount"].ToString()); int subsetDimension = int.Parse(TestContext.DataRow["subsetDimension"].ToString()); var subjectUnderTest = new SkylineSamplingUtility { AllPreferencesCount = attributesCount, SubsetCount = subsetsCount, SubsetDimension = subsetDimension }; try { var subsets = new HashSet<HashSet<int>>(); foreach (CLRSafeHashSet<int> subset in subjectUnderTest.Subsets) { subsets.Add(subset.ToUnsafeForCLRHashSet()); } } catch (Exception exception) { hasExceptionBeenRaised = true; Debug.WriteLine(exception.Message); } if (!hasExceptionBeenRaised) { Assert.Fail("Syntactically incorrect SQL Query should have thrown an Exception."); } }
public void TestSamplingProducedSubsets() { string testComment = TestContext.DataRow["comment"].ToString(); Debug.WriteLine(testComment); int attributesCount = int.Parse(TestContext.DataRow["attributesCount"].ToString()); int subsetsCount = int.Parse(TestContext.DataRow["subsetsCount"].ToString()); int subsetDimension = int.Parse(TestContext.DataRow["subsetDimension"].ToString()); var subjectUnderTest = new SkylineSamplingUtility { AllPreferencesCount = attributesCount, SubsetCount = subsetsCount, SubsetDimension = subsetDimension }; var preferencesInProducedSubsets=new HashSet<HashSet<int>>(); foreach (CLRSafeHashSet<int> subset in subjectUnderTest.Subsets) { preferencesInProducedSubsets.Add(subset.ToUnsafeForCLRHashSet()); } HashSet<HashSet<int>> preferencesInExpectedSubsets = ExpectedSubsets(); Assert.AreEqual(preferencesInExpectedSubsets.Count, preferencesInProducedSubsets.Count, "Number of expected subsets is not equal to number of actual subsets produced."); foreach (HashSet<int> preferencesInSingleExpectedSubset in preferencesInExpectedSubsets) { var expectedSubsetIsContainedInProducedSubsets = false; foreach (HashSet<int> preferencesInSingleProducedSubset in preferencesInProducedSubsets) { if (preferencesInSingleProducedSubset.SetEquals(preferencesInSingleExpectedSubset)) { expectedSubsetIsContainedInProducedSubsets = true; } } Assert.IsTrue(expectedSubsetIsContainedInProducedSubsets, string.Format("Expected subset not produced: {0}.", string.Join(", ", preferencesInSingleExpectedSubset))); } }
public void TestSamplingOnlyNonDominatedObjectsWithinSampleSkyline() { string skylineSampleSql = TestContext.DataRow["skylineSampleSQL"].ToString(); string entireSkylineSql = TestContext.DataRow["entireSkylineSQL"].ToString(); string testComment = TestContext.DataRow["comment"].ToString(); Debug.WriteLine(testComment); Debug.WriteLine(skylineSampleSql); string baseQuery; string operators; int numberOfRecords; string[] parameter; var common = new SQLCommon { SkylineType = new SkylineBNL() { Provider = Helper.ProviderName, ConnectionString = Helper.ConnectionString } }; PrefSQLModel prefSqlModelSkylineSample = common.GetPrefSqlModelFromPreferenceSql(skylineSampleSql); string ansiSql = common.GetAnsiSqlFromPrefSqlModel(prefSqlModelSkylineSample); prefSQL.SQLParser.Helper.DetermineParameters(ansiSql, out parameter, out baseQuery, out operators, out numberOfRecords); IEnumerable<CLRSafeHashSet<int>> useSubsets = UseSubsets(prefSqlModelSkylineSample); var subsetsProducer = new FixedSkylineSamplingSubsetsProducer(useSubsets); var utility = new SkylineSamplingUtility(subsetsProducer); var skylineSample = new SkylineSampling(utility) { SubsetCount = prefSqlModelSkylineSample.SkylineSampleCount, SubsetDimension = prefSqlModelSkylineSample.SkylineSampleDimension, SelectedStrategy = common.SkylineType }; DataTable entireSkyline = common.ParseAndExecutePrefSQL(Helper.ConnectionString, Helper.ProviderName, entireSkylineSql); DataTable sampleSkyline = skylineSample.GetSkylineTable(baseQuery, operators); HashSet<int> entireSkylineObjectsIds = GetHashSetOfIdsFromDataTable(entireSkyline); HashSet<int> sampleSkylineObjectsIds = GetHashSetOfIdsFromDataTable(sampleSkyline); sampleSkylineObjectsIds.ExceptWith(entireSkylineObjectsIds); Debug.WriteLine("wrong objects:"); foreach (int i in sampleSkylineObjectsIds) { Debug.WriteLine(i); } Assert.IsTrue(sampleSkylineObjectsIds.IsSubsetOf(entireSkylineObjectsIds), "Dominated objects contained in Sample Skyline (i.e., objects which are not contained in the entire Skyline)."); }