|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r61188 - trunk/libs/config/test
From: nielsdekker_at_[hidden]
Date: 2010-04-10 18:27:56
Author: niels_dekker
Date: 2010-04-10 18:27:55 EDT (Sat, 10 Apr 2010)
New Revision: 61188
URL: http://svn.boost.org/trac/boost/changeset/61188
Log:
Added value-initialization tests for int_struct_holder; made tests more uniform by having an is_value_initialized(arg) function for each type.
Text files modified:
trunk/libs/config/test/boost_no_com_value_init.ipp | 223 +++++++++++++++++++++++----------------
1 files changed, 131 insertions(+), 92 deletions(-)
Modified: trunk/libs/config/test/boost_no_com_value_init.ipp
==============================================================================
--- trunk/libs/config/test/boost_no_com_value_init.ipp (original)
+++ trunk/libs/config/test/boost_no_com_value_init.ipp 2010-04-10 18:27:55 EDT (Sat, 10 Apr 2010)
@@ -32,7 +32,7 @@
void* p;
};
- bool is_zero_initialized(const pod_struct& arg)
+ bool is_value_initialized(const pod_struct& arg)
{
return
arg.e == 0 &&
@@ -52,10 +52,10 @@
int derived_data;
};
- bool is_zero_initialized(const derived_pod_struct& arg)
+ bool is_value_initialized(const derived_pod_struct& arg)
{
const pod_struct& base_subobject = arg;
- return arg.derived_data == 0 && is_zero_initialized(base_subobject);
+ return arg.derived_data == 0 && is_value_initialized(base_subobject);
}
struct empty_struct
@@ -67,7 +67,7 @@
int data;
};
- bool is_zero_initialized(const derived_struct& arg)
+ bool is_value_initialized(const derived_struct& arg)
{
return arg.data == 0;
}
@@ -77,11 +77,26 @@
int data;
};
+ bool is_value_initialized(const int_struct& arg)
+ {
+ return arg.data == 0;
+ }
+
+ struct int_struct_holder
+ {
+ int_struct data;
+ };
+
+ bool is_value_initialized(const int_struct_holder& arg)
+ {
+ return is_value_initialized(arg.data);
+ }
+
struct derived_int_struct: int_struct
{
};
- bool is_zero_initialized(const int_struct& arg)
+ bool is_value_initialized(const derived_int_struct& arg)
{
return arg.data == 0;
}
@@ -92,11 +107,11 @@
int second;
};
- bool is_zero_initialized(const pod_struct_and_int_union& arg)
+ bool is_value_initialized(const pod_struct_and_int_union& arg)
{
// When a union is zero-initialized, its first non-static
// named data member is zero-initialized ([dcl.init]).
- return is_zero_initialized(arg.first);
+ return is_value_initialized(arg.first);
}
@@ -106,7 +121,7 @@
pod_struct second;
};
- bool is_zero_initialized(const int_and_pod_struct_union& arg)
+ bool is_value_initialized(const int_and_pod_struct_union& arg)
{
return arg.first == 0;
}
@@ -126,12 +141,17 @@
{
}
- bool is_default() const
+ bool is_value_initialized() const
{
return m_enum == magic_number;
}
};
+ bool is_value_initialized(const enum_holder& arg)
+ {
+ return arg.is_value_initialized();
+ }
+
// An aggregate struct of a non-POD class and an int.
struct enum_holder_and_int
@@ -142,7 +162,7 @@
bool is_value_initialized(const enum_holder_and_int& arg)
{
- return arg.e.is_default() && arg.i == 0;
+ return arg.e.is_value_initialized() && arg.i == 0;
}
@@ -154,9 +174,9 @@
protected:
int protected_int;
public:
- bool is_value_initialized() const
+ friend bool is_value_initialized(const private_and_protected_int& arg)
{
- return private_int == 0 && protected_int == 0;
+ return arg.private_int == 0 && arg.protected_int == 0;
}
};
@@ -202,27 +222,39 @@
virtual bool is_value_initialized() const
{
- return m_enum_holder.is_default() && i == 0;
+ return m_enum_holder.is_value_initialized() && i == 0;
}
virtual ~non_pod_class() {}
};
+ bool is_value_initialized(const non_pod_class& arg)
+ {
+ return arg.is_value_initialized();
+ }
+
+
+ // For built-in types and enumerated types.
+ template <typename T>
+ bool is_value_initialized(const T& arg)
+ {
+ return arg == 0;
+ }
+
- // The first argument (is_value_initializated) tells whether value initialization
- // has succeeded.
- // The second argument tells what expression was evaluated.
- bool is_true(bool is_value_initializated, const char *const expression)
+ // The first argument should specify whether a specific variable is value-initializated.
+ // The second argument should specify the name of the variable.
+ // Passes the information to standard output, if the variable is not value-initializated.
+ bool is_true(bool is_variable_value_initializated, const char *const variable_name)
{
- if ( ! is_value_initializated )
+ if ( ! is_variable_value_initializated )
{
- std::cout << "Note: " << expression << " evaluated to false." << std::endl;
+ std::cout << "Note: " << variable_name << " is not value-initialized." << std::endl;
}
- return is_value_initializated;
+ return is_variable_value_initializated;
}
-#define IS_TRUE(value) is_true(value, #value)
-#define IS_ZERO(value) is_true(value == 0, #value " == 0")
+#define IS_VALUE_INITIALIZED(value) is_true( is_value_initialized(value), #value)
// value_initializer initializes each of its data members by means
// of an empty set of parentheses, and allows checking whether
@@ -255,6 +287,8 @@
void* m_ptr_array[2];
int_struct m_int_struct;
int_struct m_int_struct_array[2];
+ int_struct m_int_struct_holder;
+ int_struct m_int_struct_holder_array[2];
pod_struct m_pod_struct;
pod_struct m_pod_struct_array[2];
derived_pod_struct m_derived_pod;
@@ -305,6 +339,8 @@
m_ptr_array(),
m_int_struct(),
m_int_struct_array(),
+ m_int_struct_holder(),
+ m_int_struct_holder_array(),
m_pod_struct(),
m_pod_struct_array(),
m_derived_pod(),
@@ -334,75 +370,78 @@
unsigned check() const
{
const unsigned num_failures =
- (IS_TRUE( m_enum_holder.is_default() ) ? 0 : 1) +
- (IS_TRUE( m_enum_holder_array[0].is_default() ) ? 0 : 1) +
- (IS_TRUE( m_enum_holder_array[1].is_default() ) ? 0 : 1) +
- (IS_ZERO(m_enum) ? 0 : 1) +
- (IS_ZERO(m_enum_array[0]) ? 0 : 1) +
- (IS_ZERO(m_enum_array[1]) ? 0 : 1) +
- (IS_ZERO(m_char) ? 0 : 1) +
- (IS_ZERO(m_char_array[0]) ? 0 : 1) +
- (IS_ZERO(m_char_array[1]) ? 0 : 1) +
- (IS_ZERO(m_unsigned_char) ? 0 : 1) +
- (IS_ZERO(m_unsigned_char_array[0]) ? 0 : 1) +
- (IS_ZERO(m_unsigned_char_array[1]) ? 0 : 1) +
- (IS_ZERO(m_short) ? 0 : 1) +
- (IS_ZERO(m_short_array[0]) ? 0 : 1) +
- (IS_ZERO(m_short_array[1]) ? 0 : 1) +
- (IS_ZERO(m_int) ? 0 : 1) +
- (IS_ZERO(m_int_array[0]) ? 0 : 1) +
- (IS_ZERO(m_int_array[1]) ? 0 : 1) +
- (IS_ZERO(m_unsigned) ? 0 : 1) +
- (IS_ZERO(m_unsigned_array[0]) ? 0 : 1) +
- (IS_ZERO(m_unsigned_array[1]) ? 0 : 1) +
- (IS_ZERO(m_long) ? 0 : 1) +
- (IS_ZERO(m_long_array[0]) ? 0 : 1) +
- (IS_ZERO(m_long_array[1]) ? 0 : 1) +
- (IS_ZERO(m_float) ? 0 : 1) +
- (IS_ZERO(m_float_array[0]) ? 0 : 1) +
- (IS_ZERO(m_float_array[1]) ? 0 : 1) +
- (IS_ZERO(m_double) ? 0 : 1) +
- (IS_ZERO(m_double_array[0]) ? 0 : 1) +
- (IS_ZERO(m_double_array[1]) ? 0 : 1) +
- (IS_ZERO(m_ptr) ? 0 : 1) +
- (IS_ZERO(m_ptr_array[0]) ? 0 : 1) +
- (IS_ZERO(m_ptr_array[1]) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_int_struct) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_int_struct_array[0]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_int_struct_array[1]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_pod_struct) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_pod_struct_array[0]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_pod_struct_array[1]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_pod) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_pod_array[0]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_pod_array[1]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_struct) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_struct_array[0]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_struct_array[1]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_int_struct) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_int_struct_array[0]) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_derived_int_struct_array[1]) ) ? 0 : 1) +
- (IS_TRUE( is_value_initialized(m_enum_holder_and_int) ) ? 0 : 1) +
- (IS_TRUE( is_value_initialized(m_enum_holder_and_int_array[0]) ) ? 0 : 1) +
- (IS_TRUE( is_value_initialized(m_enum_holder_and_int_array[1]) ) ? 0 : 1) +
- (IS_TRUE( m_private_and_protected_int.is_value_initialized() ) ? 0 : 1) +
- (IS_TRUE( m_private_and_protected_int_array[0].is_value_initialized() ) ? 0 : 1 ) +
- (IS_TRUE( m_private_and_protected_int_array[1].is_value_initialized() ) ? 0 : 1 );
- (IS_TRUE( is_value_initialized(m_user_defined_destructor_holder) ) ? 0 : 1) +
- (IS_TRUE( is_value_initialized(m_user_defined_destructor_holder_array[0]) ) ? 0 : 1) +
- (IS_TRUE( is_value_initialized(m_user_defined_destructor_holder_array[1]) ) ? 0 : 1) +
- (IS_TRUE( is_value_initialized(m_virtual_destructor_holder) ) ? 0 : 1) +
- (IS_TRUE( is_value_initialized(m_virtual_destructor_holder_array[0]) ) ? 0 : 1) +
- (IS_TRUE( is_value_initialized(m_virtual_destructor_holder_array[1]) ) ? 0 : 1) +
- (IS_TRUE( m_non_pod.is_value_initialized() ) ? 0 : 1) +
- (IS_TRUE( m_non_pod_array[0].is_value_initialized() ) ? 0 : 1 ) +
- (IS_TRUE( m_non_pod_array[1].is_value_initialized() ) ? 0 : 1 ) +
- (IS_TRUE( is_zero_initialized(m_pod_struct_and_int_union) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_pod_struct_and_int_union_array[0]) ) ? 0 : 1 ) +
- (IS_TRUE( is_zero_initialized(m_pod_struct_and_int_union_array[1]) ) ? 0 : 1 ) +
- (IS_TRUE( is_zero_initialized(m_int_and_pod_struct_union) ) ? 0 : 1) +
- (IS_TRUE( is_zero_initialized(m_int_and_pod_struct_union_array[0]) ) ? 0 : 1 ) +
- (IS_TRUE( is_zero_initialized(m_int_and_pod_struct_union_array[1]) ) ? 0 : 1 );
+ (IS_VALUE_INITIALIZED(m_enum_holder) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_enum_holder_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_enum_holder_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_enum) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_enum_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_enum_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_char) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_char_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_char_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_unsigned_char) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_unsigned_char_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_unsigned_char_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_short) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_short_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_short_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_unsigned) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_unsigned_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_unsigned_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_long) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_long_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_long_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_float) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_float_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_float_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_double) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_double_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_double_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_ptr) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_ptr_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_ptr_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_struct) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_struct_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_struct_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_struct_holder) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_struct_holder_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_struct_holder_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_pod_struct) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_pod_struct_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_pod_struct_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_pod) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_pod_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_pod_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_struct) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_struct_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_struct_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_int_struct) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_int_struct_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_derived_int_struct_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_enum_holder_and_int) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_enum_holder_and_int_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_enum_holder_and_int_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_private_and_protected_int) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_private_and_protected_int_array[0]) ? 0 : 1 ) +
+ (IS_VALUE_INITIALIZED(m_private_and_protected_int_array[1]) ? 0 : 1 );
+ (IS_VALUE_INITIALIZED(m_user_defined_destructor_holder) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_user_defined_destructor_holder_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_user_defined_destructor_holder_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_virtual_destructor_holder) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_virtual_destructor_holder_array[0]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_virtual_destructor_holder_array[1]) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_non_pod) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_non_pod_array[0]) ? 0 : 1 ) +
+ (IS_VALUE_INITIALIZED(m_non_pod_array[1]) ? 0 : 1 ) +
+ (IS_VALUE_INITIALIZED(m_pod_struct_and_int_union) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_pod_struct_and_int_union_array[0]) ? 0 : 1 ) +
+ (IS_VALUE_INITIALIZED(m_pod_struct_and_int_union_array[1]) ? 0 : 1 ) +
+ (IS_VALUE_INITIALIZED(m_int_and_pod_struct_union) ? 0 : 1) +
+ (IS_VALUE_INITIALIZED(m_int_and_pod_struct_union_array[0]) ? 0 : 1 ) +
+ (IS_VALUE_INITIALIZED(m_int_and_pod_struct_union_array[1]) ? 0 : 1 );
return num_failures;
}
};
@@ -419,7 +458,7 @@
{
std::cout << "Number of initialization failures on the stack: " << num_failures_on_stack
<< "\nNumber of initialization failures on the heap: " << num_failures_on_heap
- << "\nDetected by boost_no_complete_value_initialization::test() revision 5."
+ << "\nDetected by boost_no_complete_value_initialization::test() revision 6."
<< std::endl;
}
return static_cast<int>(num_failures_on_stack + num_failures_on_heap);
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