#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK
+
+
+#include <streambuf>
+
#include <boost/test/unit_test.hpp>
#include "host/messagepayload.h"
+MessagePayload create_message_payload( const std::size_t bytes_total )
+{
+ return MessagePayload( bytes_total );
+}
+
+void fill_message_payload(
+ const std::size_t bytes_total,
+ const uint8_t first_value,
+ MessagePayload& mp
+)
+{
+ for ( std::size_t byte_index = 0; byte_index < bytes_total; byte_index++ )
+ {
+ mp[ byte_index ] = static_cast<uint8_t>( first_value + byte_index );
+ }
+}
+
BOOST_AUTO_TEST_SUITE( TestMessagePayload )
BOOST_AUTO_TEST_CASE( basic_assignment )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ MessagePayload mp_filled = create_message_payload( 10 );
+ fill_message_payload( 10, 0xC0, mp_filled );
+
+ MessagePayload mp_assigned = create_message_payload( 10 );
+ mp_assigned = mp_filled;
+
+ BOOST_CHECK_EQUAL( mp_assigned[0], 0xC0 );
+ BOOST_CHECK_EQUAL( mp_assigned[1], 0xC1 );
+ BOOST_CHECK_EQUAL( mp_assigned[2], 0xC2 );
+ BOOST_CHECK_EQUAL( mp_assigned[3], 0xC3 );
+ BOOST_CHECK_EQUAL( mp_assigned[4], 0xC4 );
+ BOOST_CHECK_EQUAL( mp_assigned[5], 0xC5 );
+ BOOST_CHECK_EQUAL( mp_assigned[6], 0xC6 );
+ BOOST_CHECK_EQUAL( mp_assigned[7], 0xC7 );
+ BOOST_CHECK_EQUAL( mp_assigned[8], 0xC8 );
+ BOOST_CHECK_EQUAL( mp_assigned[9], 0xC9 );
}
BOOST_AUTO_TEST_CASE( array_subscript_const )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ MessagePayload mp_filled = create_message_payload( 10 );
+ fill_message_payload( 10, 0xC0, mp_filled );
+
+ const MessagePayload mp_const( mp_filled );
+
+ BOOST_CHECK_EQUAL( mp_const[0], 0xC0 );
+ BOOST_CHECK_EQUAL( mp_const[1], 0xC1 );
+ BOOST_CHECK_EQUAL( mp_const[2], 0xC2 );
+ BOOST_CHECK_EQUAL( mp_const[3], 0xC3 );
+ BOOST_CHECK_EQUAL( mp_const[4], 0xC4 );
+ BOOST_CHECK_EQUAL( mp_const[5], 0xC5 );
+ BOOST_CHECK_EQUAL( mp_const[6], 0xC6 );
+ BOOST_CHECK_EQUAL( mp_const[7], 0xC7 );
+ BOOST_CHECK_EQUAL( mp_const[8], 0xC8 );
+ BOOST_CHECK_EQUAL( mp_const[9], 0xC9 );
}
BOOST_AUTO_TEST_CASE( array_subscript )
{
MessagePayload mp( 10 );
- mp[0] = 0xA0;
- mp[1] = 0xA1;
- mp[2] = 0xA2;
- mp[3] = 0xA3;
- mp[4] = 0xA4;
- mp[5] = 0xA5;
- mp[6] = 0xA6;
- mp[7] = 0xA7;
- mp[8] = 0xA8;
- mp[9] = 0xA9;
-
- MessagePayload mp2( mp );
- BOOST_CHECK_EQUAL( mp2[0], 0xA0 );
- BOOST_CHECK_EQUAL( mp2[1], 0xA1 );
- BOOST_CHECK_EQUAL( mp2[2], 0xA2 );
- BOOST_CHECK_EQUAL( mp2[3], 0xA3 );
- BOOST_CHECK_EQUAL( mp2[4], 0xA4 );
- BOOST_CHECK_EQUAL( mp2[5], 0xA5 );
- BOOST_CHECK_EQUAL( mp2[6], 0xA6 );
- BOOST_CHECK_EQUAL( mp2[7], 0xA7 );
- BOOST_CHECK_EQUAL( mp2[8], 0xA8 );
- BOOST_CHECK_EQUAL( mp2[9], 0xA9 );
+ mp[0] = 0xC0;
+ mp[1] = 0xC1;
+ mp[2] = 0xC2;
+ mp[3] = 0xC3;
+ mp[4] = 0xC4;
+ mp[5] = 0xC5;
+ mp[6] = 0xC6;
+ mp[7] = 0xC7;
+ mp[8] = 0xC8;
+ mp[9] = 0xC9;
+
+ BOOST_CHECK_EQUAL( mp[0], 0xC0 );
+ BOOST_CHECK_EQUAL( mp[1], 0xC1 );
+ BOOST_CHECK_EQUAL( mp[2], 0xC2 );
+ BOOST_CHECK_EQUAL( mp[3], 0xC3 );
+ BOOST_CHECK_EQUAL( mp[4], 0xC4 );
+ BOOST_CHECK_EQUAL( mp[5], 0xC5 );
+ BOOST_CHECK_EQUAL( mp[6], 0xC6 );
+ BOOST_CHECK_EQUAL( mp[7], 0xC7 );
+ BOOST_CHECK_EQUAL( mp[8], 0xC8 );
+ BOOST_CHECK_EQUAL( mp[9], 0xC9 );
}
BOOST_AUTO_TEST_CASE( get )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ MessagePayload mp_filled = create_message_payload( 10 );
+ fill_message_payload( 10, 0xC0, mp_filled );
+
+ uint8_t *mp_ptr = mp_filled.get();
+ BOOST_CHECK_EQUAL( mp_ptr[0], 0xC0 );
+ BOOST_CHECK_EQUAL( mp_ptr[1], 0xC1 );
+ BOOST_CHECK_EQUAL( mp_ptr[2], 0xC2 );
+ BOOST_CHECK_EQUAL( mp_ptr[3], 0xC3 );
+ BOOST_CHECK_EQUAL( mp_ptr[4], 0xC4 );
+ BOOST_CHECK_EQUAL( mp_ptr[5], 0xC5 );
+ BOOST_CHECK_EQUAL( mp_ptr[6], 0xC6 );
+ BOOST_CHECK_EQUAL( mp_ptr[7], 0xC7 );
+ BOOST_CHECK_EQUAL( mp_ptr[8], 0xC8 );
+ BOOST_CHECK_EQUAL( mp_ptr[9], 0xC9 );
}
BOOST_AUTO_TEST_CASE( append )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ MessagePayload mp_original( 10 );
+ fill_message_payload( 10, 0xC0, mp_original );
+
+ MessagePayload mp_extra( 10 );
+ fill_message_payload( 10, 0xB0, mp_extra );
+
+ mp_original.append( mp_extra.get(), 10 );
+
+ BOOST_CHECK_EQUAL( mp_original[0], 0xC0 );
+ BOOST_CHECK_EQUAL( mp_original[1], 0xC1 );
+ BOOST_CHECK_EQUAL( mp_original[2], 0xC2 );
+ BOOST_CHECK_EQUAL( mp_original[3], 0xC3 );
+ BOOST_CHECK_EQUAL( mp_original[4], 0xC4 );
+ BOOST_CHECK_EQUAL( mp_original[5], 0xC5 );
+ BOOST_CHECK_EQUAL( mp_original[6], 0xC6 );
+ BOOST_CHECK_EQUAL( mp_original[7], 0xC7 );
+ BOOST_CHECK_EQUAL( mp_original[8], 0xC8 );
+ BOOST_CHECK_EQUAL( mp_original[9], 0xC9 );
+
+ BOOST_CHECK_EQUAL( mp_original[10], 0xB0 );
+ BOOST_CHECK_EQUAL( mp_original[11], 0xB1 );
+ BOOST_CHECK_EQUAL( mp_original[12], 0xB2 );
+ BOOST_CHECK_EQUAL( mp_original[13], 0xB3 );
+ BOOST_CHECK_EQUAL( mp_original[14], 0xB4 );
+ BOOST_CHECK_EQUAL( mp_original[15], 0xB5 );
+ BOOST_CHECK_EQUAL( mp_original[16], 0xB6 );
+ BOOST_CHECK_EQUAL( mp_original[17], 0xB7 );
+ BOOST_CHECK_EQUAL( mp_original[18], 0xB8 );
+ BOOST_CHECK_EQUAL( mp_original[19], 0xB9 );
}
BOOST_AUTO_TEST_CASE( decode16 )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ MessagePayload mp = create_message_payload( 10 );
+ fill_message_payload( 10, 0xC0, mp );
+
+ BOOST_CHECK_EQUAL( mp.decode16( 0, 1 ), 0xC0C1 );
+ BOOST_CHECK_EQUAL( mp.decode16( 1, 2 ), 0xC1C2 );
+ BOOST_CHECK_EQUAL( mp.decode16( 2, 3 ), 0xC2C3 );
+ BOOST_CHECK_EQUAL( mp.decode16( 3, 4 ), 0xC3C4 );
+ BOOST_CHECK_EQUAL( mp.decode16( 4, 5 ), 0xC4C5 );
+ BOOST_CHECK_EQUAL( mp.decode16( 5, 6 ), 0xC5C6 );
+ BOOST_CHECK_EQUAL( mp.decode16( 6, 7 ), 0xC6C7 );
+ BOOST_CHECK_EQUAL( mp.decode16( 7, 8 ), 0xC7C8 );
+ BOOST_CHECK_EQUAL( mp.decode16( 8, 9 ), 0xC8C9 );
}
BOOST_AUTO_TEST_CASE( encode16 )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ MessagePayload mp = create_message_payload( 10 );
+
+ mp.encode16( 0, 1, 0xC0C1 );
+ mp.encode16( 1, 2, 0xC1C2 );
+ mp.encode16( 2, 3, 0xC2C3 );
+ mp.encode16( 3, 4, 0xC3C4 );
+ mp.encode16( 4, 5, 0xC4C5 );
+ mp.encode16( 5, 6, 0xC5C6 );
+ mp.encode16( 6, 7, 0xC6C7 );
+ mp.encode16( 7, 8, 0xC7C8 );
+ mp.encode16( 8, 9, 0xC8C9 );
+
+ BOOST_CHECK_EQUAL( mp[0], 0xC0 );
+ BOOST_CHECK_EQUAL( mp[1], 0xC1 );
+ BOOST_CHECK_EQUAL( mp[2], 0xC2 );
+ BOOST_CHECK_EQUAL( mp[3], 0xC3 );
+ BOOST_CHECK_EQUAL( mp[4], 0xC4 );
+ BOOST_CHECK_EQUAL( mp[5], 0xC5 );
+ BOOST_CHECK_EQUAL( mp[6], 0xC6 );
+ BOOST_CHECK_EQUAL( mp[7], 0xC7 );
+ BOOST_CHECK_EQUAL( mp[8], 0xC8 );
+ BOOST_CHECK_EQUAL( mp[9], 0xC9 );
}
BOOST_AUTO_TEST_CASE( decode32 )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ MessagePayload mp = create_message_payload( 10 );
+ fill_message_payload( 10, 0xC0, mp );
+
+ BOOST_CHECK_EQUAL( mp.decode32( 0, 3 ), 0xC0C1C2C3 );
+ BOOST_CHECK_EQUAL( mp.decode32( 1, 4 ), 0xC1C2C3C4 );
+ BOOST_CHECK_EQUAL( mp.decode32( 2, 5 ), 0xC2C3C4C5 );
+ BOOST_CHECK_EQUAL( mp.decode32( 3, 6 ), 0xC3C4C5C6 );
+ BOOST_CHECK_EQUAL( mp.decode32( 4, 7 ), 0xC4C5C6C7 );
+ BOOST_CHECK_EQUAL( mp.decode32( 5, 8 ), 0xC5C6C7C8 );
+ BOOST_CHECK_EQUAL( mp.decode32( 6, 9 ), 0xC6C7C8C9 );
}
BOOST_AUTO_TEST_CASE( encode32 )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ MessagePayload mp = create_message_payload( 10 );
+
+ mp.encode32( 0, 3, 0xC0C1C2C3 );
+ mp.encode32( 1, 4, 0xC1C2C3C4 );
+ mp.encode32( 2, 5, 0xC2C3C4C5 );
+ mp.encode32( 3, 6, 0xC3C4C5C6 );
+ mp.encode32( 4, 7, 0xC4C5C6C7 );
+ mp.encode32( 5, 8, 0xC5C6C7C8 );
+ mp.encode32( 6, 9, 0xC6C7C8C9 );
+
+ BOOST_CHECK_EQUAL( mp[0], 0xC0 );
+ BOOST_CHECK_EQUAL( mp[1], 0xC1 );
+ BOOST_CHECK_EQUAL( mp[2], 0xC2 );
+ BOOST_CHECK_EQUAL( mp[3], 0xC3 );
+ BOOST_CHECK_EQUAL( mp[4], 0xC4 );
+ BOOST_CHECK_EQUAL( mp[5], 0xC5 );
+ BOOST_CHECK_EQUAL( mp[6], 0xC6 );
+ BOOST_CHECK_EQUAL( mp[7], 0xC7 );
+ BOOST_CHECK_EQUAL( mp[8], 0xC8 );
+ BOOST_CHECK_EQUAL( mp[9], 0xC9 );
}
BOOST_AUTO_TEST_CASE( read )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ uint8_t numbers[] = {
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9
+ };
+
+ std::basic_stringbuf<uint8_t> sb;
+ sb.pubsetbuf( numbers, 10 );
+ std::basic_istream<uint8_t> is( &sb );
+
+ MessagePayload mp = create_message_payload( 10 );
+ mp.read( reinterpret_cast<std::istream&>(is) );
+
+ BOOST_CHECK_EQUAL( mp[0], 0xC0 );
+ BOOST_CHECK_EQUAL( mp[1], 0xC1 );
+ BOOST_CHECK_EQUAL( mp[2], 0xC2 );
+ BOOST_CHECK_EQUAL( mp[3], 0xC3 );
+ BOOST_CHECK_EQUAL( mp[4], 0xC4 );
+ BOOST_CHECK_EQUAL( mp[5], 0xC5 );
+ BOOST_CHECK_EQUAL( mp[6], 0xC6 );
+ BOOST_CHECK_EQUAL( mp[7], 0xC7 );
+ BOOST_CHECK_EQUAL( mp[8], 0xC8 );
+ BOOST_CHECK_EQUAL( mp[9], 0xC9 );
}
BOOST_AUTO_TEST_CASE( write )
{
- BOOST_CHECK_EQUAL( 3, 3 );
+ uint8_t numbers[ 10 ];
+ std::fill( numbers, numbers + 9, 0 );
+
+ std::basic_stringbuf<uint8_t> sb;
+ sb.pubsetbuf( numbers, 10 );
+ std::basic_ostream<uint8_t> os( &sb );
+
+ MessagePayload mp = create_message_payload( 10 );
+ fill_message_payload( 10, 0xC0, mp );
+ mp.write( reinterpret_cast<std::ostream&>(os) );
+ os.flush();
+
+ BOOST_CHECK_EQUAL( numbers[0], 0xC0 );
+ BOOST_CHECK_EQUAL( numbers[1], 0xC1 );
+ BOOST_CHECK_EQUAL( numbers[2], 0xC2 );
+ BOOST_CHECK_EQUAL( numbers[3], 0xC3 );
+ BOOST_CHECK_EQUAL( numbers[4], 0xC4 );
+ BOOST_CHECK_EQUAL( numbers[5], 0xC5 );
+ BOOST_CHECK_EQUAL( numbers[6], 0xC6 );
+ BOOST_CHECK_EQUAL( numbers[7], 0xC7 );
+ BOOST_CHECK_EQUAL( numbers[8], 0xC8 );
+ BOOST_CHECK_EQUAL( numbers[9], 0xC9 );
}
BOOST_AUTO_TEST_SUITE_END()