From da5a91bad4cd68a82bbd263fd6158f29fe5a6676 Mon Sep 17 00:00:00 2001 From: Adam Wulkiewicz Date: Fri, 14 Dec 2012 22:59:19 +0000 Subject: [PATCH] static_vector error fixed, tests added. [SVN r81960] --- .../extensions/index/static_vector.hpp | 2 +- test/static_vector.cpp | 151 ++++++++++++++++-- 2 files changed, 143 insertions(+), 10 deletions(-) diff --git a/include/boost/geometry/extensions/index/static_vector.hpp b/include/boost/geometry/extensions/index/static_vector.hpp index 8968b4c5d..981cf4a65 100644 --- a/include/boost/geometry/extensions/index/static_vector.hpp +++ b/include/boost/geometry/extensions/index/static_vector.hpp @@ -80,7 +80,7 @@ public: { //BOOST_ASSERT_MSG(other.m_size <= Capacity, "capacity too small"); - assign(other->ptr(0), other->ptr(other.m_size)); + assign(other.ptr(0), other.ptr(other.m_size)); return *this; } diff --git a/test/static_vector.cpp b/test/static_vector.cpp index 7756dd7df..dbd6c854c 100644 --- a/test/static_vector.cpp +++ b/test/static_vector.cpp @@ -18,6 +18,7 @@ class value_ndc { public: value_ndc(int a) : aa(a) {} + ~value_ndc() {} bool operator==(value_ndc const& v) const { return aa == v.aa; } private: value_ndc(value_ndc const&) {} @@ -29,6 +30,7 @@ class value_nd { public: value_nd(int a) : aa(a) {} + ~value_nd() {} bool operator==(value_nd const& v) const { return aa == v.aa; } private: int aa; @@ -38,6 +40,7 @@ class value_nc { public: value_nc(int a = 0) : aa(a) {} + ~value_nc() {} bool operator==(value_nc const& v) const { return aa == v.aa; } private: value_nc(value_nc const&) {} @@ -46,7 +49,7 @@ private: }; template -void test_ctor_d() +void test_ctor_ndc() { static_vector s; BOOST_CHECK(s.size() == 0); @@ -55,7 +58,7 @@ void test_ctor_d() } template -void test_ctor_r(size_t n) +void test_ctor_nc(size_t n) { static_vector s(n); BOOST_CHECK(s.size() == n); @@ -73,7 +76,7 @@ void test_ctor_r(size_t n) } template -void test_ctor_rv(size_t n, T const& v) +void test_ctor_nd(size_t n, T const& v) { static_vector s(n, v); BOOST_CHECK(s.size() == n); @@ -94,14 +97,144 @@ void test_ctor_rv(size_t n, T const& v) } } +template +void test_resize_nc(size_t n) +{ + static_vector s; + + s.resize(n); + BOOST_CHECK(s.size() == n); + BOOST_CHECK(s.capacity() == N); + BOOST_CHECK_THROW( s.at(n), std::out_of_range ); + if ( 1 < n ) + { + s[0] = T(10); + BOOST_CHECK(T(10) == s[0]); + BOOST_CHECK(T(10) == s.at(0)); + s.at(1) = T(20); + BOOST_CHECK(T(20) == s[1]); + BOOST_CHECK(T(20) == s.at(1)); + } +} + +template +void test_resize_nd(size_t n, T const& v) +{ + static_vector s; + + s.resize(n, v); + BOOST_CHECK(s.size() == n); + BOOST_CHECK(s.capacity() == N); + BOOST_CHECK_THROW( s.at(n), std::out_of_range ); + if ( 1 < n ) + { + BOOST_CHECK(v == s[0]); + BOOST_CHECK(v == s.at(0)); + BOOST_CHECK(v == s[1]); + BOOST_CHECK(v == s.at(1)); + s[0] = T(10); + BOOST_CHECK(T(10) == s[0]); + BOOST_CHECK(T(10) == s.at(0)); + s.at(1) = T(20); + BOOST_CHECK(T(20) == s[1]); + BOOST_CHECK(T(20) == s.at(1)); + } +} + +template +void test_push_back_nd() +{ + static_vector s; + + BOOST_CHECK(s.size() == 0); + BOOST_CHECK_THROW( s.at(0), std::out_of_range ); + + for ( size_t i = 0 ; i < N ; ++i ) + { + s.push_back(T(i)); + BOOST_CHECK(s.size() == i + 1); + BOOST_CHECK_THROW( s.at(i + 1), std::out_of_range ); + BOOST_CHECK(T(i) == s.at(i)); + BOOST_CHECK(T(i) == s[i]); + BOOST_CHECK(T(i) == s.back()); + BOOST_CHECK(T(0) == s.front()); + } +} + +template +void test_pop_back_nd() +{ + static_vector s; + + for ( size_t i = 0 ; i < N ; ++i ) + s.push_back(i); + + for ( size_t i = N ; i > 1 ; --i ) + { + s.pop_back(); + BOOST_CHECK(s.size() == i - 1); + BOOST_CHECK_THROW( s.at(i - 1), std::out_of_range ); + BOOST_CHECK(T(i - 2) == s.at(i - 2)); + BOOST_CHECK(T(i - 2) == s[i - 2]); + BOOST_CHECK(T(i - 2) == s.back()); + BOOST_CHECK(T(0) == s.front()); + } +} + +template +void test_copy_and_assign_nd() +{ + static_vector s; + + for ( size_t i = 0 ; i < N ; ++i ) + s.push_back(i); + + { + static_vector s1(s); + BOOST_CHECK(s.size() == s1.size()); + for ( size_t i = 0 ; i < N ; ++i ) + BOOST_CHECK(s[i] == s1[i]) ; + } + { + static_vector s1; + BOOST_CHECK(0 == s1.size()); + s1 = s; + BOOST_CHECK(s.size() == s1.size()); + for ( size_t i = 0 ; i < N ; ++i ) + BOOST_CHECK(s[i] == s1[i]) ; + } + { + static_vector s1; + BOOST_CHECK(0 == s1.size()); + s1.assign(s.begin(), s.end()); + BOOST_CHECK(s.size() == s1.size()); + for ( size_t i = 0 ; i < N ; ++i ) + BOOST_CHECK(s[i] == s1[i]) ; + } +} + int test_main(int, char* []) { - test_ctor_d(); - test_ctor_d(); - test_ctor_r(5); - test_ctor_r(5); - test_ctor_rv(5, 0); - test_ctor_rv(5, 0); + test_ctor_ndc(); + test_ctor_ndc(); + test_ctor_nc(5); + test_ctor_nc(5); + test_ctor_nd(5, 1); + test_ctor_nd(5, 1); + + test_resize_nc(5); + test_resize_nc(5); + test_resize_nd(5, 1); + test_resize_nd(5, 1); + + test_push_back_nd(); + test_push_back_nd(); + + test_pop_back_nd(); + test_pop_back_nd(); + + test_copy_and_assign_nd(); + test_copy_and_assign_nd(); return 0; }