#include "../test_precomp.hpp" #include "backends/common/serialization.hpp" namespace opencv_test { struct S11N_Basic: public ::testing::Test { template void put(T &&t) { cv::gimpl::s11n::ByteMemoryOutStream os; os << t; m_buffer = os.data(); } template T get() { // FIXME: This stream API needs a fix-up cv::gimpl::s11n::ByteMemoryInStream is(m_buffer); T t{}; is >> t; return t; } private: std::vector m_buffer; }; TEST_F(S11N_Basic, Test_int_pos) { int x = 42; put(x); EXPECT_EQ(x, get()); } TEST_F(S11N_Basic, Test_int_neg) { int x = -42; put(x); EXPECT_EQ(x, get()); } TEST_F(S11N_Basic, Test_fp32) { float x = 3.14f; put(x); EXPECT_EQ(x, get()); } TEST_F(S11N_Basic, Test_fp64) { double x = 3.14; put(x); EXPECT_EQ(x, get()); } TEST_F(S11N_Basic, Test_vector_int) { std::vector v = {1,2,3}; put(v); EXPECT_EQ(v, get >()); } TEST_F(S11N_Basic, Test_vector_cvSize) { std::vector v = { cv::Size(640, 480), cv::Size(1280, 1024), }; put(v); EXPECT_EQ(v, get >()); } TEST_F(S11N_Basic, Test_vector_string) { std::vector v = { "hello", "world", "ok!" }; put(v); EXPECT_EQ(v, get >()); } TEST_F(S11N_Basic, Test_vector_empty) { std::vector v; put(v); EXPECT_EQ(v, get >()); } TEST_F(S11N_Basic, Test_variant) { using S = std::string; using V = cv::util::variant; V v1{42}, v2{S{"hey"}}; put(v1); EXPECT_EQ(v1, get()); put(v2); EXPECT_EQ(v2, get()); } TEST_F(S11N_Basic, Test_GArg_int) { const int x = 42; cv::GArg gs(x); put(gs); cv::GArg gd = get(); EXPECT_EQ(cv::detail::ArgKind::OPAQUE_VAL, gd.kind); EXPECT_EQ(cv::detail::OpaqueKind::CV_INT, gd.opaque_kind); EXPECT_EQ(x, gs.get()); } TEST_F(S11N_Basic, Test_GArg_Point) { const cv::Point pt{1,2}; cv::GArg gs(pt); put(gs); cv::GArg gd = get(); EXPECT_EQ(cv::detail::ArgKind::OPAQUE_VAL, gd.kind); EXPECT_EQ(cv::detail::OpaqueKind::CV_POINT, gd.opaque_kind); EXPECT_EQ(pt, gs.get()); } TEST_F(S11N_Basic, Test_Mat_full) { auto mat = cv::Mat::eye(cv::Size(64,64), CV_8UC3); put(mat); EXPECT_EQ(0, cv::norm(mat, get(), cv::NORM_INF)); } TEST_F(S11N_Basic, Test_Mat_view) { auto mat = cv::Mat::eye(cv::Size(320,240), CV_8UC3); auto view = mat(cv::Rect(10,15,123,70)); put(view); EXPECT_EQ(0, cv::norm(view, get(), cv::NORM_INF)); } } // namespace opencv_test