From 52c18e69a6d38a20cc9baf2b9adf62a68b47eec3 Mon Sep 17 00:00:00 2001 From: Gabriel Aubut-Lussier Date: Sat, 4 Feb 2017 14:08:58 -0500 Subject: [PATCH] Add test to pass unique_ptr to function expecting unique_ptr&&. --- unittests/compiled_tests.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/unittests/compiled_tests.cpp b/unittests/compiled_tests.cpp index 1a94c738..e09ad6d7 100644 --- a/unittests/compiled_tests.cpp +++ b/unittests/compiled_tests.cpp @@ -1192,6 +1192,38 @@ TEST_CASE("Call methods on base class through unique_ptr") CHECK(chai.eval("var uptr2 = make_Unique_Ptr_Test_Derived_Class(); uptr2.getI()") == 5); } +int move_Unique_Ptr(std::unique_ptr&& uptr) +{ + std::unique_ptr uptr2 = std::move(uptr); + return uptr2->getI(); +} + +TEST_CASE("Pass unique_ptr as a rvalue reference to a function") +{ + chaiscript::ChaiScript_Basic chai(create_chaiscript_stdlib(),create_chaiscript_parser()); + + chai.add(chaiscript::var(std::make_unique()), "uptr"); + chai.add(chaiscript::fun(move_Unique_Ptr), "move"); + + CHECK(chai.eval("move(uptr)") == 5); +} + +int move_Unique_Ptr_Base(std::unique_ptr&& uptr) +{ + std::unique_ptr uptr2 = std::move(uptr); + return uptr2->getI(); +} + +TEST_CASE("Pass unique_ptr as a rvalue reference to a function expecting unique_ptr&&") +{ + chaiscript::ChaiScript_Basic chai(create_chaiscript_stdlib(),create_chaiscript_parser()); + + chai.add(chaiscript::var(std::make_unique()), "uptr"); + chai.add(chaiscript::fun(move_Unique_Ptr_Base), "move"); + + CHECK(chai.eval("move(uptr)") == 5); +} + class A {