Implement returning unique_ptr from Rust to C++
diff --git a/tests/ffi/lib.rs b/tests/ffi/lib.rs
index 4c4f41c..2df3337 100644
--- a/tests/ffi/lib.rs
+++ b/tests/ffi/lib.rs
@@ -37,7 +37,7 @@
         fn r_return_primitive() -> usize;
         fn r_return_shared() -> Shared;
         fn r_return_box() -> Box<R>;
-        //TODO fn r_return_unique_ptr() -> UniquePtr<C>;
+        fn r_return_unique_ptr() -> UniquePtr<C>;
         fn r_return_ref(shared: &Shared) -> &usize;
         fn r_return_str(shared: &Shared) -> &str;
         fn r_return_rust_string() -> String;
@@ -69,6 +69,13 @@
     Box::new(2020)
 }
 
+fn r_return_unique_ptr() -> UniquePtr<ffi::C> {
+    extern "C" {
+        fn cxx_test_suite_get_unique_ptr() -> *mut ffi::C;
+    }
+    unsafe { UniquePtr::from_raw(cxx_test_suite_get_unique_ptr()) }
+}
+
 fn r_return_ref(shared: &ffi::Shared) -> &usize {
     &shared.z
 }
diff --git a/tests/ffi/tests.cc b/tests/ffi/tests.cc
index 3d30ebe..245cfbe 100644
--- a/tests/ffi/tests.cc
+++ b/tests/ffi/tests.cc
@@ -90,6 +90,10 @@
   }
 }
 
+extern "C" C *cxx_test_suite_get_unique_ptr() {
+  return std::unique_ptr<C>(new C{2020}).release();
+}
+
 extern "C" const char *cxx_run_test() noexcept {
 #define STRINGIFY(x) #x
 #define TOSTRING(x) STRINGIFY(x)
@@ -103,6 +107,7 @@
   ASSERT(r_return_primitive() == 2020);
   ASSERT(r_return_shared().z == 2020);
   ASSERT(cxx_test_suite_r_is_correct(&*r_return_box()));
+  ASSERT(r_return_unique_ptr()->get() == 2020);
   ASSERT(r_return_ref(Shared{2020}) == 2020);
   ASSERT(std::string(r_return_str(Shared{2020})) == "2020");
   ASSERT(std::string(r_return_rust_string()) == "2020");