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); |
+} |