| #ifndef POINTER_COMPARISON_TEST_HELPER_H |
| #define POINTER_COMPARISON_TEST_HELPER_H |
| |
| #include <vector> |
| #include <memory> |
| #include <cstdint> |
| #include <cassert> |
| |
| #include "test_macros.h" |
| |
| template <class T, template<class> class CompareTemplate> |
| void do_pointer_comparison_test() { |
| typedef CompareTemplate<T*> Compare; |
| typedef CompareTemplate<std::uintptr_t> UIntCompare; |
| #if TEST_STD_VER > 11 |
| typedef CompareTemplate<void> VoidCompare; |
| #else |
| typedef Compare VoidCompare; |
| #endif |
| std::vector<std::shared_ptr<T> > pointers; |
| const std::size_t test_size = 100; |
| for (size_t i=0; i < test_size; ++i) |
| pointers.push_back(std::shared_ptr<T>(new T())); |
| Compare comp; |
| UIntCompare ucomp; |
| VoidCompare vcomp; |
| for (size_t i=0; i < test_size; ++i) { |
| for (size_t j=0; j < test_size; ++j) { |
| T* lhs = pointers[i].get(); |
| T* rhs = pointers[j].get(); |
| std::uintptr_t lhs_uint = reinterpret_cast<std::uintptr_t>(lhs); |
| std::uintptr_t rhs_uint = reinterpret_cast<std::uintptr_t>(rhs); |
| assert(comp(lhs, rhs) == ucomp(lhs_uint, rhs_uint)); |
| assert(vcomp(lhs, rhs) == ucomp(lhs_uint, rhs_uint)); |
| } |
| } |
| } |
| |
| #endif // POINTER_COMPARISON_TEST_HELPER_H |