use "ounit" use "functional" def testAdditionOnNumbers() { assertEquals(6, 0 + 1 + 2 + 3) } def testSubtractionOnNumbers() { assertEquals(-6, 0 - 1 - 2 - 3) } def testPrefixIncrement() { a = 8 assertEquals(9, ++a) assertEquals(9, a) } def testPostfixIncrement() { a = 8 assertEquals(8, a++) assertEquals(9, a) } def testStringReversing() { assertEquals("tset", -"test") } def testStringMultiplication() { assertEquals("******", "*" * 6) } def testTypes() { assertSameType(0, 0.0) } /*def testFail() { assertTrue(false) }*/ def testScope() { x = 5 def func() { assertEquals(5, x) x += 10 assertEquals(15, x) } func(); assertEquals(15, x) } def testFibonacci() { def fib(n) { if n < 2 return n return fib(n-2) + fib(n-1) } assertEquals(3, fib(4)) assertEquals(21, fib(8)) } def testFunctionalChain() { data = [1,2,3,4,5,6,7] result = chain(data, ::filter, def(x) = x <= 4, ::sortby, def(x) = -x, ::map, def(x) = x * 2, ) assertEquals([8,6,4,2], result) } println runTests()