diff options
Diffstat (limited to 'orc-rt/unittests/SPSWrapperFunctionTest.cpp')
-rw-r--r-- | orc-rt/unittests/SPSWrapperFunctionTest.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/orc-rt/unittests/SPSWrapperFunctionTest.cpp b/orc-rt/unittests/SPSWrapperFunctionTest.cpp index d0f06e8..ed085f2 100644 --- a/orc-rt/unittests/SPSWrapperFunctionTest.cpp +++ b/orc-rt/unittests/SPSWrapperFunctionTest.cpp @@ -95,6 +95,29 @@ TEST(SPSWrapperFunctionUtilsTest, BinaryOpViaFunctionPointer) { EXPECT_EQ(Result, 42); } +static void +round_trip_string_via_span_sps_wrapper(orc_rt_SessionRef Session, void *CallCtx, + orc_rt_WrapperFunctionReturn Return, + orc_rt_WrapperFunctionBuffer ArgBytes) { + SPSWrapperFunction<SPSString(SPSString)>::handle( + Session, CallCtx, Return, ArgBytes, + [](move_only_function<void(std::string)> Return, span<const char> S) { + Return({S.data(), S.size()}); + }); +} + +TEST(SPSWrapperFunctionUtilsTest, RoundTripStringViaSpan) { + /// Test that the SPSWrapperFunction<...>::handle call in + /// round_trip_string_via_span_sps_wrapper can deserialize into a usable + /// span<const char>. + std::string Result; + SPSWrapperFunction<SPSString(SPSString)>::call( + DirectCaller(nullptr, round_trip_string_via_span_sps_wrapper), + [&](Expected<std::string> R) { Result = cantFail(std::move(R)); }, + std::string_view("hello, world!")); + EXPECT_EQ(Result, "hello, world!"); +} + static void improbable_feat_sps_wrapper(orc_rt_SessionRef Session, void *CallCtx, orc_rt_WrapperFunctionReturn Return, |