libuav original
Dependents: UAVCAN UAVCAN_Subscriber
data_type.cpp
00001 /* 00002 * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com> 00003 */ 00004 00005 #include <gtest/gtest.h> 00006 #include <uavcan/data_type.hpp> 00007 00008 00009 TEST(DataTypeSignatureCRC, Correctness) 00010 { 00011 uavcan::DataTypeSignatureCRC crc; 00012 00013 ASSERT_EQ(0xFFFFFFFFFFFFFFFF ^ 0xFFFFFFFFFFFFFFFF, crc.get()); 00014 00015 crc.add('1'); 00016 crc.add('2'); 00017 crc.add('3'); 00018 crc.add(reinterpret_cast<const uint8_t*>("456789"), 6); 00019 00020 ASSERT_EQ(0x62EC59E3F1A4F00A, crc.get()); 00021 } 00022 00023 00024 TEST(DataTypeSignatureCRC, Extension) 00025 { 00026 uavcan::DataTypeSignatureCRC crc1; 00027 00028 crc1.add('1'); 00029 crc1.add('2'); 00030 crc1.add('3'); 00031 00032 uavcan::DataTypeSignatureCRC crc2 = uavcan::DataTypeSignatureCRC::extend(crc1.get()); 00033 00034 crc2.add(reinterpret_cast<const uint8_t*>("456789"), 6); 00035 00036 ASSERT_EQ(0x62EC59E3F1A4F00A, crc2.get()); 00037 } 00038 00039 00040 TEST(DataTypeSignature, Correctness) 00041 { 00042 using uavcan::DataTypeSignature; 00043 using uavcan::DataTypeSignatureCRC; 00044 00045 DataTypeSignature signature; 00046 ASSERT_EQ(0, signature.get()); 00047 00048 /* 00049 * First extension 00050 */ 00051 signature.extend(DataTypeSignature(0x123456789abcdef0)); 00052 00053 DataTypeSignatureCRC crc; 00054 crc.add(0xF0); 00055 crc.add(0xDE); 00056 crc.add(0xBC); 00057 crc.add(0x9A); 00058 crc.add(0x78); 00059 crc.add(0x56); 00060 crc.add(0x34); 00061 crc.add(0x12); 00062 for (int i = 0; i < 8; i++) 00063 { 00064 crc.add(0); 00065 } 00066 00067 ASSERT_EQ(crc.get(), signature.get()); 00068 00069 const uint64_t old_signature = signature.get(); 00070 00071 /* 00072 * Second extension 00073 */ 00074 signature.extend(DataTypeSignature(0xfedcba9876543210)); 00075 crc.add(0x10); 00076 crc.add(0x32); 00077 crc.add(0x54); 00078 crc.add(0x76); 00079 crc.add(0x98); 00080 crc.add(0xba); 00081 crc.add(0xdc); 00082 crc.add(0xfe); 00083 for (int i = 0; i < 64; i += 8) 00084 { 00085 crc.add((old_signature >> i) & 0xFF); 00086 } 00087 00088 ASSERT_EQ(crc.get(), signature.get()); 00089 00090 /* 00091 * Comparison 00092 */ 00093 ASSERT_TRUE(signature == DataTypeSignature(signature.get())); 00094 ASSERT_FALSE(signature == DataTypeSignature()); 00095 ASSERT_FALSE(signature != DataTypeSignature(signature.get())); 00096 ASSERT_TRUE(signature != DataTypeSignature()); 00097 } 00098 00099 00100 TEST(DataTypeDescriptor, ToString) 00101 { 00102 uavcan::DataTypeDescriptor desc; 00103 ASSERT_EQ(":65535s:0000000000000000", desc.toString()); 00104 00105 desc = uavcan::DataTypeDescriptor(uavcan::DataTypeKindMessage, 123, 00106 uavcan::DataTypeSignature(0xdeadbeef1234), "Bar"); 00107 ASSERT_EQ("Bar:123m:0000deadbeef1234", desc.toString()); 00108 00109 // Max length - 80 chars 00110 desc = uavcan::DataTypeDescriptor(uavcan::DataTypeKindMessage, 1023, uavcan::DataTypeSignature(0xdeadbeef12345678), 00111 "sirius_cybernetics_corporation.marvin.model_a.LongDataTypeName123456789abcdefghi"); 00112 ASSERT_EQ("sirius_cybernetics_corporation.marvin.model_a.LongDataTypeName123456789abcdefghi:1023m:deadbeef12345678", 00113 desc.toString()); 00114 } 00115 00116 00117 TEST(DataTypeDescriptor, Match) 00118 { 00119 uavcan::DataTypeDescriptor desc(uavcan::DataTypeKindMessage, 123, 00120 uavcan::DataTypeSignature(0xdeadbeef1234), "namespace.TypeName"); 00121 ASSERT_TRUE(desc.match(uavcan::DataTypeKindMessage, "namespace.TypeName")); 00122 ASSERT_FALSE(desc.match(uavcan::DataTypeKindMessage, "boo")); 00123 ASSERT_FALSE(desc.match(uavcan::DataTypeKindService, "namespace.TypeName")); 00124 } 00125 00126 00127 TEST(DataTypeID, Basic) 00128 { 00129 uavcan::DataTypeID id; 00130 00131 ASSERT_EQ(0xFFFF, id.get()); 00132 ASSERT_FALSE(id.isValidForDataTypeKind(uavcan::DataTypeKindMessage)); 00133 ASSERT_FALSE(id.isValidForDataTypeKind(uavcan::DataTypeKindService)); 00134 00135 id = 123; 00136 uavcan::DataTypeID id2 = 255; 00137 00138 ASSERT_EQ(123, id.get()); 00139 ASSERT_EQ(255, id2.get()); 00140 00141 ASSERT_TRUE(id.isValidForDataTypeKind(uavcan::DataTypeKindMessage)); 00142 ASSERT_TRUE(id.isValidForDataTypeKind(uavcan::DataTypeKindService)); 00143 ASSERT_TRUE(id2.isValidForDataTypeKind(uavcan::DataTypeKindMessage)); 00144 ASSERT_TRUE(id2.isValidForDataTypeKind(uavcan::DataTypeKindService)); 00145 00146 ASSERT_TRUE(id < id2); 00147 ASSERT_TRUE(id <= id2); 00148 ASSERT_TRUE(id2 > id); 00149 ASSERT_TRUE(id2 >= id); 00150 ASSERT_TRUE(id != id2); 00151 00152 id = id2; 00153 ASSERT_FALSE(id < id2); 00154 ASSERT_TRUE(id <= id2); 00155 ASSERT_FALSE(id2 > id); 00156 ASSERT_TRUE(id2 >= id); 00157 ASSERT_TRUE(id == id2); 00158 00159 id = 1024; 00160 ASSERT_TRUE(id.isValidForDataTypeKind(uavcan::DataTypeKindMessage)); 00161 ASSERT_FALSE(id.isValidForDataTypeKind(uavcan::DataTypeKindService)); 00162 }
Generated on Tue Jul 12 2022 17:17:30 by
1.7.2