Test: finished MessagePayload test case.
authorGuilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
Fri, 6 Jan 2012 10:19:51 +0000 (08:19 -0200)
committerGuilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
Fri, 6 Jan 2012 10:19:51 +0000 (08:19 -0200)
test/test_messagepayload.cpp

index d30bf7d..2be9d5f 100644 (file)
@@ -20,87 +20,278 @@ on this file might be covered by the GNU General Public License.
 
 #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()