00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MEMORY2BUFFERTEST_H
00020 #define MEMORY2BUFFERTEST_H
00021
00022 #include <bit/bit.h>
00023 #include <cppunit/TestFixture.h>
00024
00025 using namespace bit;
00026
00027 class Memory2BufferTest : public CppUnit::TestFixture {
00028 public:
00029
00030 CPPUNIT_TEST_SUITE( Memory2BufferTest );
00031
00032 CPPUNIT_TEST( end_partial_octet_ends_on_first_octet_boundary );
00033 CPPUNIT_TEST( end_partial_octet_ends_on_second_octet_boundary );
00034 CPPUNIT_TEST( end_whole_octet_ends_on_first_octet_boundary );
00035 CPPUNIT_TEST( end_whole_octet_ends_on_second_octet_boundary );
00036 CPPUNIT_TEST( end_three_bits_ends_on_first_octet_boundary );
00037 CPPUNIT_TEST( end_three_bits_ends_on_second_octet_boundary );
00038 CPPUNIT_TEST( end_two_mid_octets );
00039 CPPUNIT_TEST( end_two_mid_octet_bits );
00040 CPPUNIT_TEST( end_two_bits_into_mid_octet );
00041 CPPUNIT_TEST( end_spanning_octets );
00042 CPPUNIT_TEST( end_spanning_octets2 );
00043 CPPUNIT_TEST( start_partial_octet_ends_on_first_octet_boundary );
00044 CPPUNIT_TEST( start_partial_octet_ends_on_second_octet_boundary );
00045 CPPUNIT_TEST( start_whole_octet_ends_on_first_octet_boundary );
00046 CPPUNIT_TEST( start_whole_octet_ends_on_second_octet_boundary );
00047 CPPUNIT_TEST( start_three_bits_ends_on_first_octet_boundary );
00048 CPPUNIT_TEST( start_three_bits_ends_on_second_octet_boundary );
00049 CPPUNIT_TEST( start_two_mid_octets );
00050 CPPUNIT_TEST( start_two_mid_octet_bits );
00051 CPPUNIT_TEST( start_two_bits_into_mid_octet );
00052 CPPUNIT_TEST( start_spanning_octets );
00053 CPPUNIT_TEST( start_spanning_octets2 );
00054
00055 CPPUNIT_TEST( data_end_partial_octet_ends_on_first_octet_boundary );
00056 CPPUNIT_TEST( data_end_partial_octet_ends_on_second_octet_boundary );
00057 CPPUNIT_TEST( data_end_whole_octet_ends_on_first_octet_boundary );
00058 CPPUNIT_TEST( data_end_whole_octet_ends_on_second_octet_boundary );
00059 CPPUNIT_TEST( data_end_three_bits_ends_on_first_octet_boundary );
00060 CPPUNIT_TEST( data_end_three_bits_ends_on_second_octet_boundary );
00061 CPPUNIT_TEST( data_end_two_mid_octets );
00062 CPPUNIT_TEST( data_end_two_mid_octet_bits );
00063 CPPUNIT_TEST( data_end_two_bits_into_mid_octet );
00064 CPPUNIT_TEST( data_end_spanning_octets );
00065 CPPUNIT_TEST( data_end_spanning_octets2 );
00066 CPPUNIT_TEST( data_start_partial_octet_ends_on_first_octet_boundary );
00067 CPPUNIT_TEST( data_start_partial_octet_ends_on_second_octet_boundary );
00068 CPPUNIT_TEST( data_start_whole_octet_ends_on_first_octet_boundary );
00069 CPPUNIT_TEST( data_start_whole_octet_ends_on_second_octet_boundary );
00070 CPPUNIT_TEST( data_start_three_bits_ends_on_first_octet_boundary );
00071 CPPUNIT_TEST( data_start_three_bits_ends_on_second_octet_boundary );
00072 CPPUNIT_TEST( data_start_two_mid_octets );
00073 CPPUNIT_TEST( data_start_two_mid_octet_bits );
00074 CPPUNIT_TEST( data_start_two_bits_into_mid_octet );
00075 CPPUNIT_TEST( data_start_spanning_octets );
00076 CPPUNIT_TEST( data_start_spanning_octets2 );
00077
00078 CPPUNIT_TEST_SUITE_END();
00079
00080 public:
00081 void setUp() { }
00082
00083 void tearDown() { }
00084
00085 void end_partial_octet_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x1F345678 == mem2buf( 0x89ABCDEF, 4, 4, 4)); }
00086 void end_partial_octet_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x123F5678 == mem2buf( 0x89ABCDEF, 12, 4, 4));}
00087 void end_whole_octet_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0xEF345678 == mem2buf( 0x89ABCDEF, 0, 8, 8));}
00088 void end_whole_octet_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12EF5678 == mem2buf( 0x89ABCDEF, 8, 8, 8));}
00089 void end_three_bits_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x17345678 == mem2buf( 0x89ABCDEF, 5, 3, 3));}
00090 void end_three_bits_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12375678 == mem2buf( 0x89ABCDEF, 13, 3, 3));}
00091 void end_two_mid_octets() { CPPUNIT_ASSERT( 0x1CDEF678 == mem2buf( 0x89ABCDEF, 4, 16, 16));}
00092 void end_two_mid_octet_bits() { CPPUNIT_ASSERT( 0x16345678 == mem2buf( 0x89ABCDEF, 5, 2, 2));}
00093 void end_two_bits_into_mid_octet() { CPPUNIT_ASSERT( 0x0e345678 == mem2buf( 0x89ABCDEF, 2, 4, 2));}
00094 void end_spanning_octets() { CPPUNIT_ASSERT( 0x12BCDEF8 == mem2buf( 0x89ABCDEF, 8, 20, 20));}
00095 void end_spanning_octets2() { CPPUNIT_ASSERT( 0x1ABCDEF8 == mem2buf( 0x89ABCDEF, 4, 24, 24));}
00096
00097 void start_partial_octet_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x18345678 == mem2buf( 0x89ABCDEF, 4, 4, 4, START)); }
00098 void start_partial_octet_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12385678 == mem2buf( 0x89ABCDEF, 12, 4, 4, START));}
00099 void start_whole_octet_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x89345678 == mem2buf( 0x89ABCDEF, 0, 8, 8, START));}
00100 void start_whole_octet_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12895678 == mem2buf( 0x89ABCDEF, 8, 8, 8, START));}
00101 void start_three_bits_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x14345678 == mem2buf( 0x89ABCDEF, 5, 3, 3, START));}
00102 void start_three_bits_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12355678 == mem2buf( 0xA9ABCDEF, 13, 3, 3, START));}
00103 void start_two_mid_octets() { CPPUNIT_ASSERT( 0x189AB678 == mem2buf( 0x89ABCDEF, 4, 16, 16, START));}
00104 void start_two_mid_octet_bits() { CPPUNIT_ASSERT( 0x16345678 == mem2buf( 0xC9ABCDEF, 5, 2, 2, START));}
00105 void start_two_bits_into_mid_octet() { CPPUNIT_ASSERT( 0x0A345678 == mem2buf( 0x89ABCDEF, 2, 4, 2, START));}
00106 void start_spanning_octets() { CPPUNIT_ASSERT( 0x1289ABC8 == mem2buf( 0x89ABCDEF, 8, 20, 20, START));}
00107 void start_spanning_octets2() { CPPUNIT_ASSERT( 0x189ABCD8 == mem2buf( 0x89ABCDEF, 4, 24, 24, START));}
00108
00109 uint32_t mem2buf(uint32_t value, size_t offset, size_t destsize, size_t extract, Location loc=END) {
00110 Buffer::pointer b = Buffer::create();
00111 uint32_t buf=0x12345678;
00112 value = host_to_be(value);
00113 buf = host_to_be(buf);
00114 b->set_data(&buf, sizeof(buf));
00115 b->pack(&value, sizeof(value), loc, offset, destsize, extract);
00116 buf = *((uint32_t*)b->data());
00117 buf = be_to_host(buf);
00118
00119 return buf;
00120 }
00121
00122
00123 void data_end_partial_octet_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x1F345678 == data_mem2buf( 0x89ABCDEF, 4, 4, 4)); }
00124 void data_end_partial_octet_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x123F5678 == data_mem2buf( 0x89ABCDEF, 12, 4, 4));}
00125 void data_end_whole_octet_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0xEF345678 == data_mem2buf( 0x89ABCDEF, 0, 8, 8));}
00126 void data_end_whole_octet_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12EF5678 == data_mem2buf( 0x89ABCDEF, 8, 8, 8));}
00127 void data_end_three_bits_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x17345678 == data_mem2buf( 0x89ABCDEF, 5, 3, 3));}
00128 void data_end_three_bits_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12375678 == data_mem2buf( 0x89ABCDEF, 13, 3, 3));}
00129 void data_end_two_mid_octets() { CPPUNIT_ASSERT( 0x1CDEF678 == data_mem2buf( 0x89ABCDEF, 4, 16, 16));}
00130 void data_end_two_mid_octet_bits() { CPPUNIT_ASSERT( 0x16345678 == data_mem2buf( 0x89ABCDEF, 5, 2, 2));}
00131 void data_end_two_bits_into_mid_octet() { CPPUNIT_ASSERT( 0x0e345678 == data_mem2buf( 0x89ABCDEF, 2, 4, 2));}
00132 void data_end_spanning_octets() { CPPUNIT_ASSERT( 0x12BCDEF8 == data_mem2buf( 0x89ABCDEF, 8, 20, 20));}
00133 void data_end_spanning_octets2() { CPPUNIT_ASSERT( 0x1ABCDEF8 == data_mem2buf( 0x89ABCDEF, 4, 24, 24));}
00134
00135 void data_start_partial_octet_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x18345678 == data_mem2buf( 0x89ABCDEF, 4, 4, 4, START)); }
00136 void data_start_partial_octet_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12385678 == data_mem2buf( 0x89ABCDEF, 12, 4, 4, START));}
00137 void data_start_whole_octet_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x89345678 == data_mem2buf( 0x89ABCDEF, 0, 8, 8, START));}
00138 void data_start_whole_octet_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12895678 == data_mem2buf( 0x89ABCDEF, 8, 8, 8, START));}
00139 void data_start_three_bits_ends_on_first_octet_boundary() { CPPUNIT_ASSERT( 0x14345678 == data_mem2buf( 0x89ABCDEF, 5, 3, 3, START));}
00140 void data_start_three_bits_ends_on_second_octet_boundary() { CPPUNIT_ASSERT( 0x12355678 == data_mem2buf( 0xA9ABCDEF, 13, 3, 3, START));}
00141 void data_start_two_mid_octets() { CPPUNIT_ASSERT( 0x189AB678 == data_mem2buf( 0x89ABCDEF, 4, 16, 16, START));}
00142 void data_start_two_mid_octet_bits() { CPPUNIT_ASSERT( 0x16345678 == data_mem2buf( 0xC9ABCDEF, 5, 2, 2, START));}
00143 void data_start_two_bits_into_mid_octet() { CPPUNIT_ASSERT( 0x0A345678 == data_mem2buf( 0x89ABCDEF, 2, 4, 2, START));}
00144 void data_start_spanning_octets() { CPPUNIT_ASSERT( 0x1289ABC8 == data_mem2buf( 0x89ABCDEF, 8, 20, 20, START));}
00145 void data_start_spanning_octets2() { CPPUNIT_ASSERT( 0x189ABCD8 == data_mem2buf( 0x89ABCDEF, 4, 24, 24, START));}
00146
00147 uint32_t data_mem2buf(uint32_t value, size_t offset, size_t destsize, size_t extract, Location loc=END) {
00148 Buffer::pointer b = Buffer::create();
00149 Data d(sizeof(value));
00150 uint32_t buf=0x12345678;
00151 value = host_to_be(value);
00152 memcpy( d.data(), &value, sizeof(value) );
00153 buf = host_to_be(buf);
00154 b->set_data(&buf, sizeof(buf));
00155 b->pack(d, offset, destsize, extract, loc);
00156 buf = *((uint32_t*)b->data());
00157 buf = be_to_host(buf);
00158 return buf;
00159 }
00160
00161 };
00162
00163 #endif