diff options
Diffstat (limited to 'libs/atomic/test')
-rw-r--r-- | libs/atomic/test/api_test_helpers.hpp | 115 | ||||
-rw-r--r-- | libs/atomic/test/atomicity.cpp | 19 | ||||
-rw-r--r-- | libs/atomic/test/fallback_api.cpp | 6 | ||||
-rw-r--r-- | libs/atomic/test/lockfree.cpp | 20 | ||||
-rw-r--r-- | libs/atomic/test/native_api.cpp | 9 | ||||
-rw-r--r-- | libs/atomic/test/ordering.cpp | 13 |
6 files changed, 95 insertions, 87 deletions
diff --git a/libs/atomic/test/api_test_helpers.hpp b/libs/atomic/test/api_test_helpers.hpp index 107e7d7d1..1db8c1fb8 100644 --- a/libs/atomic/test/api_test_helpers.hpp +++ b/libs/atomic/test/api_test_helpers.hpp @@ -7,6 +7,11 @@ #ifndef BOOST_ATOMIC_API_TEST_HELPERS_HPP #define BOOST_ATOMIC_API_TEST_HELPERS_HPP +#include <cstring> +#include <boost/config.hpp> +#include <boost/core/lightweight_test.hpp> +#include <boost/atomic.hpp> + /* provide helpers that exercise whether the API functions of "boost::atomic" provide the correct operational semantic in the case of sequential @@ -21,10 +26,10 @@ test_flag_api(void) boost::atomic_flag f; #endif - BOOST_CHECK( !f.test_and_set() ); - BOOST_CHECK( f.test_and_set() ); + BOOST_TEST( !f.test_and_set() ); + BOOST_TEST( f.test_and_set() ); f.clear(); - BOOST_CHECK( !f.test_and_set() ); + BOOST_TEST( !f.test_and_set() ); } template<typename T> @@ -33,48 +38,48 @@ void test_base_operators(T value1, T value2, T value3) /* explicit load/store */ { boost::atomic<T> a(value1); - BOOST_CHECK( a.load() == value1 ); + BOOST_TEST( a.load() == value1 ); } { boost::atomic<T> a(value1); a.store(value2); - BOOST_CHECK( a.load() == value2 ); + BOOST_TEST( a.load() == value2 ); } /* overloaded assignment/conversion */ { boost::atomic<T> a(value1); - BOOST_CHECK( value1 == a ); + BOOST_TEST( value1 == a ); } { boost::atomic<T> a; a = value2; - BOOST_CHECK( value2 == a ); + BOOST_TEST( value2 == a ); } /* exchange-type operators */ { boost::atomic<T> a(value1); T n = a.exchange(value2); - BOOST_CHECK( a.load() == value2 && n == value1 ); + BOOST_TEST( a.load() == value2 && n == value1 ); } { boost::atomic<T> a(value1); T expected = value1; bool success = a.compare_exchange_strong(expected, value3); - BOOST_CHECK( success ); - BOOST_CHECK( a.load() == value3 && expected == value1 ); + BOOST_TEST( success ); + BOOST_TEST( a.load() == value3 && expected == value1 ); } { boost::atomic<T> a(value1); T expected = value2; bool success = a.compare_exchange_strong(expected, value3); - BOOST_CHECK( !success ); - BOOST_CHECK( a.load() == value1 && expected == value1 ); + BOOST_TEST( !success ); + BOOST_TEST( a.load() == value1 && expected == value1 ); } { @@ -85,8 +90,8 @@ void test_base_operators(T value1, T value2, T value3) expected = value1; success = a.compare_exchange_weak(expected, value3); } while(!success); - BOOST_CHECK( success ); - BOOST_CHECK( a.load() == value3 && expected == value1 ); + BOOST_TEST( success ); + BOOST_TEST( a.load() == value3 && expected == value1 ); } { @@ -99,8 +104,8 @@ void test_base_operators(T value1, T value2, T value3) if (expected != value2) break; } while(!success); - BOOST_CHECK( !success ); - BOOST_CHECK( a.load() == value1 && expected == value1 ); + BOOST_TEST( !success ); + BOOST_TEST( a.load() == value1 && expected == value1 ); } } @@ -111,7 +116,7 @@ void test_constexpr_ctor() #ifndef BOOST_NO_CXX11_CONSTEXPR const T value(0); const boost::atomic<T> tester(value); - BOOST_CHECK( tester == value ); + BOOST_TEST( tester == value ); #endif } @@ -126,59 +131,59 @@ void test_additive_operators_with_type(T value, D delta) { boost::atomic<T> a(value); T n = a.fetch_add(delta); - BOOST_CHECK( a.load() == T((AddType)value + delta) ); - BOOST_CHECK( n == value ); + BOOST_TEST( a.load() == T((AddType)value + delta) ); + BOOST_TEST( n == value ); } { boost::atomic<T> a(value); T n = a.fetch_sub(delta); - BOOST_CHECK( a.load() == T((AddType)value - delta) ); - BOOST_CHECK( n == value ); + BOOST_TEST( a.load() == T((AddType)value - delta) ); + BOOST_TEST( n == value ); } /* overloaded modify/assign*/ { boost::atomic<T> a(value); T n = (a += delta); - BOOST_CHECK( a.load() == T((AddType)value + delta) ); - BOOST_CHECK( n == T((AddType)value + delta) ); + BOOST_TEST( a.load() == T((AddType)value + delta) ); + BOOST_TEST( n == T((AddType)value + delta) ); } { boost::atomic<T> a(value); T n = (a -= delta); - BOOST_CHECK( a.load() == T((AddType)value - delta) ); - BOOST_CHECK( n == T((AddType)value - delta) ); + BOOST_TEST( a.load() == T((AddType)value - delta) ); + BOOST_TEST( n == T((AddType)value - delta) ); } /* overloaded increment/decrement */ { boost::atomic<T> a(value); T n = a++; - BOOST_CHECK( a.load() == T((AddType)value + 1) ); - BOOST_CHECK( n == value ); + BOOST_TEST( a.load() == T((AddType)value + 1) ); + BOOST_TEST( n == value ); } { boost::atomic<T> a(value); T n = ++a; - BOOST_CHECK( a.load() == T((AddType)value + 1) ); - BOOST_CHECK( n == T((AddType)value + 1) ); + BOOST_TEST( a.load() == T((AddType)value + 1) ); + BOOST_TEST( n == T((AddType)value + 1) ); } { boost::atomic<T> a(value); T n = a--; - BOOST_CHECK( a.load() == T((AddType)value - 1) ); - BOOST_CHECK( n == value ); + BOOST_TEST( a.load() == T((AddType)value - 1) ); + BOOST_TEST( n == value ); } { boost::atomic<T> a(value); T n = --a; - BOOST_CHECK( a.load() == T((AddType)value - 1) ); - BOOST_CHECK( n == T((AddType)value - 1) ); + BOOST_TEST( a.load() == T((AddType)value - 1) ); + BOOST_TEST( n == T((AddType)value - 1) ); } } @@ -194,12 +199,12 @@ void test_additive_wrap(T value) { boost::atomic<T> a(value); T n = a.fetch_add(1) + 1; - BOOST_CHECK( a.compare_exchange_strong(n, n) ); + BOOST_TEST( a.compare_exchange_strong(n, n) ); } { boost::atomic<T> a(value); T n = a.fetch_sub(1) - 1; - BOOST_CHECK( a.compare_exchange_strong(n, n) ); + BOOST_TEST( a.compare_exchange_strong(n, n) ); } } @@ -210,51 +215,51 @@ void test_bit_operators(T value, T delta) { boost::atomic<T> a(value); T n = a.fetch_and(delta); - BOOST_CHECK( a.load() == T(value & delta) ); - BOOST_CHECK( n == value ); + BOOST_TEST( a.load() == T(value & delta) ); + BOOST_TEST( n == value ); } { boost::atomic<T> a(value); T n = a.fetch_or(delta); - BOOST_CHECK( a.load() == T(value | delta) ); - BOOST_CHECK( n == value ); + BOOST_TEST( a.load() == T(value | delta) ); + BOOST_TEST( n == value ); } { boost::atomic<T> a(value); T n = a.fetch_xor(delta); - BOOST_CHECK( a.load() == T(value ^ delta) ); - BOOST_CHECK( n == value ); + BOOST_TEST( a.load() == T(value ^ delta) ); + BOOST_TEST( n == value ); } /* overloaded modify/assign */ { boost::atomic<T> a(value); T n = (a &= delta); - BOOST_CHECK( a.load() == T(value & delta) ); - BOOST_CHECK( n == T(value & delta) ); + BOOST_TEST( a.load() == T(value & delta) ); + BOOST_TEST( n == T(value & delta) ); } { boost::atomic<T> a(value); T n = (a |= delta); - BOOST_CHECK( a.load() == T(value | delta) ); - BOOST_CHECK( n == T(value | delta) ); + BOOST_TEST( a.load() == T(value | delta) ); + BOOST_TEST( n == T(value | delta) ); } { boost::atomic<T> a(value); T n = (a ^= delta); - BOOST_CHECK( a.load() == T(value ^ delta) ); - BOOST_CHECK( n == T(value ^ delta) ); + BOOST_TEST( a.load() == T(value ^ delta) ); + BOOST_TEST( n == T(value ^ delta) ); } } template<typename T> void test_integral_api(void) { - BOOST_CHECK( sizeof(boost::atomic<T>) >= sizeof(T)); + BOOST_TEST( sizeof(boost::atomic<T>) >= sizeof(T)); test_base_operators<T>(42, 43, 44); test_additive_operators<T, T>(42, 17); @@ -276,8 +281,8 @@ void test_integral_api(void) template<typename T> void test_pointer_api(void) { - BOOST_CHECK( sizeof(boost::atomic<T *>) >= sizeof(T *)); - BOOST_CHECK( sizeof(boost::atomic<void *>) >= sizeof(T *)); + BOOST_TEST( sizeof(boost::atomic<T *>) >= sizeof(T *)); + BOOST_TEST( sizeof(boost::atomic<void *>) >= sizeof(T *)); T values[3]; @@ -289,7 +294,7 @@ void test_pointer_api(void) boost::atomic<void *> ptr; boost::atomic<intptr_t> integral; - BOOST_CHECK( ptr.is_lock_free() == integral.is_lock_free() ); + BOOST_TEST( ptr.is_lock_free() == integral.is_lock_free() ); } enum test_enum { @@ -321,7 +326,7 @@ test_struct_api(void) { boost::atomic<T> sa; boost::atomic<typename T::value_type> si; - BOOST_CHECK( sa.is_lock_free() == si.is_lock_free() ); + BOOST_TEST( sa.is_lock_free() == si.is_lock_free() ); } } struct large_struct { @@ -329,11 +334,11 @@ struct large_struct { inline bool operator==(const large_struct & c) const { - return memcmp(data, &c.data, sizeof(data)) == 0; + return std::memcmp(data, &c.data, sizeof(data)) == 0; } inline bool operator!=(const large_struct & c) const { - return memcmp(data, &c.data, sizeof(data)) != 0; + return std::memcmp(data, &c.data, sizeof(data)) != 0; } }; @@ -359,7 +364,7 @@ test_struct_with_ctor_api(void) test_struct_with_ctor s; boost::atomic<test_struct_with_ctor> sa; // Check that the default constructor was called - BOOST_CHECK( sa.load() == s ); + BOOST_TEST( sa.load() == s ); } test_struct_with_ctor a, b, c; diff --git a/libs/atomic/test/atomicity.cpp b/libs/atomic/test/atomicity.cpp index f1a64f502..d62ae748b 100644 --- a/libs/atomic/test/atomicity.cpp +++ b/libs/atomic/test/atomicity.cpp @@ -24,20 +24,20 @@ // operations truly behave atomic if this test program does not // report an error. -#include <algorithm> - #include <boost/atomic.hpp> + +#include <algorithm> +#include <boost/ref.hpp> #include <boost/bind.hpp> #include <boost/function.hpp> #include <boost/date_time/posix_time/posix_time_types.hpp> #include <boost/date_time/posix_time/time_formatters.hpp> -#include <boost/test/test_tools.hpp> -#include <boost/test/included/test_exec_monitor.hpp> #include <boost/thread/thread.hpp> #include <boost/thread/thread_time.hpp> #include <boost/thread/locks.hpp> #include <boost/thread/mutex.hpp> #include <boost/thread/condition_variable.hpp> +#include <boost/core/lightweight_test.hpp> /* helper class to let two instances of a function race against each other, with configurable timeout and early abort on detection of error */ @@ -160,7 +160,7 @@ estimate_avg_race_time(void) ); if (success) { - BOOST_FAIL("Failed to establish baseline time for reproducing race condition"); + BOOST_ERROR("Failed to establish baseline time for reproducing race condition"); } sum = sum + timeout.total_microseconds(); @@ -239,7 +239,7 @@ test_bitops(boost::atomic<value_type> & shared_value, size_t instance) return true; } -int test_main(int, char *[]) +int main(int, char *[]) { boost::posix_time::time_duration reciprocal_lambda; @@ -260,7 +260,7 @@ int test_main(int, char *[]) tmp ); - BOOST_CHECK_MESSAGE(success, "concurrent arithmetic"); + BOOST_TEST(success); // concurrent arithmetic error } { @@ -275,7 +275,8 @@ int test_main(int, char *[]) tmp ); - BOOST_CHECK_MESSAGE(success, "concurrent bitops"); + BOOST_TEST(success); // concurrent bit operations error } - return 0; + + return boost::report_errors(); } diff --git a/libs/atomic/test/fallback_api.cpp b/libs/atomic/test/fallback_api.cpp index b767856c5..0bb42d81c 100644 --- a/libs/atomic/test/fallback_api.cpp +++ b/libs/atomic/test/fallback_api.cpp @@ -9,11 +9,11 @@ #include <boost/atomic.hpp> #include <boost/cstdint.hpp> -#include <boost/test/minimal.hpp> +#include <boost/core/lightweight_test.hpp> #include "api_test_helpers.hpp" -int test_main(int, char *[]) +int main(int, char *[]) { test_flag_api(); @@ -55,5 +55,5 @@ int test_main(int, char *[]) // Other non-trivial constructors are allowed. test_struct_with_ctor_api(); - return 0; + return boost::report_errors(); } diff --git a/libs/atomic/test/lockfree.cpp b/libs/atomic/test/lockfree.cpp index 99260e3a8..9c1640737 100644 --- a/libs/atomic/test/lockfree.cpp +++ b/libs/atomic/test/lockfree.cpp @@ -9,11 +9,11 @@ // Also, if any operation is lock-free, then the platform // implementation must provide overridden fence implementations. -#include <iostream> +#include <boost/atomic.hpp> +#include <iostream> #include <boost/config.hpp> -#include <boost/atomic.hpp> -#include <boost/test/minimal.hpp> +#include <boost/core/lightweight_test.hpp> static const char * lock_free_level[] = { "never", @@ -25,15 +25,15 @@ template<typename T> void verify_lock_free(const char * type_name, int lock_free_macro_val, int lock_free_expect) { - BOOST_CHECK(lock_free_macro_val >= 0 && lock_free_macro_val <= 2); - BOOST_CHECK(lock_free_macro_val == lock_free_expect); + BOOST_TEST(lock_free_macro_val >= 0 && lock_free_macro_val <= 2); + BOOST_TEST(lock_free_macro_val == lock_free_expect); boost::atomic<T> value; if (lock_free_macro_val == 0) - BOOST_CHECK(!value.is_lock_free()); + BOOST_TEST(!value.is_lock_free()); if (lock_free_macro_val == 2) - BOOST_CHECK(value.is_lock_free()); + BOOST_TEST(value.is_lock_free()); std::cout << "atomic<" << type_name << "> is " << lock_free_level[lock_free_macro_val] << " lock free\n"; } @@ -174,7 +174,7 @@ verify_lock_free(const char * type_name, int lock_free_macro_val, int lock_free_ #endif -int test_main(int, char *[]) +int main(int, char *[]) { verify_lock_free<char>("char", BOOST_ATOMIC_CHAR_LOCK_FREE, EXPECT_CHAR_LOCK_FREE); verify_lock_free<short>("short", BOOST_ATOMIC_SHORT_LOCK_FREE, EXPECT_SHORT_LOCK_FREE); @@ -197,7 +197,7 @@ int test_main(int, char *[]) BOOST_ATOMIC_LLONG_LOCK_FREE > 0 || BOOST_ATOMIC_BOOL_LOCK_FREE > 0; - BOOST_CHECK(!any_lock_free || BOOST_ATOMIC_THREAD_FENCE > 0); + BOOST_TEST(!any_lock_free || BOOST_ATOMIC_THREAD_FENCE > 0); - return 0; + return boost::report_errors(); } diff --git a/libs/atomic/test/native_api.cpp b/libs/atomic/test/native_api.cpp index ddcc0f653..c9b3dad99 100644 --- a/libs/atomic/test/native_api.cpp +++ b/libs/atomic/test/native_api.cpp @@ -4,14 +4,15 @@ // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include <boost/config.hpp> #include <boost/atomic.hpp> + +#include <boost/config.hpp> #include <boost/cstdint.hpp> -#include <boost/test/minimal.hpp> +#include <boost/core/lightweight_test.hpp> #include "api_test_helpers.hpp" -int test_main(int, char *[]) +int main(int, char *[]) { test_flag_api(); @@ -66,5 +67,5 @@ int test_main(int, char *[]) // Other non-trivial constructors are allowed. test_struct_with_ctor_api(); - return 0; + return boost::report_errors(); } diff --git a/libs/atomic/test/ordering.cpp b/libs/atomic/test/ordering.cpp index f76985504..2bfcd4adf 100644 --- a/libs/atomic/test/ordering.cpp +++ b/libs/atomic/test/ordering.cpp @@ -26,18 +26,19 @@ // Overall this yields 0.995 * 0.995 > 0.99 confidence that the // fences work as expected if this test program does not // report an error. + #include <boost/atomic.hpp> + #include <boost/bind.hpp> #include <boost/date_time/posix_time/posix_time_types.hpp> #include <boost/date_time/posix_time/time_formatters.hpp> -#include <boost/test/test_tools.hpp> -#include <boost/test/included/test_exec_monitor.hpp> #include <boost/thread/thread.hpp> #include <boost/thread/thread_time.hpp> #include <boost/thread/locks.hpp> #include <boost/thread/mutex.hpp> #include <boost/thread/condition_variable.hpp> #include <boost/thread/barrier.hpp> +#include <boost/core/lightweight_test.hpp> // Two threads perform the following operations: // @@ -224,7 +225,7 @@ test_seq_cst(void) total_store_order_test<boost::memory_order_relaxed, boost::memory_order_relaxed> test; test.run(timeout); if (!test.detected_conflict()) { - BOOST_WARN_MESSAGE(false, "Failed to detect order=seq_cst violation while ith order=relaxed -- intrinsic ordering too strong for this test"); + std::cout << "Failed to detect order=seq_cst violation while ith order=relaxed -- intrinsic ordering too strong for this test\n"; return; } @@ -248,12 +249,12 @@ test_seq_cst(void) total_store_order_test<boost::memory_order_seq_cst, boost::memory_order_relaxed> test; test.run(timeout); - BOOST_CHECK_MESSAGE(!test.detected_conflict(), "sequential consistency"); + BOOST_TEST(!test.detected_conflict()); // sequential consistency error } -int test_main(int, char *[]) +int main(int, char *[]) { test_seq_cst(); - return 0; + return boost::report_errors(); } |