diff --git a/test/test_inspect.cc b/test/test_inspect.cc index b669f1a..700671c 100644 --- a/test/test_inspect.cc +++ b/test/test_inspect.cc @@ -6,21 +6,90 @@ using pEp::CXX::Inspect; +int i{ 23 }; +std::stringstream addr_i{}; + +std::stringstream addr_null{}; + +//template +//T to_r_value(T& a) +//{ +// return a; +//} + +//template +//T* to_r_value_ref(T& a) +//{ +// return &a; +//} + + +int* to_r_value_ref(int& a) +{ + return &a; +} + int main() { - int i{ 23 }; - std::cout << pEp::CXX::Inspect::all(i) << std::endl; - std::stringstream ss_i{}; - ss_i << static_cast(&i); - assert(Inspect::type(i) == "i"); - assert(Inspect::addr(i) == ss_i.str()); - assert(Inspect::val(i) == std::to_string(i)); - - int *pi = &i; - std::stringstream ss_pi{}; - ss_pi << static_cast(&pi); - std::cout << pEp::CXX::Inspect::all(pi) << std::endl; - assert(Inspect::type(pi) == "Pi"); - assert(Inspect::addr(pi) == ss_pi.str()); - assert(Inspect::val(pi) == ss_i.str()); + pEp::Adapter::pEpLog::set_enabled(true); + addr_null << static_cast(nullptr); + addr_i << static_cast(&i); + + pEpLogH2("Test int"); + { + std::cout << Inspect::all(i) << std::endl; + assert(Inspect::type(i) == "i"); + assert(Inspect::addr(i) == addr_i.str()); + assert(Inspect::val(i) == std::to_string(i)); + } + + pEpLogH3("Test int&"); + { + int &ri = i; + std::cout << Inspect::all(ri) << std::endl; + assert(Inspect::type(ri) == "i"); + assert(Inspect::addr(ri) == addr_i.str()); + assert(Inspect::val(ri) == std::to_string(ri)); + } + + pEpLogH2("Test int*"); + { + int *pi = &i; + std::stringstream addr_pi{}; + addr_pi << static_cast(&pi); + std::cout << Inspect::all(pi) << std::endl; + assert(Inspect::type(pi) == "Pi"); + assert(Inspect::addr(pi) == addr_pi.str()); + assert(Inspect::val(pi) == addr_i.str()); + } + pEpLogH2("Test int* == NULL"); + { + int *pi = nullptr; + std::stringstream addr_pi{}; + addr_pi << static_cast(&pi); + std::cout << Inspect::all(pi) << std::endl; + assert(Inspect::type(pi) == "Pi"); + assert(Inspect::addr(pi) == addr_pi.str()); + assert(Inspect::val(pi) == addr_null.str()); + } + pEpLogH3("Test int*&"); + { + int *pi = &i; + std::stringstream addr_pi{}; + addr_pi << static_cast(&pi); + int *&rpi = pi; + std::cout << Inspect::all(rpi) << std::endl; + assert(Inspect::type(rpi) == "Pi"); + assert(Inspect::addr(rpi) == addr_pi.str()); + assert(Inspect::val(rpi) == addr_i.str()); + } + + pEpLogH3("Test int*&&"); + { + std::cout << Inspect::all(to_r_value_ref(i)) << std::endl; + assert(Inspect::type(to_r_value_ref(i)) == "Pi"); + // The address of the rvalue-ref is not pre-determinable + // assert(Inspect::addr(to_r_value(i)()) == addr_i.str()); + assert(Inspect::val(to_r_value_ref(i)) == addr_i.str()); + } }