/* file VectorTdx.test.cpp * * author: Roland Conybeare, Aug 2022 */ #include "reflect/Reflect.hpp" #include namespace xo { using xo::reflect::Reflect; using xo::reflect::TaggedPtr; using xo::reflect::TypeDescr; using xo::reflect::Metatype; namespace ut { TEST_CASE("std-vector-reflect-empty", "[reflect]") { std::vector v; TaggedPtr tp = Reflect::make_tp(&v); //TypeDescr td = Reflect::require>(); REQUIRE(Reflect::is_reflected>() == true); REQUIRE(tp.td()->complete_flag()); REQUIRE(tp.address() == &v); REQUIRE(tp.is_vector()); REQUIRE(tp.is_struct() == false); REQUIRE(tp.td()->metatype() == Metatype::mt_vector); REQUIRE(tp.recover_native>() == &v); REQUIRE(tp.n_child() == 0); /*since empty vector*/ // REQUIRE(tp.child_td(0) == ... } /*TEST_CASE(std-vector-reflect-empty)*/ TEST_CASE("std-vector-reflect-one", "[reflect]") { std::vector v = { 1.123 }; TaggedPtr tp = Reflect::make_tp(&v); REQUIRE(Reflect::is_reflected>() == true); REQUIRE(tp.td()->complete_flag()); REQUIRE(tp.address() == &v); REQUIRE(tp.is_vector()); REQUIRE(tp.is_struct() == false); REQUIRE(tp.td()->metatype() == Metatype::mt_vector); REQUIRE(tp.recover_native>() == &v); REQUIRE(tp.n_child() == 1); TaggedPtr tp0 = tp.get_child(0); REQUIRE(tp0.td()->complete_flag()); REQUIRE(tp0.address() == &(v[0])); REQUIRE(!tp0.is_vector()); REQUIRE(!tp0.is_struct()); REQUIRE(tp0.td()->metatype() == Metatype::mt_atomic); REQUIRE(tp0.recover_native() == &(v[0])); REQUIRE(tp0.n_child() == 0); } /*TEST_CASE(std-vector-reflect-one)*/ TEST_CASE("std-vector-reflect-two", "[reflect]") { std::vector v = { 1.123, 2.234 }; TaggedPtr tp = Reflect::make_tp(&v); REQUIRE(Reflect::is_reflected>() == true); REQUIRE(tp.td()->complete_flag()); REQUIRE(tp.address() == &v); REQUIRE(tp.is_vector()); REQUIRE(tp.is_struct() == false); REQUIRE(tp.td()->metatype() == Metatype::mt_vector); REQUIRE(tp.recover_native>() == &v); REQUIRE(tp.n_child() == 2); TaggedPtr tp0 = tp.get_child(0); REQUIRE(tp0.td()->complete_flag()); REQUIRE(tp0.address() == &(v[0])); REQUIRE(!tp0.is_vector()); REQUIRE(!tp0.is_struct()); REQUIRE(tp0.td()->metatype() == Metatype::mt_atomic); REQUIRE(tp0.recover_native() == &(v[0])); REQUIRE(tp0.n_child() == 0); TaggedPtr tp1 = tp.get_child(1); REQUIRE(tp1.td()->complete_flag()); REQUIRE(tp1.address() == &(v[1])); REQUIRE(!tp1.is_vector()); REQUIRE(!tp1.is_struct()); REQUIRE(tp1.td()->metatype() == Metatype::mt_atomic); REQUIRE(tp1.recover_native() == &(v[1])); REQUIRE(tp1.n_child() == 0); } /*TEST(std-vector-reflect-two)*/ // ----- std::array ----- TEST_CASE("std-array-reflect-empty", "[reflect]") { std::array v; TaggedPtr tp = Reflect::make_tp(&v); //TypeDescr td = Reflect::require>(); REQUIRE(Reflect::is_reflected>() == true); REQUIRE(tp.td()->complete_flag()); REQUIRE(tp.address() == &v); REQUIRE(tp.is_vector()); REQUIRE(tp.is_struct() == false); REQUIRE(tp.td()->metatype() == Metatype::mt_vector); REQUIRE(tp.recover_native>() == &v); REQUIRE(tp.n_child() == 0); /*since empty vector*/ // REQUIRE(tp.child_td(0) == ... } /*TEST_CASE(std-array-reflect-empty)*/ TEST_CASE("std-array-reflect-one", "[reflect]") { std::array v = { 1.123 }; TaggedPtr tp = Reflect::make_tp(&v); REQUIRE(Reflect::is_reflected>() == true); REQUIRE(tp.td()->complete_flag()); REQUIRE(tp.address() == &v); REQUIRE(tp.is_vector()); REQUIRE(tp.is_struct() == false); REQUIRE(tp.td()->metatype() == Metatype::mt_vector); REQUIRE(tp.recover_native>() == &v); REQUIRE(tp.n_child() == 1); TaggedPtr tp0 = tp.get_child(0); REQUIRE(tp0.td()->complete_flag()); REQUIRE(tp0.address() == &(v[0])); REQUIRE(!tp0.is_vector()); REQUIRE(!tp0.is_struct()); REQUIRE(tp0.td()->metatype() == Metatype::mt_atomic); REQUIRE(tp0.recover_native() == &(v[0])); REQUIRE(tp0.n_child() == 0); } /*TEST_CASE(std-array-reflect-one)*/ TEST_CASE("std-array-reflect-two", "[reflect]") { std::array v = { 1.123, 2.234 }; TaggedPtr tp = Reflect::make_tp(&v); REQUIRE(Reflect::is_reflected>() == true); REQUIRE(tp.td()->complete_flag()); REQUIRE(tp.address() == &v); REQUIRE(tp.is_vector()); REQUIRE(tp.is_struct() == false); REQUIRE(tp.td()->metatype() == Metatype::mt_vector); REQUIRE(tp.recover_native>() == &v); REQUIRE(tp.n_child() == 2); TaggedPtr tp0 = tp.get_child(0); REQUIRE(tp0.td()->complete_flag()); REQUIRE(tp0.address() == &(v[0])); REQUIRE(!tp0.is_vector()); REQUIRE(!tp0.is_struct()); REQUIRE(tp0.td()->metatype() == Metatype::mt_atomic); REQUIRE(tp0.recover_native() == &(v[0])); REQUIRE(tp0.n_child() == 0); TaggedPtr tp1 = tp.get_child(1); REQUIRE(tp1.td()->complete_flag()); REQUIRE(tp1.address() == &(v[1])); REQUIRE(!tp1.is_vector()); REQUIRE(!tp1.is_struct()); REQUIRE(tp1.td()->metatype() == Metatype::mt_atomic); REQUIRE(tp1.recover_native() == &(v[1])); REQUIRE(tp1.n_child() == 0); } /*TEST(std-array-reflect-two)*/ } /*namespace ut*/ } /*namespace xo*/ /* end VectorTdx.test.cpp */