package org.reldb.rel.tests.main; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.reldb.rel.tests.BaseOfTest; public class TestAggregate extends BaseOfTest { @BeforeClass public static void testAggregateSetup() { String src = "begin;" + " VAR myvar REAL RELATION {x INT} KEY {x};" + " myvar := RELATION {" + " TUPLE {x 1}," + " TUPLE {x 2}," + " TUPLE {x 3}," + " TUPLE {x 4}," + " TUPLE {x 5}," + " TUPLE {x 6}" + " };" + "end;" + "true"; String expected = "true"; testEquals(expected, src); } @Test public void testAggregate00() { String src = "SUM(myvar, x)"; String expected = "21"; testEquals(expected, src); } @Test public void testAggregate01() { String src = "SUM(myvar, x) = AGGREGATE(myvar, x); RETURN VALUE1 + VALUE2; END AGGREGATE"; String expected = "true"; testEquals(expected, src); } @Test public void testAggregate02() { String src = "SUM(myvar, x * 10) = AGGREGATE(myvar, x * 10); RETURN VALUE1 + VALUE2; END AGGREGATE"; String expected = "true"; testEquals(expected, src); } @Test public void testAggregate03() { String src = "COUNT(myvar) = 6"; String expected = "true"; testEquals(expected, src); } @Test public void testAggregate04() { String src = "COUNT(REL {x INT} {}) = 0"; String expected = "true"; testEquals(expected, src); } @Test public void testAggregate05() { String src = "COUNT(REL {x INT} {}) = AGGREGATE(REL {x INT} {}, 1, 0); RETURN VALUE1 + VALUE2; END AGGREGATE"; String expected = "true"; testEquals(expected, src); } @Test public void testAggregate06() { String src = "COUNT(myvar) = AGGREGATE(myvar, 1, 0); RETURN VALUE1 + VALUE2; END AGGREGATE"; String expected = "true"; testEquals(expected, src); } @Test public void testAggregate07() { String src = "arithmeticMean FROM TUPLE FROM EXTEND " + " SUMMARIZE myvar: " + " { " + " total := AGGREGATE(x); RETURN VALUE1 + VALUE2; END AGGREGATE, " + " N := AGGREGATE(1); RETURN VALUE1 + VALUE2; END AGGREGATE " + " } " + ": {arithmeticMean := CAST_AS_RATIONAL(total) / CAST_AS_RATIONAL(N)} "; String expected = "3.5"; testEquals(expected, src); } @Test public void testAggregate08() { String src = "arithmeticMean FROM TUPLE FROM EXTEND " + " SUMMARIZE myvar: " + " { " + " total := AGGREGATE(x, 0); RETURN VALUE1 + VALUE2; END AGGREGATE, " + " N := AGGREGATE(1, 0); RETURN VALUE1 + VALUE2; END AGGREGATE " + " } " + ": {arithmeticMean := CAST_AS_RATIONAL(total) / CAST_AS_RATIONAL(N)} "; String expected = "3.5"; testEquals(expected, src); } @Test public void testAggregateDistinctAgainstSumDistinct() { String src = "BEGIN;\n" + "VAR a PRIVATE INIT(relation {\n" + " tuple {x 1, y 4.5, z \"test\"},\n" + " tuple {x 2, y 2.5, z \"test\"},\n" + " tuple {x 3, y 3.2, z \"glub\"},\n" + " tuple {x 4, y 4.5, z \"glub\"},\n" + " tuple {x 5, y 5.2, z \"test\"},\n" + " tuple {x 6, y 3.1, z \"zot\"},\n" + " tuple {x 7, y 4.5, z \"test\"}\n" + "}) KEY {ALL BUT};\n" + "END;\n" + "SUMMARIZE a PER (a {z}) : {totalOfxSUMD := SUMD(x), totalOfxAGGREGATED := AGGREGATED(x); RETURN VALUE1 + VALUE2; END AGGREGATED}"; testEquals("RELATION {z CHARACTER, totalOfxSUMD INTEGER, totalOfxAGGREGATED INTEGER} {\n\tTUPLE {z \"test\", totalOfxSUMD 15, totalOfxAGGREGATED 15},\n\tTUPLE {z \"glub\", totalOfxSUMD 7, totalOfxAGGREGATED 7},\n\tTUPLE {z \"zot\", totalOfxSUMD 6, totalOfxAGGREGATED 6}\n}", src); } @AfterClass public static void testSummarizeComplexTeardown() { String src = "begin;" + " DROP VAR myvar;" + "end;" + "true"; String expected = "true"; testEquals(expected, src); } }