|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r67491 - in sandbox/SOC/2010/bit_masks: boost/integer lib/integer/test/bitfield_vector_testing
From: bbartmanboost_at_[hidden]
Date: 2010-12-29 11:24:09
Author: bbartman
Date: 2010-12-29 11:24:08 EST (Wed, 29 Dec 2010)
New Revision: 67491
URL: http://svn.boost.org/trac/boost/changeset/67491
Log:
working on implementing additional functionality for the bitfield_vector
Text files modified:
sandbox/SOC/2010/bit_masks/boost/integer/bitfield_vector.hpp | 46 ++++++++++----
sandbox/SOC/2010/bit_masks/lib/integer/test/bitfield_vector_testing/bitfield_vector_test.cpp | 126 +++++++++++++++++++++++++++++++++++++++
2 files changed, 156 insertions(+), 16 deletions(-)
Modified: sandbox/SOC/2010/bit_masks/boost/integer/bitfield_vector.hpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/boost/integer/bitfield_vector.hpp (original)
+++ sandbox/SOC/2010/bit_masks/boost/integer/bitfield_vector.hpp 2010-12-29 11:24:08 EST (Wed, 29 Dec 2010)
@@ -721,34 +721,54 @@
/** Resize to a size given in elements. */
- void resize(size_type sz, value_type c = value_type() ) {
+ void resize(size_type sz, value_type val = value_type() ) {
+ if(sz == size()) return;
size_type next_size_in_bits = Width * sz;
// fewer elements than needed.
- if(next_size_in_bits <= this->m_impl.m_bits_in_use ) {
+ if(next_size_in_bits < this->m_impl.m_bits_in_use ) {
this->m_impl.m_bits_in_use = next_size_in_bits;
return;
}
- // not enough space
- if(next_size_in_bits > ((this->m_impl.m_end - this->m_impl.m_start) * Width)) {
- // while(
+ // adding elements to the end of the bitfield_vector.
+ while(this->m_impl.m_bits_in_use < next_size_in_bits ) {
+ push_back(val);
}
-
}
- reference operator[](size_type n);
- const_reference operator[](size_type n) const;
- reference at(size_type n);
- const_reference at(size_type n) const;
+
+ /** Operator []. */
+ reference operator[](size_type n) {
+ return reference( *(begin() + n));
+ }
+
+ /** const operator[] */
+ const_reference operator[](size_type n) const {
+ return const_reference( *(begin() + n));
+ }
+
+ /** at throwing indexing. */
+ reference at(size_type n) {
+ if(n > size() ) {
+ throw std::out_of_range("Out of Range: invalid value for n.");
+ }
+ return (*this)[n];
+ }
+
+ /** const at throwing indexing. */
+ const_reference at(size_type n) const {
+ if(n > size() ) {
+ throw std::out_of_range();
+ }
+ return (*this)[n];
+ }
template <class InputIterator>
void assign(InputIterator first, InputIterator last);
void assign(size_type n, value_type const& u);
- /**
- *
- */
+ /** Add an element to the end of the vector. */
void push_back(value_type const& x) {
check_for_resizing();
iterator iter = end();
Modified: sandbox/SOC/2010/bit_masks/lib/integer/test/bitfield_vector_testing/bitfield_vector_test.cpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/lib/integer/test/bitfield_vector_testing/bitfield_vector_test.cpp (original)
+++ sandbox/SOC/2010/bit_masks/lib/integer/test/bitfield_vector_testing/bitfield_vector_test.cpp 2010-12-29 11:24:08 EST (Wed, 29 Dec 2010)
@@ -22,6 +22,7 @@
struct test_for_bfv
:Bfv
{
+ typedef test_for_bfv<T,Width,Alloc,Bfv> self;
typedef Bfv _base;
/** Tests to make sure that I got all of the typedefs from within
@@ -281,16 +282,113 @@
BOOST_TEST( this->m_impl.m_bits_in_use == 0);
}
+
+
// resize
void test_resize() {
- // BOOST_TEST( )
- // test case size > the the resizing value.
+ typedef typename _base::iterator iterator;
+ this->clear();
+ for(std::size_t i=0; i < 3u; ++i) this->push_back(5);
+
+ // test case size < the the resizing value.
+ BOOST_TEST( this->size() == 3u);
+
+ this->resize(2);
+ BOOST_TEST( this->size() == 2u);
+ for(iterator i = this->begin() ;i != this->end(); ++i) {
+ BOOST_TEST( *i == 5);
+ }
+
+ // resize with the same value in the vector.
+ this->resize(2);
+ BOOST_TEST( this->size() == 2u);
+ for(iterator i = this->begin() ;i != this->end(); ++i) {
+ BOOST_TEST( *i == 5);
+ }
+
+ // resize to > than size
+ this->clear();
+ for(std::size_t i=0; i < 3u; ++i) this->push_back(4);
+ this->resize(10,6);
+ BOOST_TEST( this->size() == 10u);
+ iterator iter = this->begin();
+ iterator ending = iter + 3;
+ for(;iter != ending;++iter) {
+ BOOST_TEST(*iter == 4u);
+ }
+
+ ending = this->end();
+ for(;iter != ending;++iter) {
+ BOOST_TEST(*iter == 6);
+ }
}
// push_back
void test_push_back(T val) {
BOOST_TEST(this->back() == val);
}
+
+ // operator[]
+ void test_square_bracket_operator() {
+ this->clear();
+ for(std::size_t i=0; i < 3u; ++i) this->push_back(4u);
+ // this->operator[](0);
+ for(std::size_t i = 0; i<3u; ++i){
+ BOOST_TEST( ((*this)[i]) == 4u);
+ }
+ for(std::size_t i = 0; i<3u; ++i){
+ ((*this)[i]) = 5u;
+ }
+ for(std::size_t i = 0; i<3u; ++i){
+ BOOST_TEST( ((*this)[i]) == 5u);
+ }
+ }
+
+ // const operator[]
+ void test_const_square_bracket_operator() {
+ this->clear();
+ for(std::size_t i=0; i < 3u; ++i) this->push_back(4u);
+ // this->operator[](0);
+ for(std::size_t i = 0; i<3u; ++i){
+ BOOST_TEST( (const_cast<self const&>(*this)[i]) == 4u);
+ }
+ }
+
+ // at test
+ void test_at() {
+ this->clear();
+ for(std::size_t i=0; i < 3u; ++i) this->push_back(i);
+ for(std::size_t i=0; i < 3u; ++i) {
+ BOOST_TEST( this->at(i) == i);
+ }
+
+ try{
+ this->at(100);
+ }catch(std::out_of_range const&) {
+ return;
+ }catch(...) {
+ BOOST_TEST(!"Didn't catch correct exception from at.");
+ }
+ BOOST_TEST(!"Didn't catch Exception from at.");
+ }
+
+ // const at
+ void test_const_at() {
+ this->clear();
+ for(std::size_t i=0; i < 3u; ++i) this->push_back(i);
+ for(std::size_t i=0; i < 3u; ++i) {
+ BOOST_TEST( const_cast<self const&>(*this)->at(i) == i);
+ }
+
+ try{
+ const_cast<self const&>(*this)->at(100);
+ }catch(std::out_of_range const&) {
+ return;
+ }catch(...) {
+ BOOST_TEST(!"Didn't catch correct exception from at.");
+ }
+ BOOST_TEST(!"Didn't catch Exception from at.");
+ }
};
@@ -423,7 +521,7 @@
// resize test
{
- Tester t1(8,2);
+ Tester t1;
t1.test_resize();
}
@@ -433,6 +531,28 @@
t1.push_back(3);
t1.test_push_back(3);
}
+
+ // operator[]
+ {
+ Tester t1;
+ t1.test_square_bracket_operator();
+ }
+
+ // const operator[]
+ {
+ Tester t1;
+ t1.test_const_square_bracket_operator();
+ }
+
+ // at test
+ {
+ Tester t1;
+ t1.test_at();
+ }
+
+ // const at test
+ {
+ }
}
int main() {
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