| package groovy |
| |
| /** |
| * @author Hallvard Tr�tteberg |
| * @version $Revision$ |
| */ |
| class ClosureCurryTest extends GroovyTestCase { |
| |
| void testCurry() { |
| def clos1 = {s1, s2 -> s1 + s2} |
| def clos2 = clos1.curry("hi") |
| def value = clos2("there") |
| assert value == "hithere" |
| |
| def clos3 = {s1, s2, s3 -> s1 + s2 + s3} |
| def clos4 = clos3.curry('a') |
| def clos5 = clos4.curry('b') |
| def clos6 = clos4.curry('x') |
| def clos7 = clos4.curry('f', 'g') |
| value = clos5('c') |
| assert value == "abc" |
| value = clos6('c') |
| assert value == "axc" |
| value = clos4('y', 'z') |
| assert value == "ayz" |
| value = clos7() |
| assert value == "afg" |
| |
| clos3 = {s1, s2, s3 -> s1 + s2 + s3}.asWritable() |
| clos4 = clos3.curry('a') |
| clos5 = clos4.curry('b') |
| clos6 = clos4.curry('x') |
| clos7 = clos4.curry('f', 'g') |
| value = clos5('c') |
| assert value == "abc" |
| value = clos6('c') |
| assert value == "axc" |
| value = clos4('y', 'z') |
| assert value == "ayz" |
| value = clos7() |
| assert value == "afg" |
| |
| clos3 = {s1, s2, s3 -> s1 + s2 + s3} |
| clos4 = clos3.curry('a').asWritable() |
| clos5 = clos4.curry('b').asWritable() |
| clos6 = clos4.curry('x').asWritable() |
| clos7 = clos4.curry('f', 'g').asWritable() |
| value = clos5('c') |
| assert value == "abc" |
| value = clos6('c') |
| assert value == "axc" |
| value = clos4('y', 'z') |
| assert value == "ayz" |
| value = clos7() |
| assert value == "afg" |
| |
| clos3 = {s1, s2, s3 -> s1 + s2 + s3} |
| clos4 = clos3.curry('a').clone() |
| clos5 = clos4.curry('b').clone() |
| clos6 = clos4.curry('x').clone() |
| clos7 = clos4.curry('f', 'g').clone() |
| value = clos5('c') |
| assert value == "abc" |
| value = clos6('c') |
| assert value == "axc" |
| value = clos4('y', 'z') |
| assert value == "ayz" |
| value = clos7() |
| assert value == "afg" |
| |
| clos3 = {s1, s2, s3 -> s1 + s2 + s3} |
| clos4 = clos3.curry('a').asWritable().clone() |
| clos5 = clos4.curry('b').asWritable().clone() |
| clos6 = clos4.curry('x').asWritable().clone() |
| clos7 = clos4.curry('f', 'g').asWritable().clone() |
| value = clos5('c') |
| assert value == "abc" |
| value = clos6('c') |
| assert value == "axc" |
| value = clos4('y', 'z') |
| assert value == "ayz" |
| value = clos7() |
| assert value == "afg" |
| } |
| |
| void testParameterTypes() { |
| def cl1 = { String s1, int i -> return s1 + i } |
| assert "foo5" == cl1("foo", 5) |
| assert [String, int] == cl1.getParameterTypes().toList() |
| |
| def cl2 = cl1.curry("bla") |
| assert "bla4" == cl2(4) |
| assert null != cl2.getParameterTypes() |
| assert [int] == cl2.getParameterTypes().toList() |
| } |
| |
| void testDelegate() { |
| def res = null |
| def c = {a -> res = z} |
| def cc = c.curry(1) |
| |
| cc.delegate = [z: "goodbye"] |
| cc() |
| assert res == cc.delegate.z |
| } |
| } |