Update of /cvsroot/boost/boost/libs/optional/test
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv17263/libs/optional/test

Modified Files:
      Tag: RC_1_34_0
        Jamfile.v2 optional_test.cpp optional_test_ref.cpp 
Removed Files:
      Tag: RC_1_34_0
        optional_test_ref_fail2.cpp 
Log Message:
Fixed operator->() for optional references.

Index: Jamfile.v2
===================================================================
RCS file: /cvsroot/boost/boost/libs/optional/test/Jamfile.v2,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -d -r1.4 -r1.4.2.1
--- Jamfile.v2  9 Feb 2006 09:47:05 -0000       1.4
+++ Jamfile.v2  1 Mar 2007 21:50:11 -0000       1.4.2.1
@@ -26,7 +26,6 @@
     [ compile-fail optional_test_fail3a.cpp ]
     [ compile-fail optional_test_fail3b.cpp ]
     [ compile-fail optional_test_ref_fail1.cpp ]
-    [ compile-fail optional_test_ref_fail2.cpp ]
     [ compile-fail optional_test_ref_fail3.cpp ]
     [ compile-fail optional_test_ref_fail4.cpp ]
     [ compile-fail optional_test_inplace_fail.cpp ]

Index: optional_test.cpp
===================================================================
RCS file: /cvsroot/boost/boost/libs/optional/test/optional_test.cpp,v
retrieving revision 1.17
retrieving revision 1.17.2.1
diff -u -d -r1.17 -r1.17.2.1
--- optional_test.cpp   3 Feb 2006 19:56:03 -0000       1.17
+++ optional_test.cpp   1 Mar 2007 21:50:11 -0000       1.17.2.1
@@ -15,7 +15,9 @@
 
 #define BOOST_ENABLE_ASSERT_HANDLER
 
-#include "boost/optional.hpp"
+#include "boost/bind/apply.hpp" // Included just to test proper interaction 
with boost::apply<> as reported by Daniel Wallin
+
+#include "boost/optional/optional.hpp"
 
 #ifdef __BORLANDC__
 #pragma hdrstop
@@ -151,6 +153,95 @@
   ob.reset();
   check_is_pending_dtor( ARG(T) ) ;
   check_uninitialized(ob);
+  
+}
+
+template<class T>
+void test_conditional_ctor_and_get_valur_or ( T const* )
+{
+  TRACE( std::endl << BOOST_CURRENT_FUNCTION  );
+  
+  T a(321);
+  
+  T z(123);
+  
+  optional<T> const cdef0(false,a);
+  
+  optional<T> def0(false,a);
+  optional<T> def1 = boost::make_optional(false,a); //  T is not within boost 
so ADL won't find make_optional unqualified
+  check_uninitialized(def0);
+  check_uninitialized(def1);
+
+  optional<T> const co0(true,a);
+  
+  optional<T> o0(true,a);
+  optional<T> o1 = boost::make_optional(true,a); //  T is not within boost so 
ADL won't find make_optional unqualified
+
+  check_initialized(o0);
+  check_initialized(o1);
+  check_value(o0,a,z);
+  check_value(o1,a,z);
+  
+  T b = def0.get_value_or(z);
+  BOOST_CHECK( b == z ) ;
+  
+  b = get_optional_value_or(def0,z);
+  BOOST_CHECK( b == z ) ;
+  
+  b = o0.get_value_or(z);
+  BOOST_CHECK( b == a ) ;
+
+  b = get_optional_value_or(o0,z);
+  BOOST_CHECK( b == a ) ;
+  
+  
+  T const& crz = z ;
+  T&        rz = z ;
+  
+  T const& crzz = def0.get_value_or(crz);
+  BOOST_CHECK( crzz == crz ) ;
+  
+  T& rzz = def0.get_value_or(rz);
+  BOOST_CHECK( rzz == rz ) ;
+  
+  T const& crzzz = get_optional_value_or(cdef0,crz);
+  BOOST_CHECK( crzzz == crz ) ;
+  
+  T& rzzz = get_optional_value_or(def0,rz);
+  BOOST_CHECK( rzzz == rz ) ;
+  
+  T const& crb = o0.get_value_or(crz);
+  BOOST_CHECK( crb == a ) ;
+  
+  T& rb = o0.get_value_or(rz);
+  BOOST_CHECK( rb == b ) ;
+  
+  T const& crbb = get_optional_value_or(co0,crz);
+  BOOST_CHECK( crbb == b ) ;
+  
+  T const& crbbb = get_optional_value_or(o0,crz);
+  BOOST_CHECK( crbbb == b ) ;
+  
+  T& rbb = get_optional_value_or(o0,rz);
+  BOOST_CHECK( rbb == b ) ;
+  
+  T& ra = a ;
+  
+  optional<T&> defref(false,ra);
+  BOOST_CHECK(!defref);
+  
+  optional<T&> ref(true,ra);
+  BOOST_CHECK(!!ref);
+  
+  a = T(432);
+  
+  BOOST_CHECK( *ref == a ) ;
+  
+  T& r1 = defref.get_value_or(z);
+  BOOST_CHECK( r1 == z ) ;
+  
+  T& r2 = ref.get_value_or(z);
+  BOOST_CHECK( r2 == a ) ;
 }
 
 //
