aboutsummaryrefslogtreecommitdiff
path: root/orc-rt/unittests/SPSWrapperFunctionTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'orc-rt/unittests/SPSWrapperFunctionTest.cpp')
-rw-r--r--orc-rt/unittests/SPSWrapperFunctionTest.cpp23
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,