From d4b6193f94152f65e07a19f246361d3e2f13cabe Mon Sep 17 00:00:00 2001 From: Niels Dekker Date: Mon, 24 Nov 2008 17:41:15 +0000 Subject: [PATCH] Replaced swap/test/swap_arrays by more specific tests: array_of_array, array_of_class, and array_of_int. [SVN r49916] --- swap/test/Jamfile.v2 | 6 +- .../{swap_arrays.cpp => array_of_array.cpp} | 35 +---------- swap/test/array_of_class.cpp | 59 +++++++++++++++++++ swap/test/array_of_int.cpp | 33 +++++++++++ 4 files changed, 97 insertions(+), 36 deletions(-) rename swap/test/{swap_arrays.cpp => array_of_array.cpp} (66%) create mode 100644 swap/test/array_of_class.cpp create mode 100644 swap/test/array_of_int.cpp diff --git a/swap/test/Jamfile.v2 b/swap/test/Jamfile.v2 index 617f7e8..de1cd69 100644 --- a/swap/test/Jamfile.v2 +++ b/swap/test/Jamfile.v2 @@ -29,6 +29,8 @@ test-suite utility/swap [ run std_vector_of_global.cpp ../../../test/build//boost_test_exec_monitor/static ] [ run std_vector_of_other.cpp ../../../test/build//boost_test_exec_monitor/static ] [ run no_ambiguity_in_boost.cpp ../../../test/build//boost_test_exec_monitor/static ] - [ run array_of_template.cpp ../../../test/build//boost_test_exec_monitor/static ] - [ run swap_arrays.cpp ../../../test/build//boost_test_exec_monitor/static ] + [ run array_of_array.cpp ../../../test/build//boost_test_exec_monitor/static ] + [ run array_of_class.cpp ../../../test/build//boost_test_exec_monitor/static ] + [ run array_of_int.cpp ../../../test/build//boost_test_exec_monitor/static ] + [ run array_of_template.cpp ../../../test/build//boost_test_exec_monitor/static ] ; diff --git a/swap/test/swap_arrays.cpp b/swap/test/array_of_array.cpp similarity index 66% rename from swap/test/swap_arrays.cpp rename to swap/test/array_of_array.cpp index eeb64bc..06eee48 100644 --- a/swap/test/swap_arrays.cpp +++ b/swap/test/array_of_array.cpp @@ -33,32 +33,8 @@ namespace std } } -// Tests swapping 1-dimensional arrays. -void test_swapping_1D_arrays() -{ - const std::size_t dimension = 2; - const swap_test_class initial_array1[dimension] = { swap_test_class(1), swap_test_class(2) }; - const swap_test_class initial_array2[dimension] = { swap_test_class(3), swap_test_class(4) }; - - swap_test_class array1[dimension]; - swap_test_class array2[dimension]; - std::copy(initial_array1, initial_array1 + dimension, array1); - std::copy(initial_array2, initial_array2 + dimension, array2); - - swap_test_class::reset(); - boost::swap(array1, array2); - - BOOST_CHECK(std::equal(array1, array1 + dimension, initial_array2)); - BOOST_CHECK(std::equal(array2, array2 + dimension, initial_array1)); - - BOOST_CHECK_EQUAL(swap_test_class::swap_count(), dimension); - BOOST_CHECK_EQUAL(swap_test_class::copy_count(), 0); -} - - -// Tests swapping 2-dimensional arrays. -void test_swapping_2D_arrays() +int test_main(int, char*[]) { const std::size_t first_dimension = 3; const std::size_t second_dimension = 4; @@ -76,7 +52,6 @@ void test_swapping_2D_arrays() ptr2[i].set_data( static_cast(i + number_of_elements) ); } - swap_test_class::reset(); boost::swap(array1, array2); for (std::size_t i = 0; i < number_of_elements; ++i) @@ -87,14 +62,6 @@ void test_swapping_2D_arrays() BOOST_CHECK_EQUAL(swap_test_class::swap_count(), number_of_elements); BOOST_CHECK_EQUAL(swap_test_class::copy_count(), 0); -} - - -int test_main(int, char*[]) -{ - test_swapping_1D_arrays(); - test_swapping_2D_arrays(); return 0; } - diff --git a/swap/test/array_of_class.cpp b/swap/test/array_of_class.cpp new file mode 100644 index 0000000..df79801 --- /dev/null +++ b/swap/test/array_of_class.cpp @@ -0,0 +1,59 @@ +// Copyright (c) 2008 Joseph Gauterin, Niels Dekker +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#define BOOST_INCLUDE_MAIN +#include + +//Put test class in the global namespace +#include "./swap_test_class.hpp" + +#include //for std::copy and std::equal +#include //for std::size_t + +//Provide swap function in both the namespace of swap_test_class +//(which is the global namespace), and the std namespace. +//It's common to provide a swap function for a class in both +//namespaces. Scott Meyers recommends doing so: Effective C++, +//Third Edition, item 25, "Consider support for a non-throwing swap". +void swap(swap_test_class& left, swap_test_class& right) +{ + left.swap(right); +} + +namespace std +{ + template <> + void swap(swap_test_class& left, swap_test_class& right) + { + left.swap(right); + } +} + + +int test_main(int, char*[]) +{ + const std::size_t array_size = 2; + const swap_test_class initial_array1[array_size] = { swap_test_class(1), swap_test_class(2) }; + const swap_test_class initial_array2[array_size] = { swap_test_class(3), swap_test_class(4) }; + + swap_test_class array1[array_size]; + swap_test_class array2[array_size]; + + std::copy(initial_array1, initial_array1 + array_size, array1); + std::copy(initial_array2, initial_array2 + array_size, array2); + + swap_test_class::reset(); + boost::swap(array1, array2); + + BOOST_CHECK(std::equal(array1, array1 + array_size, initial_array2)); + BOOST_CHECK(std::equal(array2, array2 + array_size, initial_array1)); + + BOOST_CHECK_EQUAL(swap_test_class::swap_count(), array_size); + BOOST_CHECK_EQUAL(swap_test_class::copy_count(), 0); + + return 0; +} diff --git a/swap/test/array_of_int.cpp b/swap/test/array_of_int.cpp new file mode 100644 index 0000000..f919613 --- /dev/null +++ b/swap/test/array_of_int.cpp @@ -0,0 +1,33 @@ +// Copyright (c) 2008 Joseph Gauterin, Niels Dekker +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#define BOOST_INCLUDE_MAIN +#include + +#include //for std::copy and std::equal +#include //for std::size_t + + +int test_main(int, char*[]) +{ + const std::size_t array_size = 3; + const int initial_array1[array_size] = { 1, 2, 3 }; + const int initial_array2[array_size] = { 4, 5, 6 }; + + int array1[array_size]; + int array2[array_size]; + + std::copy(initial_array1, initial_array1 + array_size, array1); + std::copy(initial_array2, initial_array2 + array_size, array2); + + boost::swap(array1, array2); + + BOOST_CHECK(std::equal(array1, array1 + array_size, initial_array2)); + BOOST_CHECK(std::equal(array2, array2 + array_size, initial_array1)); + + return 0; +}