@@ -683,11 +774,30 @@
   test_default_implicit_construction(T(1),none);
 }
 
+template<class T>
+void test_arrow( T const* )
+{
+  TRACE( std::endl << BOOST_CURRENT_FUNCTION   );
+
+  T a(1234);
+
+  optional<T>        oa(a) ;
+  optional<T> const coa(a) ;
+  
+  BOOST_CHECK ( coa->V() == 1234 ) ;
+  
+  oa->V() = 4321 ;
+  
+  BOOST_CHECK (     a.V() = 1234 ) ;
+  BOOST_CHECK ( (*oa).V() = 4321 ) ;
+}
+
 void test_with_builtin_types()
 {
   TRACE( std::endl << BOOST_CURRENT_FUNCTION   );
 
   test_basics( ARG(double) );
+  test_conditional_ctor_and_get_valur_or( ARG(double) );
   test_uninitialized_access( ARG(double) );
   test_no_throwing_swap( ARG(double) );
   test_relops( ARG(double) ) ;
@@ -699,6 +809,7 @@
   TRACE( std::endl << BOOST_CURRENT_FUNCTION   );
 
   test_basics( ARG(X) );
+  test_conditional_ctor_and_get_valur_or( ARG(X) );
   test_direct_value_manip( ARG(X) );
   test_uninitialized_access( ARG(X) );
   test_throwing_direct_init( ARG(X) );
@@ -711,6 +822,7 @@
   test_throwing_swap( ARG(X) );
   test_relops( ARG(X) ) ;
   test_none( ARG(X) ) ;
+  test_arrow( ARG(X) ) ;
   BOOST_CHECK ( X::count == 0 ) ;
 }
 

Index: optional_test_ref.cpp
===================================================================
RCS file: /cvsroot/boost/boost/libs/optional/test/optional_test_ref.cpp,v
retrieving revision 1.5
retrieving revision 1.5.4.1
diff -u -d -r1.5 -r1.5.4.1
--- optional_test_ref.cpp       25 Apr 2005 10:01:07 -0000      1.5
+++ optional_test_ref.cpp       1 Mar 2007 21:50:11 -0000       1.5.4.1
@@ -299,6 +299,23 @@
   BOOST_CHECK ( !non_def ) ;
 }
 
+template<class T>
+void test_arrow( T const* )
+{
+  TRACE( std::endl << BOOST_CURRENT_FUNCTION   );
+
+  T a(1234);
+
+  optional<T&>        oa(a) ;
+  optional<T&> const coa(a) ;
+  
+  BOOST_CHECK ( coa->V() == 1234 ) ;
+  
+  oa->V() = 4321 ;
+  
+  BOOST_CHECK ( a.V() = 4321 ) ;
+}
+
 void test_with_builtin_types()
 {
   TRACE( std::endl << BOOST_CURRENT_FUNCTION   );
@@ -315,6 +332,7 @@
   test_basics( ARG(X) );
   test_relops( ARG(X) ) ;
   test_none  ( ARG(X) ) ;
+  test_arrow ( ARG(X) ) ;
 
   BOOST_CHECK ( X::count == 0 ) ;
 }

--- optional_test_ref_fail2.cpp DELETED ---


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to