Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r62877 - in sandbox/SOC/2010/bit_masks: boost/integer lib/integer/test/bft_testing
From: bbartmanboost_at_[hidden]
Date: 2010-06-12 17:02:45


Author: bbartman
Date: 2010-06-12 17:02:45 EDT (Sat, 12 Jun 2010)
New Revision: 62877
URL: http://svn.boost.org/trac/boost/changeset/62877

Log:
Completed testing for reference type.
Text files modified:
   sandbox/SOC/2010/bit_masks/boost/integer/bitfield_tuple.hpp | 9 ++--
   sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp | 75 +++++++++++++++++++++++++++++++++------
   2 files changed, 67 insertions(+), 17 deletions(-)

Modified: sandbox/SOC/2010/bit_masks/boost/integer/bitfield_tuple.hpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/boost/integer/bitfield_tuple.hpp (original)
+++ sandbox/SOC/2010/bit_masks/boost/integer/bitfield_tuple.hpp 2010-06-12 17:02:45 EDT (Sat, 12 Jun 2010)
@@ -76,17 +76,16 @@
         typedef typename integer::bitfield<
             unsigned_storage_type,
             MaskInfo::offset::value,
- MaskInfo::offset::value + MaskInfo::field_width::value - 1,
- unsigned_return_type
+ MaskInfo::offset::value + MaskInfo::field_width::value - 1
> bitfield_type;
 
- typedef typename bitfield_type::value_type somethingl;
+ // typedef typename bitfield_type::value_type somethingl;
         /** Reference constructor.
          * Because the bit_ref is an abstraction of a reference then it also
          * must behave like a reference type.
          */
         bit_ref(storage_type& ref)
- :_ref( (typename bitfield_type::storage_type&)ref )
+ :_ref( *reinterpret_cast<unsigned_storage_type*>(&ref) )
         { }
         
         /** Implicit conversion operator
@@ -102,7 +101,7 @@
          */
         _self const& operator=(return_type const& rhs) {
             _ref.set(
- static_cast< typename make_unsigned<return_type>::type > (rhs));
+ static_cast< typename make_unsigned<storage_type>::type > (rhs));
             return *this;
         }
         

Modified: sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp (original)
+++ sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp 2010-06-12 17:02:45 EDT (Sat, 12 Jun 2010)
@@ -18,26 +18,77 @@
> bft;
 
 
+typedef details::bitfield_element_< char,
+red,mpl::size_t<9>,mpl::size_t<8> > element_1;
 
+typedef details::bitfield_element_< char,
+red, mpl::size_t<0>, mpl::size_t<8> > element_2;
 
+typedef details::bitfield_element_< char,
+red, mpl::size_t<8>, mpl::size_t<8> > element_3;
+
+typedef details::bitfield_element_< char,
+red, mpl::size_t<16>, mpl::size_t<8> > element_4;
+
+typedef details::bitfield_element_< char,
+red, mpl::size_t<24>, mpl::size_t<8> > element_5;
 int main() {
 
     int data_storage(0);
- typedef details::bitfield_element_<
- char,
- red,
- mpl::size_t<9>,
- mpl::size_t<8>
- > element;
 
- typedef bft::bit_ref<element> ref_type_1;
+ // simple test entery and retreval.
+ {
+ typedef bft::bit_ref<element_1> ref_type_1;
 
     ref_type_1 test_1( data_storage );
 
- // char temp = test_1;
- char value_to_assign = 'a';
- test_1 = value_to_assign;
- BOOST_ASSERT(( data_storage >> 9 == 'a' ));
-
+ char temp = 'a';
+ test_1 = temp;
+ BOOST_ASSERT(( test_1 == temp ));
+ }
+
+ data_storage = 0;
+
+ // slightly more complex.
+ // multiple fields which arn't next to one another.
+ {
+ typedef bft::bit_ref<element_2> ref_type_1;
+ typedef bft::bit_ref<element_4> ref_type_2;
+
+ // constructing reference types.
+ ref_type_1 ref_1(data_storage);
+ ref_type_2 ref_2(data_storage);
+ ref_1 = 'q';
+ ref_2 = 'p';
+
+ BOOST_ASSERT(( ref_1 == 'q' ));
+ BOOST_ASSERT(( ref_2 == 'p' ));
+ }
+
+ data_storage = 0;
+
+ // case the integer storage type is completely filled with fields.
+ {
+ // create fake reference type to test..
+ typedef bft::bit_ref<element_2> ref_type_1;
+ typedef bft::bit_ref<element_3> ref_type_2;
+ typedef bft::bit_ref<element_4> ref_type_3;
+ typedef bft::bit_ref<element_5> ref_type_4;
+ //
+ ref_type_1 ref_1(data_storage);
+ ref_type_2 ref_2(data_storage);
+ ref_type_3 ref_3(data_storage);
+ ref_type_4 ref_4(data_storage);
+
+ ref_1 = 'p';
+ ref_2 = 'q';
+ ref_3 = 'r';
+ ref_4 = 's';
+
+ BOOST_ASSERT(( ref_1 == 'p' ));
+ BOOST_ASSERT(( ref_2 == 'q' ));
+ BOOST_ASSERT(( ref_3 == 'r' ));
+ BOOST_ASSERT(( ref_4 == 's' ));
+ }
     return 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