blob: 2731c56568f78b93894d81658d32812f82f85395 [file] [log] [blame]
---------------------------------------------------------------------------
-- Rules:
-- ------
-- 1) Any DB objects should be created w/o schema prefix,
-- since this file is executed in a separate schema context.
-- 2) There should be no DROP statements in this script, since
-- all objects created in the default schema will be cleaned-up outside.
---------------------------------------------------------------------------
---------------------------------------------------------------------------
-- Setup:
---------------------------------------------------------------------------
CREATE FUNCTION cm_install_test() RETURNS VOID AS $$
declare
result INT[];
result2 INT;
begin
-- DROP TABLE IF EXISTS data;
CREATE TABLE "CM_DATA"(class INT, a1 INT);
INSERT INTO "CM_DATA" SELECT 1,1 FROM generate_series(1,10000);
INSERT INTO "CM_DATA" SELECT 1,2 FROM generate_series(1,15000);
INSERT INTO "CM_DATA" SELECT 1,3 FROM generate_series(1,10000);
INSERT INTO "CM_DATA" SELECT 2,5 FROM generate_series(1,1000);
INSERT INTO "CM_DATA" SELECT 2,6 FROM generate_series(1,1000);
-- DROP TABLE IF EXISTS result_table;
CREATE TABLE cm_result_table AS
SELECT (MADLIB_SCHEMA.cmsketch_count(MADLIB_SCHEMA.cmsketch(a1),2)) as val FROM "CM_DATA" GROUP BY class ORDER BY class;
SELECT array( SELECT val FROM cm_result_table) INTO result;
IF ((result[1] + result[2]) != 15000) THEN
RAISE EXCEPTION 'Incorrect cmsketch_count results, got %',result;
END IF;
TRUNCATE cm_result_table;
INSERT INTO cm_result_table
SELECT MADLIB_SCHEMA.cmsketch_rangecount(MADLIB_SCHEMA.cmsketch(a1),3,6) FROM "CM_DATA" GROUP BY class ORDER BY class;
SELECT array( SELECT val FROM cm_result_table) INTO result;
IF (result[1] + result[2] != 12000) THEN
RAISE EXCEPTION 'Incorrect cmsketch_rangecount results, got %',result;
END IF;
TRUNCATE cm_result_table;
SELECT MADLIB_SCHEMA.cmsketch_centile(MADLIB_SCHEMA.cmsketch(a1),90,count(*)) INTO result2 FROM "CM_DATA";
IF result2 != 3 THEN
RAISE EXCEPTION 'Incorrect cmsketch_centile results, got %',result2;
END IF;
PERFORM MADLIB_SCHEMA.cmsketch_width_histogram(MADLIB_SCHEMA.cmsketch(a1),0,10,2) FROM "CM_DATA";
PERFORM MADLIB_SCHEMA.cmsketch_depth_histogram(MADLIB_SCHEMA.cmsketch(a1),2) FROM "CM_DATA";
-- SELECT class,fmsketch_dcount(a1) FROM cm_data GROUP BY class;
-- SELECT mfvsketch_top_histogram(a1,5) FROM cm_data;
RAISE INFO 'CM-Sketches install checks passed';
RETURN;
end
$$ language plpgsql;
---------------------------------------------------------------------------
-- Test:
---------------------------------------------------------------------------
SELECT cm_install_test();
-- Basic methods
select cmsketch_count(cmsketch(i),5) from generate_series(1,10000) as T(i);
select cmsketch_rangecount(cmsketch(i),1,1025) from generate_series(1,10000) as T(i);
select cmsketch_rangecount(cmsketch(i),1,200) from generate_series(1,10000) as R(i);
select cmsketch_width_histogram(cmsketch(i), min(i), max(i), 4) from generate_series(1,10000) as R(i);
select min(i),
cmsketch_centile(cmsketch(i), 25, count(i)) AS quartile1,
cmsketch_centile(cmsketch(i), 50, count(i)) AS quartile2,
cmsketch_median(cmsketch(i), count(i)) AS median,
cmsketch_centile(cmsketch(i), 75, count(i)) AS quartile3,
max(i)
from generate_series(1,10000) as R(i);
select cmsketch_depth_histogram(cmsketch(i), 4) from generate_series(1,10000) as R(i);
-- Test for all-NULL column
select cmsketch_count(cmsketch(NULL), 5) from generate_series(1,10000) as R(i) where i < 0;