From d420c98a53901afa6052a40ee14517e6b2434e3a Mon Sep 17 00:00:00 2001 From: Niels Dekker Date: Fri, 21 Nov 2008 21:28:47 +0000 Subject: [PATCH] Added array_of_template test, testing the boost::swap utility on an array of objects of a template class. [SVN r49862] --- swap/test/Jamfile.v2 | 1 + swap/test/array_of_template.cpp | 68 +++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 swap/test/array_of_template.cpp diff --git a/swap/test/Jamfile.v2 b/swap/test/Jamfile.v2 index 7071837..617f7e8 100644 --- a/swap/test/Jamfile.v2 +++ b/swap/test/Jamfile.v2 @@ -29,5 +29,6 @@ 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 ] ; diff --git a/swap/test/array_of_template.cpp b/swap/test/array_of_template.cpp new file mode 100644 index 0000000..e6e465f --- /dev/null +++ b/swap/test/array_of_template.cpp @@ -0,0 +1,68 @@ +// 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 + +template +class swap_test_template +{ +public: + swap_test_class swap_test_object; +}; + +template +inline bool operator==(const swap_test_template & lhs, const swap_test_template & rhs) +{ + return lhs.swap_test_object == rhs.swap_test_object; +} + +template +inline bool operator!=(const swap_test_template & lhs, const swap_test_template & rhs) +{ + return !(lhs == rhs); +} + +//Provide swap function in the namespace of swap_test_template +//(which is the global namespace). Note that it isn't allowed to put +//an overload of this function within the std namespace. +template +void swap(swap_test_template& left, swap_test_template& right) +{ + left.swap_test_object.swap(right.swap_test_object); +} + + +int test_main(int, char*[]) +{ + const std::size_t dimension = 2; + const swap_test_template initial_array1[dimension] = { swap_test_class(1), swap_test_class(2) }; + const swap_test_template initial_array2[dimension] = { swap_test_class(3), swap_test_class(4) }; + + swap_test_template array1[dimension]; + swap_test_template 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); + + return 0; +}