// $Id$
//
-// Copyright (C) 2006
+// Copyright (C) 2006
// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
// Stefan Bund <stefan.bund@fokus.fraunhofer.de>
//#include "ParseInt.test.ih"
// Custom includes
-#include "ParseInt.hh"
-#include "Packet.hh"
+#include "Packets.hh"
#include <boost/test/auto_unit_test.hpp>
#include <boost/test/test_tools.hpp>
#define prefix_
///////////////////////////////cc.p////////////////////////////////////////
-using namespace satcom::pkf;
+using namespace senf;
+
+namespace {
+ struct VoidPacket : public PacketTypeBase
+ {};
+}
BOOST_AUTO_UNIT_TEST(parseInt_fixedSizes)
{
- unsigned char data[] = { 0x8e, 0x2f, 0x57, 0x12, 0xd1 };
- typedef unsigned char * iterator;
+ PacketInterpreterBase::byte data[] = { 0x8e, 0x2f, 0x57, 0x12, 0xd1 };
+ PacketInterpreterBase::ptr p (PacketInterpreter<VoidPacket>::create(data));
- BOOST_CHECK_EQUAL(Parse_Int8<iterator>(data).value(), -114);
- BOOST_CHECK_EQUAL(Parse_Int8<iterator>(data+1).value(), 47);
- BOOST_CHECK_EQUAL(Parse_UInt8<iterator>(data).value(), 142u);
+ BOOST_CHECK_EQUAL(Parse_Int8(p->data().begin(),&p->data()).value(), -114);
+ BOOST_CHECK_EQUAL(Parse_Int8(p->data().begin()+1,&p->data()).value(), 47);
+ BOOST_CHECK_EQUAL(Parse_UInt8(p->data().begin(),&p->data()).value(), 142u);
- BOOST_CHECK_EQUAL(Parse_Int16<iterator>(data).value(), -29137);
- BOOST_CHECK_EQUAL(Parse_Int16<iterator>(data+1).value(), 12119);
- BOOST_CHECK_EQUAL(Parse_UInt16<iterator>(data).value(), 36399u);
+ BOOST_CHECK_EQUAL(Parse_Int16(p->data().begin(),&p->data()).value(), -29137);
+ BOOST_CHECK_EQUAL(Parse_Int16(p->data().begin()+1,&p->data()).value(), 12119);
+ BOOST_CHECK_EQUAL(Parse_UInt16(p->data().begin(),&p->data()).value(), 36399u);
- BOOST_CHECK_EQUAL(Parse_Int24<iterator>(data).value(), -7458985);
- BOOST_CHECK_EQUAL(Parse_Int24<iterator>(data+1).value(), 3102482);
- BOOST_CHECK_EQUAL(Parse_UInt24<iterator>(data).value(), 9318231u);
+ BOOST_CHECK_EQUAL(Parse_Int24(p->data().begin(),&p->data()).value(), -7458985);
+ BOOST_CHECK_EQUAL(Parse_Int24(p->data().begin()+1,&p->data()).value(), 3102482);
+ BOOST_CHECK_EQUAL(Parse_UInt24(p->data().begin(),&p->data()).value(), 9318231u);
- BOOST_CHECK_EQUAL(Parse_Int32<iterator>(data).value(), -1909500142);
- BOOST_CHECK_EQUAL(Parse_Int32<iterator>(data+1).value(), 794235601);
- BOOST_CHECK_EQUAL(Parse_UInt32<iterator>(data).value(), 2385467154u);
+ BOOST_CHECK_EQUAL(Parse_Int32(p->data().begin(),&p->data()).value(), -1909500142);
+ BOOST_CHECK_EQUAL(Parse_Int32(p->data().begin()+1,&p->data()).value(), 794235601);
+ BOOST_CHECK_EQUAL(Parse_UInt32(p->data().begin(),&p->data()).value(), 2385467154u);
}
BOOST_AUTO_UNIT_TEST(parseInt_bits)
// 012345678901234567890123456789012345678901234567
// -------- -------- --------
// 011000111101011101011010001100011010010001000110
- unsigned char data[] = { 0x63, 0xd7, 0x5a, 0x31, 0xa4, 0x46 };
- typedef unsigned char * iterator;
-
+ PacketInterpreterBase::byte data[] = { 0x63, 0xd7, 0x5a, 0x31, 0xa4, 0x46 };
+ PacketInterpreterBase::ptr p (PacketInterpreter<VoidPacket>::create(data));
+
// 1 byte
- BOOST_CHECK_EQUAL((Parse_UIntField<2,7,iterator>(data).value()), 17u);
- BOOST_CHECK_EQUAL((Parse_IntField<2,7,iterator>(data).value()), -15);
- BOOST_CHECK_EQUAL((Parse_UIntField<3,7,iterator>(data).value()), 1u);
- BOOST_CHECK_EQUAL((Parse_IntField<3,7,iterator>(data).value()), 1);
- BOOST_CHECK_EQUAL((Parse_UIntField<0,8,iterator>(data).value()), 99u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<2,7>(p->data().begin(),&p->data()).value()), 17u);
+ BOOST_CHECK_EQUAL((Parse_IntField<2,7>(p->data().begin(),&p->data()).value()), -15);
+ BOOST_CHECK_EQUAL((Parse_UIntField<3,7>(p->data().begin(),&p->data()).value()), 1u);
+ BOOST_CHECK_EQUAL((Parse_IntField<3,7>(p->data().begin(),&p->data()).value()), 1);
+ BOOST_CHECK_EQUAL((Parse_UIntField<0,8>(p->data().begin(),&p->data()).value()), 99u);
// 2 byte
- BOOST_CHECK_EQUAL((Parse_UIntField<5,12,iterator>(data).value()), 61u);
- BOOST_CHECK_EQUAL((Parse_UIntField<0,12,iterator>(data).value()), 1597u);
- BOOST_CHECK_EQUAL((Parse_UIntField<8,13,iterator>(data).value()), 26u);
- BOOST_CHECK_EQUAL((Parse_UIntField<8,16,iterator>(data).value()), 215u);
- BOOST_CHECK_EQUAL((Parse_UIntField<0,16,iterator>(data).value()), 25559u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<5,12>(p->data().begin(),&p->data()).value()), 61u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<0,12>(p->data().begin(),&p->data()).value()), 1597u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<8,13>(p->data().begin(),&p->data()).value()), 26u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<8,16>(p->data().begin(),&p->data()).value()), 215u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<0,16>(p->data().begin(),&p->data()).value()), 25559u);
// 3 byte
- BOOST_CHECK_EQUAL((Parse_UIntField<6,20,iterator>(data).value()), 15733u);
- BOOST_CHECK_EQUAL((Parse_IntField<6,20,iterator>(data).value()), -651);
- BOOST_CHECK_EQUAL((Parse_UIntField<13,22,iterator>(data).value()), 470u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<6,20>(p->data().begin(),&p->data()).value()), 15733u);
+ BOOST_CHECK_EQUAL((Parse_IntField<6,20>(p->data().begin(),&p->data()).value()), -651);
+ BOOST_CHECK_EQUAL((Parse_UIntField<13,22>(p->data().begin(),&p->data()).value()), 470u);
// 4 byte
- BOOST_CHECK_EQUAL((Parse_UIntField<3,28,iterator>(data).value()), 4027811u);
- BOOST_CHECK_EQUAL((Parse_UIntField<13,38,iterator>(data).value()), 30837865u);
- BOOST_CHECK_EQUAL((Parse_UIntField<8,40,iterator>(data).value()), 3613012388u);
- BOOST_CHECK_EQUAL((Parse_IntField<8,40,iterator>(data).value()), -681954908);
+ BOOST_CHECK_EQUAL((Parse_UIntField<3,28>(p->data().begin(),&p->data()).value()), 4027811u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<13,38>(p->data().begin(),&p->data()).value()), 30837865u);
+ BOOST_CHECK_EQUAL((Parse_UIntField<8,40>(p->data().begin(),&p->data()).value()), 3613012388u);
+ BOOST_CHECK_EQUAL((Parse_IntField<8,40>(p->data().begin(),&p->data()).value()), -681954908);
// 5 byte
- BOOST_CHECK_EQUAL((Parse_UIntField<3,34,iterator>(data).value()), 257779910u);
- BOOST_CHECK_EQUAL((Parse_IntField<13,41,iterator>(data).value()), -21732536);
+ BOOST_CHECK_EQUAL((Parse_UIntField<3,34>(p->data().begin(),&p->data()).value()), 257779910u);
+ BOOST_CHECK_EQUAL((Parse_IntField<13,41>(p->data().begin(),&p->data()).value()), -21732536);
// single bit
- BOOST_CHECK_EQUAL((Parse_Flag<32,iterator>(data).value()), true);
- BOOST_CHECK_EQUAL((Parse_Flag<12,iterator>(data).value()), false);
+ BOOST_CHECK_EQUAL((Parse_Flag<32>(p->data().begin(),&p->data()).value()), true);
+ BOOST_CHECK_EQUAL((Parse_Flag<12>(p->data().begin(),&p->data()).value()), false);
}
BOOST_AUTO_UNIT_TEST(parseInt_assign)
{
- unsigned char data[] = { 0x00, 0x00, 0x00, 0x00, 0x00 };
- typedef unsigned char * iterator;
-
- Parse_Int8<iterator>(data).value(0x2f);
- BOOST_CHECK_EQUAL( data[0], 0x2f );
-
- Parse_Int16<iterator>(data).value(0xa341);
- BOOST_CHECK_EQUAL( data[0], 0xa3 );
- BOOST_CHECK_EQUAL( data[1], 0x41 );
-
- Parse_Int24<iterator>(data).value(0x234567);
- BOOST_CHECK_EQUAL( data[0], 0x23 );
- BOOST_CHECK_EQUAL( data[1], 0x45 );
- BOOST_CHECK_EQUAL( data[2], 0x67 );
-
- Parse_Int32<iterator>(data).value(0xfedcba98);
- BOOST_CHECK_EQUAL( data[0], 0xfe );
- BOOST_CHECK_EQUAL( data[1], 0xdc );
- BOOST_CHECK_EQUAL( data[2], 0xba );
- BOOST_CHECK_EQUAL( data[3], 0x98 );
-
- Parse_IntField<2,6,iterator>(data).value(0x3);
- BOOST_CHECK_EQUAL( data[0], 0xce );
- BOOST_CHECK_EQUAL( data[1], 0xdc );
-
- Parse_IntField<6,9,iterator>(data).value(0x2);
- BOOST_CHECK_EQUAL( data[0], 0xcd );
- BOOST_CHECK_EQUAL( data[1], 0x5c );
- BOOST_CHECK_EQUAL( data[2], 0xba );
-
- Parse_IntField<2,21,iterator>(data).value(0x13d75);
- BOOST_CHECK_EQUAL( data[0], 0xc9 );
- BOOST_CHECK_EQUAL( data[1], 0xeb );
- BOOST_CHECK_EQUAL( data[2], 0xaa );
- BOOST_CHECK_EQUAL( data[3], 0x98 );
-
- Parse_UIntField<4,34,iterator>(data).value(0x268ad497u);
- BOOST_CHECK_EQUAL( (Parse_UIntField<4,34,iterator>(data).value()), 0x268ad497u );
+ PacketInterpreterBase::byte data[] = { 0x00, 0x00, 0x00, 0x00, 0x00 };
+ PacketInterpreterBase::ptr p (PacketInterpreter<VoidPacket>::create(data));
+
+ Parse_Int8(p->data().begin(),&p->data()).value(0x2f);
+ BOOST_CHECK_EQUAL( p->data()[0], 0x2f );
+
+ Parse_Int16(p->data().begin(),&p->data()).value(0xa341);
+ BOOST_CHECK_EQUAL( p->data()[0], 0xa3 );
+ BOOST_CHECK_EQUAL( p->data()[1], 0x41 );
+
+ Parse_Int24(p->data().begin(),&p->data()).value(0x234567);
+ BOOST_CHECK_EQUAL( p->data()[0], 0x23 );
+ BOOST_CHECK_EQUAL( p->data()[1], 0x45 );
+ BOOST_CHECK_EQUAL( p->data()[2], 0x67 );
+
+ Parse_Int32(p->data().begin(),&p->data()).value(0xfedcba98);
+ BOOST_CHECK_EQUAL( p->data()[0], 0xfe );
+ BOOST_CHECK_EQUAL( p->data()[1], 0xdc );
+ BOOST_CHECK_EQUAL( p->data()[2], 0xba );
+ BOOST_CHECK_EQUAL( p->data()[3], 0x98 );
+
+ Parse_IntField<2,6>(p->data().begin(),&p->data()).value(0x3);
+ BOOST_CHECK_EQUAL( p->data()[0], 0xce );
+ BOOST_CHECK_EQUAL( p->data()[1], 0xdc );
+
+ Parse_IntField<6,9>(p->data().begin(),&p->data()).value(0x2);
+ BOOST_CHECK_EQUAL( p->data()[0], 0xcd );
+ BOOST_CHECK_EQUAL( p->data()[1], 0x5c );
+ BOOST_CHECK_EQUAL( p->data()[2], 0xba );
+
+ Parse_IntField<2,21>(p->data().begin(),&p->data()).value(0x13d75);
+ BOOST_CHECK_EQUAL( p->data()[0], 0xc9 );
+ BOOST_CHECK_EQUAL( p->data()[1], 0xeb );
+ BOOST_CHECK_EQUAL( p->data()[2], 0xaa );
+ BOOST_CHECK_EQUAL( p->data()[3], 0x98 );
+
+ Parse_UIntField<4,34>(p->data().begin(),&p->data()).value(0x268ad497u);
+ BOOST_CHECK_EQUAL( (Parse_UIntField<4,34>(p->data().begin(),&p->data()).value()), 0x268ad497u );
}
-BOOST_AUTO_UNIT_TEST(parseInt_operators)
+BOOST_AUTO_UNIT_TEST(parseInt_operators)
{
- unsigned char data[] = { 0x63, 0xd7, 0x5a, 0x31, 0xa4, 0x46 };
+ PacketInterpreterBase::byte data[] = { 0x63, 0xd7, 0x5a, 0x31, 0xa4, 0x46 };
+ PacketInterpreterBase::ptr p (PacketInterpreter<VoidPacket>::create(data));
- Parse_UInt24<unsigned char *> p1(data);
- Parse_UInt16<unsigned char *> p2(data+3);
+ Parse_UInt24 p1(p->data().begin(),&p->data());
+ Parse_UInt16 p2(p->data().begin()+3,&p->data());
BOOST_CHECK_EQUAL( ~p1, 4288424101u );
BOOST_CHECK ( !!p1 );
BOOST_CHECK_EQUAL( p1, 6555902u );
p2 += p1;
// Here some idiotic automatic promotion from unsigned short ->
- // int happens in the second macro parameter ... hrmpf ...
+ // int happens in the first macro parameter ... hrmpf ...
BOOST_CHECK_EQUAL( p2, 15010 );
+ BOOST_CHECK_EQUAL( ++p1, 6555903u );
+ BOOST_CHECK_EQUAL( p1++, 6555903u );
+ BOOST_CHECK_EQUAL( p1, 6555904u );
+ BOOST_CHECK_EQUAL( --p1, 6555903u );
+ BOOST_CHECK_EQUAL( p1--, 6555903u );
+ BOOST_CHECK_EQUAL( p1, 6555902u );
+
p1 = 0x123456u;
- BOOST_CHECK_EQUAL( data[0], 0x12 );
- BOOST_CHECK_EQUAL( data[1], 0x34 );
- BOOST_CHECK_EQUAL( data[2], 0x56 );
- BOOST_CHECK_EQUAL( data[3], 0x3a );
+ BOOST_CHECK_EQUAL( p->data()[0], 0x12 );
+ BOOST_CHECK_EQUAL( p->data()[1], 0x34 );
+ BOOST_CHECK_EQUAL( p->data()[2], 0x56 );
+ BOOST_CHECK_EQUAL( p->data()[3], 0x3a );
// I stop here ... this is absolutely identical for all other
// operators and all other integer types. If really some error pops
// up, I'll add a check here ...
}
-namespace {
-
- template < class P >
- class TestPacket
- : public Packet, public P::template rebind< Packet::iterator,TestPacket<P> >::parser
- {
- public:
- typedef typename P::template rebind<Packet::iterator,TestPacket>::parser parser;
- typedef typename ptr_t<TestPacket>::ptr ptr;
-
- static bool check(iterator b, iterator e) { return true; }
-
- private:
- template <class Arg>
- TestPacket(Arg const & arg)
- : Packet(arg) {}
-
- virtual void v_nextInterpreter() const {}
- virtual void v_finalize() {}
- virtual void v_dump(std::ostream &) const {}
-
- friend class Packet;
- };
-
- template < class P >
- typename P::value_type packetCheck()
- {
- unsigned char data[] = { 0x8e, 0x2f, 0x57, 0x12, 0xd1 };
- typename TestPacket<P>::ptr p (Packet::create< TestPacket<P> >(data, data+sizeof(data)));
- return p->value();
- }
-
-}
-
-BOOST_AUTO_UNIT_TEST(parseInt_inherited)
-{
- BOOST_CHECK_EQUAL(packetCheck< Parse_Int8<> >(), -114);
- BOOST_CHECK_EQUAL(packetCheck< Parse_UInt8<> >(), 142u);
-
- BOOST_CHECK_EQUAL(packetCheck< Parse_Int16<> >(), -29137);
- BOOST_CHECK_EQUAL(packetCheck< Parse_UInt16<> >(), 36399u);
-
- BOOST_CHECK_EQUAL(packetCheck< Parse_Int24<> >(), -7458985);
- BOOST_CHECK_EQUAL(packetCheck< Parse_UInt24<> >(), 9318231u);
-
- BOOST_CHECK_EQUAL(packetCheck< Parse_Int32<> >(), -1909500142);
- BOOST_CHECK_EQUAL(packetCheck< Parse_UInt32<> >(), 2385467154u);
-
- BOOST_CHECK_EQUAL((packetCheck< Parse_IntField<3,28> >()), 14873969);
- BOOST_CHECK_EQUAL((packetCheck< Parse_UIntField<3,28> >()), 14873969u);
- BOOST_CHECK_EQUAL((packetCheck< Parse_Flag<11> >()), false);
-}
-
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
\f
// Local Variables:
// mode: c++
-// c-file-style: "satcom"
+// fill-column: 100
+// c-file-style: "senf"
+// indent-tabs-mode: nil
+// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// comment-column: 40
// End: