|
Boost-Commit : |
From: nielsdekker_at_[hidden]
Date: 2007-12-09 06:53:09
Author: niels_dekker
Date: 2007-12-09 06:53:08 EST (Sun, 09 Dec 2007)
New Revision: 41919
URL: http://svn.boost.org/trac/boost/changeset/41919
Log:
Added value_init tests if a copy function of T is called when value_initialized<T> is copied -- a case I hadn't thought of before...
Text files modified:
trunk/libs/utility/value_init_test.cpp | 37 +++++++++++++++++++++++++++++++++++++
1 files changed, 37 insertions(+), 0 deletions(-)
Modified: trunk/libs/utility/value_init_test.cpp
==============================================================================
--- trunk/libs/utility/value_init_test.cpp (original)
+++ trunk/libs/utility/value_init_test.cpp 2007-12-09 06:53:08 EST (Sun, 09 Dec 2007)
@@ -156,6 +156,29 @@
typedef unsigned char ArrayOfBytes[256];
+
+//
+// A struct that allows testing whether the appropriate copy functions are called.
+//
+struct CopyFunctionCallTester
+{
+ bool is_copy_constructed;
+ bool is_assignment_called;
+
+ CopyFunctionCallTester()
+ : is_copy_constructed(false), is_assignment_called(false) {}
+
+ CopyFunctionCallTester(const CopyFunctionCallTester & )
+ : is_copy_constructed(true), is_assignment_called(false) {}
+
+ CopyFunctionCallTester & operator=(const CopyFunctionCallTester & )
+ {
+ is_assignment_called = true ;
+ return *this ;
+ }
+};
+
+
//
// This test function tests boost::value_initialized<T> for a specific type T.
// The first argument (y) is assumed have the value of a value-initialized object.
@@ -244,8 +267,22 @@
boost::value_initialized<ArrayOfBytes> valueInitializedArrayOfBytes;
BOOST_CHECK (std::memcmp(get(valueInitializedArrayOfBytes), zeroInitializedArrayOfBytes, sizeof(ArrayOfBytes)) == 0);
+ boost::value_initialized<CopyFunctionCallTester> copyFunctionCallTester1;
+ BOOST_CHECK ( ! get(copyFunctionCallTester1).is_copy_constructed);
+ BOOST_CHECK ( ! get(copyFunctionCallTester1).is_assignment_called);
+
+ boost::value_initialized<CopyFunctionCallTester> copyFunctionCallTester2 = boost::value_initialized<CopyFunctionCallTester>(copyFunctionCallTester1);
+ BOOST_CHECK ( get(copyFunctionCallTester2).is_copy_constructed);
+ BOOST_CHECK ( ! get(copyFunctionCallTester2).is_assignment_called);
+
+ boost::value_initialized<CopyFunctionCallTester> copyFunctionCallTester3;
+ copyFunctionCallTester3 = boost::value_initialized<CopyFunctionCallTester>(copyFunctionCallTester1);
+ BOOST_CHECK ( ! get(copyFunctionCallTester3).is_copy_constructed);
+ BOOST_CHECK ( get(copyFunctionCallTester3).is_assignment_called);
+
return 0;
}
unsigned int expected_failures = 0;
+
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk