gapi_int_garg_test.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // This file is part of OpenCV project.
  2. // It is subject to the license terms in the LICENSE file found in the top-level directory
  3. // of this distribution and at http://opencv.org/license.html.
  4. //
  5. // Copyright (C) 2018 Intel Corporation
  6. #include "../test_precomp.hpp"
  7. namespace opencv_test {
  8. // Tests on T/Spec/Kind matching ///////////////////////////////////////////////
  9. // {{
  10. template<class T, cv::detail::ArgKind Exp>
  11. struct Expected
  12. {
  13. using type = T;
  14. static const constexpr cv::detail::ArgKind kind = Exp;
  15. };
  16. template<typename T>
  17. struct GArgKind: public ::testing::Test
  18. {
  19. using Type = typename T::type;
  20. const cv::detail::ArgKind Kind = T::kind;
  21. };
  22. // The reason here is to _manually_ list types and their kinds
  23. // (and NOT reuse cv::detail::ArgKind::Traits<>, since it is a subject of testing)
  24. using GArg_Test_Types = ::testing::Types
  25. <
  26. // G-API types
  27. Expected<cv::GMat, cv::detail::ArgKind::GMAT>
  28. , Expected<cv::GMatP, cv::detail::ArgKind::GMATP>
  29. , Expected<cv::GFrame, cv::detail::ArgKind::GFRAME>
  30. , Expected<cv::GScalar, cv::detail::ArgKind::GSCALAR>
  31. , Expected<cv::GArray<int>, cv::detail::ArgKind::GARRAY>
  32. , Expected<cv::GArray<float>, cv::detail::ArgKind::GARRAY>
  33. , Expected<cv::GArray<cv::Point>, cv::detail::ArgKind::GARRAY>
  34. , Expected<cv::GArray<cv::Rect>, cv::detail::ArgKind::GARRAY>
  35. , Expected<cv::GOpaque<int>, cv::detail::ArgKind::GOPAQUE>
  36. , Expected<cv::GOpaque<float>, cv::detail::ArgKind::GOPAQUE>
  37. , Expected<cv::GOpaque<cv::Point>, cv::detail::ArgKind::GOPAQUE>
  38. , Expected<cv::GOpaque<cv::Rect>, cv::detail::ArgKind::GOPAQUE>
  39. // Built-in types
  40. , Expected<int, cv::detail::ArgKind::OPAQUE_VAL>
  41. , Expected<float, cv::detail::ArgKind::OPAQUE_VAL>
  42. , Expected<int*, cv::detail::ArgKind::OPAQUE_VAL>
  43. , Expected<cv::Point, cv::detail::ArgKind::OPAQUE_VAL>
  44. , Expected<std::string, cv::detail::ArgKind::OPAQUE_VAL>
  45. , Expected<cv::Mat, cv::detail::ArgKind::OPAQUE_VAL>
  46. , Expected<std::vector<int>, cv::detail::ArgKind::OPAQUE_VAL>
  47. , Expected<std::vector<cv::Point>, cv::detail::ArgKind::OPAQUE_VAL>
  48. >;
  49. TYPED_TEST_CASE(GArgKind, GArg_Test_Types);
  50. TYPED_TEST(GArgKind, LocalVar)
  51. {
  52. typename TestFixture::Type val{};
  53. cv::GArg arg(val);
  54. EXPECT_EQ(TestFixture::Kind, arg.kind);
  55. }
  56. TYPED_TEST(GArgKind, ConstLocalVar)
  57. {
  58. const typename TestFixture::Type val{};
  59. cv::GArg arg(val);
  60. EXPECT_EQ(TestFixture::Kind, arg.kind);
  61. }
  62. TYPED_TEST(GArgKind, RValue)
  63. {
  64. cv::GArg arg = cv::GArg(typename TestFixture::Type());
  65. EXPECT_EQ(TestFixture::Kind, arg.kind);
  66. }
  67. ////////////////////////////////////////////////////////////////////////////////
  68. TEST(GArg, HasWrap)
  69. {
  70. static_assert(!cv::detail::has_custom_wrap<cv::GMat>::value,
  71. "GMat has no custom marshalling logic");
  72. static_assert(!cv::detail::has_custom_wrap<cv::GScalar>::value,
  73. "GScalar has no custom marshalling logic");
  74. static_assert(cv::detail::has_custom_wrap<cv::GArray<int> >::value,
  75. "GArray<int> has custom marshalling logic");
  76. static_assert(cv::detail::has_custom_wrap<cv::GArray<std::string> >::value,
  77. "GArray<int> has custom marshalling logic");
  78. static_assert(cv::detail::has_custom_wrap<cv::GOpaque<int> >::value,
  79. "GOpaque<int> has custom marshalling logic");
  80. static_assert(cv::detail::has_custom_wrap<cv::GOpaque<std::string> >::value,
  81. "GOpaque<int> has custom marshalling logic");
  82. }
  83. TEST(GArg, GArrayU)
  84. {
  85. // Placing a GArray<T> into GArg automatically strips it to GArrayU
  86. cv::GArg arg1 = cv::GArg(cv::GArray<int>());
  87. EXPECT_NO_THROW(arg1.get<cv::detail::GArrayU>());
  88. cv::GArg arg2 = cv::GArg(cv::GArray<cv::Point>());
  89. EXPECT_NO_THROW(arg2.get<cv::detail::GArrayU>());
  90. }
  91. TEST(GArg, GOpaqueU)
  92. {
  93. // Placing a GOpaque<T> into GArg automatically strips it to GOpaqueU
  94. cv::GArg arg1 = cv::GArg(cv::GOpaque<int>());
  95. EXPECT_NO_THROW(arg1.get<cv::detail::GOpaqueU>());
  96. cv::GArg arg2 = cv::GArg(cv::GOpaque<cv::Point>());
  97. EXPECT_NO_THROW(arg2.get<cv::detail::GOpaqueU>());
  98. }
  99. } // namespace opencv_test