$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
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);