#define CATCH_CONFIG_MAIN #include #include TEST_CASE("be_* address of returns virt_ptr") { // "virt_addrof be_val" returns "virt_ptr" REQUIRE((std::is_same, decltype(virt_addrof(std::declval>()))>::value)); // "virt_addrof be_struct" returns "virt_ptr" struct SomeStructure { }; REQUIRE((std::is_same, decltype(virt_addrof(std::declval>()))>::value)); // "virt_addrof be_array" returns "vitr_ptr" REQUIRE((std::is_same, decltype(virt_addrof(std::declval>()))>::value)); } TEST_CASE("virt_ptr dereference") { // Dereferencing "virt_ptr" returns "be2_val &" REQUIRE((std::is_same &, decltype(*std::declval>())>::value)); // Dereferencing "virt_ptr" returns "const be_val &" REQUIRE((std::is_same &, decltype(*std::declval>())>::value)); } TEST_CASE("virt_ptr cast") { // virt_ptr can be cast to virt_ptr REQUIRE((std::is_constructible, virt_ptr>::value)); // virt_ptr can not be cast to virt_ptr REQUIRE((!std::is_constructible, virt_ptr>::value)); REQUIRE((!std::is_constructible, virt_ptr>::value)); // Assign virt_ptr to be2_ptr REQUIRE((std::is_assignable, virt_ptr>::value)); // Can construct virt_ptr from virt_ptr REQUIRE((std::is_constructible, virt_ptr>::value)); } TEST_CASE("be_val values") { // Assign uint32_t to be2_val REQUIRE((std::is_assignable, uint32_t>::value)); // Array access of be_array returns a be_val & REQUIRE((std::is_same &, decltype(std::declval>()[1])>::value)); }