cfb26a1af4
checkIntFunction and checkIntFuncFunction need to be able to handle different types of functions being passed to them. The easiest way to achieve this is to make them generic. Change-Id: I1afd13fa9514244a33d2ba7ace1f137f01b2f2a8 Reviewed-on: https://dart-review.googlesource.com/19284 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Paul Berry <paulberry@google.com>
113 lines
2.3 KiB
Dart
113 lines
2.3 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
/**
|
|
* Test various forms of function literals.
|
|
*/
|
|
typedef int IntFunc(int);
|
|
|
|
class FunctionLiteralsTest {
|
|
static void checkIntFunction<T>(expected, int f(T x), arg) {
|
|
Expect.equals(expected, f(arg));
|
|
}
|
|
|
|
static void checkIntFuncFunction<T>(expected, IntFunc f(T x), arg) {
|
|
Expect.equals(expected, f(arg)(arg));
|
|
}
|
|
|
|
int func1(int x) => x;
|
|
|
|
int func2(x) => x;
|
|
|
|
int func3(int x) {
|
|
return x;
|
|
}
|
|
|
|
int func4(x) {
|
|
return x;
|
|
}
|
|
|
|
FunctionLiteralsTest() {}
|
|
|
|
static void testMain() {
|
|
var test = new FunctionLiteralsTest();
|
|
test.testArrow();
|
|
test.testArrowArrow();
|
|
test.testArrowBlock();
|
|
test.testBlock();
|
|
test.testBlockArrow();
|
|
test.testBlockBlock();
|
|
test.testFunctionRef();
|
|
}
|
|
|
|
void testArrow() {
|
|
checkIntFunction(42, (x) => x, 42);
|
|
checkIntFunction(42, (dynamic x) => x, 42);
|
|
}
|
|
|
|
void testArrowArrow() {
|
|
checkIntFuncFunction(84, (x) => (y) => x + y, 42);
|
|
checkIntFuncFunction(84, (dynamic x) => (y) => x + y, 42);
|
|
}
|
|
|
|
void testArrowBlock() {
|
|
checkIntFuncFunction(
|
|
84,
|
|
(x) => (y) {
|
|
return x + y;
|
|
},
|
|
42);
|
|
checkIntFuncFunction(
|
|
84,
|
|
(int x) => (y) {
|
|
return x + y;
|
|
},
|
|
42);
|
|
}
|
|
|
|
void testBlock() {
|
|
checkIntFunction(42, (x) {
|
|
return x;
|
|
}, 42);
|
|
checkIntFunction(42, (int x) {
|
|
return x;
|
|
}, 42);
|
|
}
|
|
|
|
void testBlockArrow() {
|
|
checkIntFuncFunction(84, (x) {
|
|
return (y) => x + y;
|
|
}, 42);
|
|
checkIntFuncFunction(84, (int x) {
|
|
return (y) => (x + y) as int;
|
|
}, 42);
|
|
}
|
|
|
|
void testBlockBlock() {
|
|
checkIntFuncFunction(84, (x) {
|
|
return (y) {
|
|
return x + y;
|
|
};
|
|
}, 42);
|
|
checkIntFuncFunction(84, (int x) {
|
|
return (y) {
|
|
return x + y;
|
|
};
|
|
}, 42);
|
|
}
|
|
|
|
void testFunctionRef() {
|
|
checkIntFunction(42, func1, 42);
|
|
checkIntFunction(42, func2, 42);
|
|
checkIntFunction(42, func3, 42);
|
|
checkIntFunction(42, func4, 42);
|
|
}
|
|
}
|
|
|
|
main() {
|
|
FunctionLiteralsTest.testMain();
|
|
}
|