package org.reldb.rel.tests.main; import org.junit.After; import org.junit.Test; import org.reldb.rel.tests.BaseOfTest; import org.reldb.rel.v0.values.*; public class TestRecursion extends BaseOfTest { @Test public void testRecursion() { String src = "BEGIN;\n" + "OPERATOR go() RETURNS INTEGER;\n" + "BEGIN;\n" + "var a integer;\n" + "OPERATOR recursive(p integer);\n" + " BEGIN;\n" + " a := a + 1;\n" + " if p = 0 then\n" + " return;\n" + " else\n" + " CALL recursive(p - 1);\n" + " end if;\n" + " END;\n" + "END OPERATOR;\n" + "CALL recursive(10);\n" + "RETURN a;\n" + "END;\n" + "END OPERATOR;\n" + "END;\n" + "go()\n"; assertValueEquals(ValueInteger.select(generator, 11), testEvaluate(src).getValue()); } @After public void testRecursion_cleanup() { String src = "BEGIN;" + " DROP OPERATOR go();" + "END;" + "true"; assertValueEquals(ValueBoolean.select(generator, true), testEvaluate(src).getValue()); } }