#include #include #include #include #include using namespace origin; using namespace std; void test_bool_dynarray() { { const std::size_t v_size = 13; dynarray a(v_size); assert(!a.empty()); assert(a.size() == v_size); { unsigned int cnt = 0; for(auto i = a.begin(); i != a.end(); ++i) { assert(a[cnt] == *i); ++cnt; } } { unsigned int bit_pattern = 0x0000164a; // ...1011001001010 unsigned int bit_mask = 4096u; for(auto i = a.begin(); i != a.end(); ++i) { *i = bit_pattern & bit_mask; bit_mask >>= 1; } bit_mask = 4096u; unsigned int int_form_of_bits = 0; unsigned int tmp; unsigned int cnt = 12; for(auto i = a.begin(); i != a.end(); ++i) { tmp = *i ? 1u : 0u; int_form_of_bits += tmp << cnt; --cnt; } assert(int_form_of_bits == bit_pattern); assert(a.front() == true); assert(a.back() == false); } } { const std::size_t v_size = 27; dynarray a(v_size, true); for(auto i = a.begin(); i != a.end(); ++i) assert(*i); dynarray b(a); for(auto i = b.begin(); i != b.end(); ++i) assert(*i); dynarray c(1, false); swap(a, c); assert(a.size() == 1); assert(c.size() == 27); assert(a.front() == false); assert(c.front() == true); } { dynarray a(13); unsigned int bit_pattern = 0x0000164a; // ...1011001001010 unsigned int bit_mask = 4096u; for(auto i = a.begin(); i != a.end(); ++i) { *i = bit_pattern & bit_mask; bit_mask >>= 1; } auto i = a.begin(); auto ri = a.rbegin(); unsigned int c = 0, d = 0; unsigned int tmp; unsigned int cnt = 12; for(; i != a.end(); ++i, ++ri) { tmp = *i ? 1u : 0u; c += tmp << cnt; tmp = *ri ? 1u : 0u; d += tmp << (12 - cnt); --cnt; } assert(c == d); } } int main() { cout << "Testing boolean specialization of dynarray...\n"; test_bool_dynarray(); cout << "Test complete.\n"; return 0; }