!include once #1034831 // Gazelle 22 Function Include for Testing scope test_leftArrowScript_lambdas srecord #MyClass(int x) {} svoid test_leftArrowScript_lambdas() { // IF1 with global function (l) var test = new TestFunctionValues(l1 leftArrowVerbose); test.io([[map (IF1 l) (ll "hey ho" "world")]], ll(6, 5)).runAndClear(); // IF1 with global function & currying (plus) new TestFunctionValues(l1 leftArrowVerbose) .io([[map (IF1 plus 5) (ll 2 12)]], ll(7, 17)) .run(); // IF0 with method on implicit object class X { int i = 1; int next() { ret i++; } } new GazelleV_LeftArrowScriptParser parser; parser.allowTheWorld(new X, mc()); assertEqualsVerbose(ll(1, 2, 3), parser.parse("repF 3 (IF0 next)")!); // lambda from script-defined function! test.io([[ def twice x { joinWithSpace x x } map (IF1 twice) (ll "yes" "no") ]], ll("yes yes", "no no")); // ...and once again with curried arguments test.io([[ def subFrom100 a b c { minus 100 (intSum a b c) } map (IF1 subFrom100 10 5) (ll 2 22) ]], ll(83, 63)); test.runAndClear(); // inline lambda def!! test.io( "map (IF1 a -> new Pair a (neg a)) (ll 1 2)", ll(pair(1, -1), pair(2, -2))).runAndClear(); // short version for constructor call test.io( "map (IF1 " + shortClassName(MyClass) + ") (ll 1 2)", ll(MyClass(1), MyClass(2))).runAndClear(); }