| Index: tests/FunctionTest.cpp
|
| diff --git a/tests/FunctionTest.cpp b/tests/FunctionTest.cpp
|
| index 6fffcbd43ae92d5699aa7d3194a68135b1b2078c..21b60110ee076db7d607295f475a872283619d25 100644
|
| --- a/tests/FunctionTest.cpp
|
| +++ b/tests/FunctionTest.cpp
|
| @@ -31,3 +31,23 @@ DEF_TEST(Function, r) {
|
| int a = 1, b = 1, c = 1, d = 1, e = 1;
|
| test_add_five(r, SkFunction<int(int)>([&](int x) { return x + a + b + c + d + e; }));
|
| }
|
| +
|
| +DEF_TEST(Function_forwarding, r) {
|
| + class MoveOnlyAdd5 : SkNoncopyable {
|
| + public:
|
| + MoveOnlyAdd5() {}
|
| + MoveOnlyAdd5(MoveOnlyAdd5&&) {}
|
| + MoveOnlyAdd5& operator=(MoveOnlyAdd5&&) { return *this; }
|
| +
|
| + int operator()(int x) { return x + 5; }
|
| + };
|
| +
|
| + // Makes sure we forward the functor when constructing SkFunction.
|
| + test_add_five(r, SkFunction<int(int)>(MoveOnlyAdd5()));
|
| +
|
| + // Makes sure we forward arguments when calling SkFunction.
|
| + SkFunction<int(int, MoveOnlyAdd5&&, int)> b([](int x, MoveOnlyAdd5&& f, int y) {
|
| + return x * f(y);
|
| + });
|
| + REPORTER_ASSERT(r, b(2, MoveOnlyAdd5(), 4) == 18);
|
| +}
|
|
|