Exemple #1
0
        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).");
        }
Exemple #2
0
        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);
            }
        }
Exemple #4
0
        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).");
        }