Two extra array tests

This commit is contained in:
Pavel Kirienko
2014-02-25 16:26:15 +04:00
parent e4530daa2d
commit 366c5f5460
+79 -40
View File
@@ -5,6 +5,15 @@
#include <gtest/gtest.h>
#include <uavcan/internal/marshalling/types.hpp>
using uavcan::Array;
using uavcan::ArrayModeDynamic;
using uavcan::ArrayModeStatic;
using uavcan::IntegerSpec;
using uavcan::FloatSpec;
using uavcan::SignednessSigned;
using uavcan::SignednessUnsigned;
using uavcan::CastModeSaturate;
using uavcan::CastModeTruncate;
struct CustomType
{
@@ -81,16 +90,6 @@ TEST(Array, IntegerBitLen)
TEST(Array, Basic)
{
using uavcan::Array;
using uavcan::ArrayModeDynamic;
using uavcan::ArrayModeStatic;
using uavcan::IntegerSpec;
using uavcan::FloatSpec;
using uavcan::SignednessSigned;
using uavcan::SignednessUnsigned;
using uavcan::CastModeSaturate;
using uavcan::CastModeTruncate;
typedef Array<IntegerSpec<8, SignednessSigned, CastModeTruncate>, ArrayModeStatic, 4> A1;
typedef Array<FloatSpec<16, CastModeSaturate>, ArrayModeStatic, 2> A2;
typedef Array<CustomType, ArrayModeStatic, 2> A3;
@@ -240,16 +239,6 @@ TEST(Array, Basic)
TEST(Array, Dynamic)
{
using uavcan::Array;
using uavcan::ArrayModeDynamic;
using uavcan::ArrayModeStatic;
using uavcan::IntegerSpec;
using uavcan::FloatSpec;
using uavcan::SignednessSigned;
using uavcan::SignednessUnsigned;
using uavcan::CastModeSaturate;
using uavcan::CastModeTruncate;
typedef Array<IntegerSpec<1, SignednessUnsigned, CastModeSaturate>, ArrayModeDynamic, 5> A;
typedef Array<IntegerSpec<8, SignednessSigned, CastModeSaturate>, ArrayModeDynamic, 255> B;
@@ -432,16 +421,6 @@ static std::string runEncodeDecode(const typename uavcan::StorageType<T>::Type&
TEST(Array, TailArrayOptimization)
{
using uavcan::Array;
using uavcan::ArrayModeDynamic;
using uavcan::ArrayModeStatic;
using uavcan::IntegerSpec;
using uavcan::FloatSpec;
using uavcan::SignednessSigned;
using uavcan::SignednessUnsigned;
using uavcan::CastModeSaturate;
using uavcan::CastModeTruncate;
typedef Array<IntegerSpec<1, SignednessUnsigned, CastModeSaturate>, ArrayModeDynamic, 5> OneBitArray;
typedef Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>, ArrayModeDynamic, 255> EightBitArray;
typedef CustomType2<Array<OneBitArray, ArrayModeDynamic, 255> > A;
@@ -512,16 +491,6 @@ TEST(Array, TailArrayOptimization)
TEST(Array, TailArrayOptimizationErrors)
{
using uavcan::Array;
using uavcan::ArrayModeDynamic;
using uavcan::ArrayModeStatic;
using uavcan::IntegerSpec;
using uavcan::FloatSpec;
using uavcan::SignednessSigned;
using uavcan::SignednessUnsigned;
using uavcan::CastModeSaturate;
using uavcan::CastModeTruncate;
typedef Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>, ArrayModeDynamic, 5> A;
A a;
@@ -582,3 +551,73 @@ TEST(Array, TailArrayOptimizationErrors)
ASSERT_EQ(32, a2[4]);
}
}
TEST(Array, DynamicEncodeDecodeErrors)
{
typedef CustomType2<Array<Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>,
ArrayModeDynamic, 255>,
ArrayModeDynamic, 255> > A;
A a;
a.b.resize(2);
a.b[0].push_back(55);
a.b[0].push_back(66);
{
uavcan::StaticTransferBuffer<4> buf;
uavcan::BitStream bs_wr(buf);
uavcan::ScalarCodec sc_wr(bs_wr);
ASSERT_EQ(0, A::encode(a, sc_wr, uavcan::TailArrayOptEnabled)); // Not enough buffer space
uavcan::BitStream bs_rd(buf);
uavcan::ScalarCodec sc_rd(bs_rd);
ASSERT_EQ(0, A::decode(a, sc_rd, uavcan::TailArrayOptEnabled));
}
{
uavcan::StaticTransferBuffer<4> buf;
uavcan::BitStream bs_wr(buf);
uavcan::ScalarCodec sc_wr(bs_wr);
ASSERT_EQ(0, A::encode(a, sc_wr, uavcan::TailArrayOptDisabled)); // Not enough buffer space
uavcan::BitStream bs_rd(buf);
uavcan::ScalarCodec sc_rd(bs_rd);
ASSERT_EQ(0, A::decode(a, sc_rd, uavcan::TailArrayOptDisabled));
}
}
TEST(Array, StaticEncodeDecodeErrors)
{
typedef CustomType2<Array<Array<IntegerSpec<8, SignednessUnsigned, CastModeSaturate>,
ArrayModeStatic, 2>,
ArrayModeStatic, 2> > A;
A a;
a.a = 1.0;
a.b[0][0] = 0x11;
a.b[0][1] = 0x22;
a.b[1][0] = 0x33;
a.b[1][1] = 0x44;
{ // Just enough buffer space - 6 bytes
uavcan::StaticTransferBuffer<6> buf;
uavcan::BitStream bs_wr(buf);
uavcan::ScalarCodec sc_wr(bs_wr);
ASSERT_EQ(1, A::encode(a, sc_wr, uavcan::TailArrayOptDisabled));
ASSERT_EQ("00000000 00111100 00010001 00100010 00110011 01000100", bs_wr.toString());
uavcan::BitStream bs_rd(buf);
uavcan::ScalarCodec sc_rd(bs_rd);
ASSERT_EQ(1, A::decode(a, sc_rd, uavcan::TailArrayOptEnabled));
}
{ // Not enough space
uavcan::StaticTransferBuffer<5> buf;
uavcan::BitStream bs_wr(buf);
uavcan::ScalarCodec sc_wr(bs_wr);
ASSERT_EQ(0, A::encode(a, sc_wr, uavcan::TailArrayOptDisabled));
ASSERT_EQ("00000000 00111100 00010001 00100010 00110011", bs_wr.toString());
uavcan::BitStream bs_rd(buf);
uavcan::ScalarCodec sc_rd(bs_rd);
ASSERT_EQ(0, A::decode(a, sc_rd, uavcan::TailArrayOptEnabled));
}
}