00001 #include <iostream>
00002 #include <gtest/gtest.h>
00003 #include <boost/shared_ptr.hpp>
00004 #include "robot_instance/RobonetDataElement.h"
00005 #include "shared_memory_transport/smtclient.hpp"
00006 #include "shared_memory_transport/smtcore_daemon.hpp"
00007
00008 using namespace std;
00009 using namespace boost;
00010
00014 class RobonetDataElementSMTTest : public ::testing::Test
00015 {
00016 protected:
00017 static void SetUpTestCase() {
00018
00019 smtcore.startSmtCore(true);
00020 }
00021 static void TearDownTestCase() {
00022
00023 smtcore.shutdownSmtCore();
00024 }
00025
00026 virtual void SetUp(){
00027
00028 const ::testing::TestInfo* const test_info = ::testing::UnitTest::GetInstance()->current_test_info();
00029 test_name = std::string(test_info->name());
00030
00031 smtclient = new SMT::SMTClient("http://localhost:" + std::to_string(smtcore.getPort()) + "/");
00032
00033
00034 uint8Resource = std::make_shared<SMT::Resource>( smtclient->createResource(test_name + "/uint8", "uint8", 0, 0, "big", "") );
00035 int8Resource = std::make_shared<SMT::Resource>( smtclient->createResource(test_name + "/int8", "int8", 0, 0, "big", "") );
00036 uint16Resource = std::make_shared<SMT::Resource>( smtclient->createResource(test_name + "/uint16", "uint16", 0, 0, "big", "") );
00037 int16Resource = std::make_shared<SMT::Resource>( smtclient->createResource(test_name + "/int16", "int16", 0, 0, "big", "") );
00038 uint32Resource = std::make_shared<SMT::Resource>( smtclient->createResource(test_name + "/uint32", "uint32", 0, 0, "big", "") );
00039 int32Resource = std::make_shared<SMT::Resource>( smtclient->createResource(test_name + "/int32", "int32", 0, 0, "big", "") );
00040 floatResource = std::make_shared<SMT::Resource>( smtclient->createResource(test_name + "/float", "float32", 0, 0, "big", "") );
00041 }
00042
00043 virtual void TearDown(){
00044
00045 smtclient->destroyResource(test_name + "/uint8");
00046 smtclient->destroyResource(test_name + "/int8");
00047 smtclient->destroyResource(test_name + "/uint16");
00048 smtclient->destroyResource(test_name + "/int16");
00049 smtclient->destroyResource(test_name + "/uint32");
00050 smtclient->destroyResource(test_name + "/int32");
00051 smtclient->destroyResource(test_name + "/float");
00052
00053
00054 delete smtclient;
00055 smtclient = nullptr;
00056 }
00057
00058 SMT::SMTClient* smtclient;
00059
00060 std::string test_name;
00061
00062 std::shared_ptr<SMT::Resource> uint8Resource;
00063 std::shared_ptr<SMT::Resource> int8Resource;
00064 std::shared_ptr<SMT::Resource> uint16Resource;
00065 std::shared_ptr<SMT::Resource> int16Resource;
00066 std::shared_ptr<SMT::Resource> uint32Resource;
00067 std::shared_ptr<SMT::Resource> int32Resource;
00068 std::shared_ptr<SMT::Resource> floatResource;
00069
00070 static SMTCoreDaemon smtcore;
00071 };
00072
00073 SMTCoreDaemon RobonetDataElementSMTTest::smtcore;
00074
00075 TEST_F(RobonetDataElementSMTTest, Constructors)
00076 {
00077 RobonetDataElement robonetDataElement1("bool", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::Normal, uint8Resource);
00078 ASSERT_FALSE(robonetDataElement1.getValue<bool>());
00079 ASSERT_EQ(DataElement::Read, robonetDataElement1.getReadWrite());
00080 ASSERT_EQ("RightArm", robonetDataElement1.getChannel());
00081 ASSERT_EQ("J1", robonetDataElement1.getNode());
00082 ASSERT_EQ("OnOff", robonetDataElement1.getOffsetPair().first);
00083 ASSERT_EQ("", robonetDataElement1.getOffsetPair().second);
00084 ASSERT_EQ("Monitor", robonetDataElement1.getGroup());
00085 ASSERT_EQ(DataElement::EightBit, robonetDataElement1.getSize());
00086 ASSERT_EQ(0, robonetDataElement1.getRawPair().first);
00087 ASSERT_EQ(0, robonetDataElement1.getRawPair().second);
00088
00089 RobonetDataElement robonetDataElement2("float", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", "APS1H"), "Command", RobonetDataElement::Normal, floatResource);
00090 ASSERT_FLOAT_EQ(0, robonetDataElement2.getValue<float>());
00091 ASSERT_EQ(DataElement::Write, robonetDataElement2.getReadWrite());
00092 ASSERT_EQ("LeftLeg", robonetDataElement2.getChannel());
00093 ASSERT_EQ("J3", robonetDataElement2.getNode());
00094 ASSERT_EQ("APS1L", robonetDataElement2.getOffsetPair().first);
00095 ASSERT_EQ("APS1H", robonetDataElement2.getOffsetPair().second);
00096 ASSERT_EQ("Command", robonetDataElement2.getGroup());
00097 ASSERT_EQ(DataElement::ThirtyTwoBit, robonetDataElement2.getSize());
00098 ASSERT_EQ(0, robonetDataElement2.getRawPair().first);
00099 ASSERT_EQ(0, robonetDataElement2.getRawPair().second);
00100
00101 RobonetDataElement robonetDataElement3("int16_t", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", ""), "Command", RobonetDataElement::MotCom, int16Resource);
00102 ASSERT_FLOAT_EQ(0, robonetDataElement3.getValue<int16_t>());
00103 ASSERT_EQ(DataElement::Write, robonetDataElement3.getReadWrite());
00104 ASSERT_EQ("LeftLeg", robonetDataElement3.getChannel());
00105 ASSERT_EQ("J3", robonetDataElement3.getNode());
00106 ASSERT_EQ("APS1L", robonetDataElement3.getOffsetPair().first);
00107 ASSERT_EQ("", robonetDataElement3.getOffsetPair().second);
00108 ASSERT_EQ("Command", robonetDataElement3.getGroup());
00109 ASSERT_EQ(DataElement::SixteenBit, robonetDataElement3.getSize());
00110 ASSERT_EQ(0, robonetDataElement3.getRawPair().first);
00111 ASSERT_EQ(0, robonetDataElement3.getRawPair().second);
00112
00113 RobonetDataElement robonetDataElement4("float", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", ""), "Command", RobonetDataElement::Temperature, floatResource);
00114 ASSERT_FLOAT_EQ(0, robonetDataElement4.getValue<float>());
00115 ASSERT_EQ(DataElement::Write, robonetDataElement4.getReadWrite());
00116 ASSERT_EQ("LeftLeg", robonetDataElement4.getChannel());
00117 ASSERT_EQ("J3", robonetDataElement4.getNode());
00118 ASSERT_EQ("APS1L", robonetDataElement4.getOffsetPair().first);
00119 ASSERT_EQ("", robonetDataElement4.getOffsetPair().second);
00120 ASSERT_EQ("Command", robonetDataElement4.getGroup());
00121 ASSERT_EQ(DataElement::ThirtyTwoBit, robonetDataElement4.getSize());
00122 ASSERT_EQ(0, robonetDataElement4.getRawPair().first);
00123 ASSERT_EQ(0, robonetDataElement4.getRawPair().second);
00124
00125 RobonetDataElement robonetDataElement5("uint16_t", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", "APS1H"), "Command", RobonetDataElement::BrakePwm, uint16Resource);
00126 ASSERT_FLOAT_EQ(0, robonetDataElement5.getValue<uint16_t>());
00127 ASSERT_EQ(DataElement::Write, robonetDataElement5.getReadWrite());
00128 ASSERT_EQ("LeftLeg", robonetDataElement5.getChannel());
00129 ASSERT_EQ("J3", robonetDataElement5.getNode());
00130 ASSERT_EQ("APS1L", robonetDataElement5.getOffsetPair().first);
00131 ASSERT_EQ("APS1H", robonetDataElement5.getOffsetPair().second);
00132 ASSERT_EQ("Command", robonetDataElement5.getGroup());
00133 ASSERT_EQ(DataElement::SixteenBit, robonetDataElement5.getSize());
00134 ASSERT_EQ(0, robonetDataElement5.getRawPair().first);
00135 ASSERT_EQ(0, robonetDataElement5.getRawPair().second);
00136
00137 RobonetDataElement robonetDataElement6("float", DataElement::Read, "Power", "BMS", RobonetDataElement::OffsetPair("Temperature1", ""), "Command", RobonetDataElement::FixedPointMilli, floatResource);
00138 ASSERT_FLOAT_EQ(0, robonetDataElement6.getValue<float>());
00139 ASSERT_EQ(DataElement::Read, robonetDataElement6.getReadWrite());
00140 ASSERT_EQ("Power", robonetDataElement6.getChannel());
00141 ASSERT_EQ("BMS", robonetDataElement6.getNode());
00142 ASSERT_EQ("Temperature1", robonetDataElement6.getOffsetPair().first);
00143 ASSERT_EQ("", robonetDataElement6.getOffsetPair().second);
00144 ASSERT_EQ("Command", robonetDataElement6.getGroup());
00145 ASSERT_EQ(DataElement::ThirtyTwoBit, robonetDataElement6.getSize());
00146 ASSERT_EQ(0, robonetDataElement6.getRawPair().first);
00147 ASSERT_EQ(0, robonetDataElement6.getRawPair().second);
00148
00149 RobonetDataElement robonetDataElement7("float", DataElement::Write, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Command", RobonetDataElement::UnsignedFixedPointMilli, floatResource);
00150 ASSERT_FLOAT_EQ(0, robonetDataElement7.getValue<float>());
00151 ASSERT_EQ(DataElement::Write, robonetDataElement7.getReadWrite());
00152 ASSERT_EQ("Power", robonetDataElement7.getChannel());
00153 ASSERT_EQ("BMS", robonetDataElement7.getNode());
00154 ASSERT_EQ("Current24VUpperLimit", robonetDataElement7.getOffsetPair().first);
00155 ASSERT_EQ("", robonetDataElement7.getOffsetPair().second);
00156 ASSERT_EQ("Command", robonetDataElement7.getGroup());
00157 ASSERT_EQ(DataElement::ThirtyTwoBit, robonetDataElement7.getSize());
00158 ASSERT_EQ(0, robonetDataElement7.getRawPair().first);
00159 ASSERT_EQ(0, robonetDataElement7.getRawPair().second);
00160
00161 RobonetDataElement robonetDataElement8("float", DataElement::Read, "Power", "PowCon", RobonetDataElement::OffsetPair("PC_24V_TEMP_1", ""), "Command", RobonetDataElement::PowConTemperature, floatResource);
00162 ASSERT_FLOAT_EQ(0, robonetDataElement8.getValue<float>());
00163 ASSERT_EQ(DataElement::Read, robonetDataElement8.getReadWrite());
00164 ASSERT_EQ("Power", robonetDataElement8.getChannel());
00165 ASSERT_EQ("PowCon", robonetDataElement8.getNode());
00166 ASSERT_EQ("PC_24V_TEMP_1", robonetDataElement8.getOffsetPair().first);
00167 ASSERT_EQ("", robonetDataElement8.getOffsetPair().second);
00168 ASSERT_EQ("Command", robonetDataElement8.getGroup());
00169 ASSERT_EQ(DataElement::ThirtyTwoBit, robonetDataElement8.getSize());
00170 ASSERT_EQ(0, robonetDataElement8.getRawPair().first);
00171 ASSERT_EQ(0, robonetDataElement8.getRawPair().second);
00172
00173 RobonetDataElement robonetDataElement9("float", DataElement::Read, "Power", "PowCon", RobonetDataElement::OffsetPair("PC_24V_CSENSE_1", ""), "Command", RobonetDataElement::PowConCurrentMany, floatResource);
00174 ASSERT_FLOAT_EQ(0, robonetDataElement9.getValue<float>());
00175 ASSERT_EQ(DataElement::Read, robonetDataElement9.getReadWrite());
00176 ASSERT_EQ("Power", robonetDataElement9.getChannel());
00177 ASSERT_EQ("PowCon", robonetDataElement9.getNode());
00178 ASSERT_EQ("PC_24V_CSENSE_1", robonetDataElement9.getOffsetPair().first);
00179 ASSERT_EQ("", robonetDataElement9.getOffsetPair().second);
00180 ASSERT_EQ("Command", robonetDataElement9.getGroup());
00181 ASSERT_EQ(DataElement::ThirtyTwoBit, robonetDataElement9.getSize());
00182 ASSERT_EQ(0, robonetDataElement9.getRawPair().first);
00183 ASSERT_EQ(0, robonetDataElement9.getRawPair().second);
00184
00185 RobonetDataElement robonetDataElement10("float", DataElement::Write, "Power", "PowCon", RobonetDataElement::OffsetPair("PC_5V_UL", ""), "Command", RobonetDataElement::PowConTemperature, floatResource);
00186 ASSERT_FLOAT_EQ(0, robonetDataElement10.getValue<float>());
00187 ASSERT_EQ(DataElement::Write, robonetDataElement10.getReadWrite());
00188 ASSERT_EQ("Power", robonetDataElement10.getChannel());
00189 ASSERT_EQ("PowCon", robonetDataElement10.getNode());
00190 ASSERT_EQ("PC_5V_UL", robonetDataElement10.getOffsetPair().first);
00191 ASSERT_EQ("", robonetDataElement10.getOffsetPair().second);
00192 ASSERT_EQ("Command", robonetDataElement10.getGroup());
00193 ASSERT_EQ(DataElement::ThirtyTwoBit, robonetDataElement10.getSize());
00194 ASSERT_EQ(0, robonetDataElement10.getRawPair().first);
00195 ASSERT_EQ(0, robonetDataElement10.getRawPair().second);
00196 }
00197
00198 TEST_F(RobonetDataElementSMTTest, InvalidArgumentInConstructor)
00199 {
00200 ASSERT_NO_THROW(RobonetDataElement("bool", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor"));
00201 ASSERT_THROW(RobonetDataElement("bool", DataElement::Read, "", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor"), invalid_argument);
00202 ASSERT_THROW(RobonetDataElement("bool", DataElement::Read, "RightArm", "", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor"), invalid_argument);
00203 ASSERT_THROW(RobonetDataElement("bool", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("", ""), "Monitor"), invalid_argument);
00204 ASSERT_THROW(RobonetDataElement("bool", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), ""), invalid_argument);
00205 ASSERT_THROW(RobonetDataElement("float", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor"), invalid_argument);
00206 ASSERT_NO_THROW(RobonetDataElement("float", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::Temperature));
00207 ASSERT_THROW(RobonetDataElement("float", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", "APS1H"), "Command", RobonetDataElement::MotCom), invalid_argument);
00208 ASSERT_THROW(RobonetDataElement("uint32_t", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", "APS1H"), "Command", RobonetDataElement::Temperature), invalid_argument);
00209 ASSERT_THROW(RobonetDataElement("float", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", "APS1H"), "Command", RobonetDataElement::BrakePwm), invalid_argument);
00210 ASSERT_THROW(RobonetDataElement("int16_t", DataElement::Read, "Power", "BMS", RobonetDataElement::OffsetPair("Temperature1", ""), "Command", RobonetDataElement::FixedPointMilli), invalid_argument);
00211 ASSERT_THROW(RobonetDataElement("uint16_t", DataElement::Write, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Command", RobonetDataElement::UnsignedFixedPointMilli), invalid_argument);
00212 }
00213
00214 TEST_F(RobonetDataElementSMTTest, InvalidArgumentInMethods)
00215 {
00216 RobonetDataElement robonetDataElement("float", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor");
00217
00218 EXPECT_THROW(robonetDataElement.setChannel(""), invalid_argument);
00219 EXPECT_THROW(robonetDataElement.setNode(""), invalid_argument);
00220 EXPECT_THROW(robonetDataElement.setOffsetPair(RobonetDataElement::OffsetPair("", "")), invalid_argument);
00221 EXPECT_THROW(robonetDataElement.setOffsetPair(RobonetDataElement::OffsetPair("OnOff", "")), invalid_argument);
00222 EXPECT_THROW(robonetDataElement.setGroup(""), invalid_argument);
00223 }
00224
00225 TEST_F(RobonetDataElementSMTTest, MotComTrim)
00226 {
00227 RobonetDataElement robonetDataElement("int16_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::MotCom, int16Resource);
00228
00229 int16_t value = 20000;
00230 robonetDataElement.setValue<int16_t>(value);
00231 EXPECT_EQ(255, robonetDataElement.getValue<int16_t>());
00232
00233 value = -20000;
00234 robonetDataElement.setValue<int16_t>(value);
00235 EXPECT_EQ(-255, robonetDataElement.getValue<int16_t>());
00236 }
00237
00238 TEST_F(RobonetDataElementSMTTest, TemperatureTrim)
00239 {
00240 RobonetDataElement robonetDataElement("float", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Temperature, floatResource);
00241
00242 float value = 100;
00243 robonetDataElement.setValue<float>(value);
00244 EXPECT_EQ(100, robonetDataElement.getValue<float>());
00245
00246 value = -20000;
00247 robonetDataElement.setValue<float>(value);
00248 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00249 }
00250
00251 TEST_F(RobonetDataElementSMTTest, BrakePwmTrim)
00252 {
00253 RobonetDataElement robonetDataElement("uint16_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::BrakePwm, uint16Resource);
00254
00255 uint16_t value = 4097;
00256 robonetDataElement.setValue<uint16_t>(value);
00257 EXPECT_EQ(4096, robonetDataElement.getValue<uint16_t>());
00258 }
00259
00260 TEST_F(RobonetDataElementSMTTest, GetRawSize)
00261 {
00262 RobonetDataElement robonetDataElement1("bool", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::Normal, uint8Resource);
00263 EXPECT_EQ(DataElement::EightBit, robonetDataElement1.getSize());
00264 EXPECT_EQ(DataElement::EightBit, robonetDataElement1.getRawSize());
00265
00266 RobonetDataElement robonetDataElement2("float", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", "APS1H"), "Command", RobonetDataElement::Normal, floatResource);
00267 EXPECT_EQ(DataElement::ThirtyTwoBit, robonetDataElement2.getSize());
00268 EXPECT_EQ(DataElement::ThirtyTwoBit, robonetDataElement2.getRawSize());
00269
00270 RobonetDataElement robonetDataElement3("int16_t", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", ""), "Command", RobonetDataElement::MotCom, int16Resource);
00271 EXPECT_EQ(DataElement::SixteenBit, robonetDataElement3.getSize());
00272 EXPECT_EQ(DataElement::SixteenBit, robonetDataElement3.getRawSize());
00273
00274 RobonetDataElement robonetDataElement4("float", DataElement::Write, "LeftLeg", "J3", RobonetDataElement::OffsetPair("APS1L", ""), "Command", RobonetDataElement::Temperature, floatResource);
00275 EXPECT_EQ(DataElement::ThirtyTwoBit, robonetDataElement4.getSize());
00276 EXPECT_EQ(DataElement::SixteenBit, robonetDataElement4.getRawSize());
00277 }
00278
00279 TEST_F(RobonetDataElementSMTTest, GetSetAttributes)
00280 {
00281 RobonetDataElement robonetDataElement("bool", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor");
00282
00283 EXPECT_EQ("RightArm", robonetDataElement.getChannel());
00284 robonetDataElement.setChannel("LeftLeg");
00285 EXPECT_EQ("LeftLeg", robonetDataElement.getChannel());
00286
00287 EXPECT_EQ("J1", robonetDataElement.getNode());
00288 robonetDataElement.setNode("J3");
00289 EXPECT_EQ("J3", robonetDataElement.getNode());
00290
00291 EXPECT_EQ("OnOff", robonetDataElement.getOffsetPair().first);
00292 EXPECT_EQ("", robonetDataElement.getOffsetPair().second);
00293 robonetDataElement.setOffsetPair(RobonetDataElement::OffsetPair("APS1L", "APS1H"));
00294 EXPECT_EQ("APS1L", robonetDataElement.getOffsetPair().first);
00295 EXPECT_EQ("APS1H", robonetDataElement.getOffsetPair().second);
00296
00297 EXPECT_EQ("Monitor", robonetDataElement.getGroup());
00298 robonetDataElement.setGroup("Command");
00299 EXPECT_EQ("Command", robonetDataElement.getGroup());
00300 }
00301
00302 TEST_F(RobonetDataElementSMTTest, PullFromReadElement)
00303 {
00304 RobonetDataElement robonetDataElement("uint32_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint32Resource);
00305 RobonetDataElement::RawPair rawPair;
00306
00307 EXPECT_EQ(0, robonetDataElement.getValue<uint32_t>());
00308 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00309 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00310
00311 robonetDataElement.setValue<uint32_t>(65537);
00312 rawPair = robonetDataElement.pull();
00313 EXPECT_EQ(0, rawPair.first);
00314 EXPECT_EQ(0, rawPair.second);
00315 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00316 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00317 }
00318
00319 TEST_F(RobonetDataElementSMTTest, PullFromWriteElement)
00320 {
00321 RobonetDataElement robonetDataElement("uint32_t", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint32Resource);
00322 RobonetDataElement::RawPair rawPair;
00323
00324 EXPECT_EQ(0, robonetDataElement.getValue<uint32_t>());
00325 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00326 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00327
00328 robonetDataElement.setValue<uint32_t>(65537);
00329 rawPair = robonetDataElement.pull();
00330 EXPECT_EQ(1, rawPair.first);
00331 EXPECT_EQ(1, rawPair.second);
00332 EXPECT_EQ(1, robonetDataElement.getRawPair().first);
00333 EXPECT_EQ(1, robonetDataElement.getRawPair().second);
00334 }
00335
00336 TEST_F(RobonetDataElementSMTTest, PullUnsignedIntSixteen)
00337 {
00338 RobonetDataElement robonetDataElement("uint16_t", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint16Resource);
00339 RobonetDataElement::RawPair rawPair;
00340
00341 EXPECT_EQ(0, robonetDataElement.getValue<uint16_t>());
00342 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00343 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00344
00345 robonetDataElement.setValue<uint16_t>(12);
00346
00347 EXPECT_EQ(12, robonetDataElement.getValue<uint16_t>());
00348 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00349 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00350
00351 rawPair = robonetDataElement.pull();
00352 EXPECT_EQ(12, rawPair.first);
00353 EXPECT_EQ(0, rawPair.second);
00354 EXPECT_EQ(12, robonetDataElement.getRawPair().first);
00355 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00356
00357 robonetDataElement.setValue<uint16_t>((uint16_t)65536);
00358 rawPair = robonetDataElement.pull();
00359 EXPECT_EQ(0, rawPair.first);
00360 EXPECT_EQ(0, rawPair.second);
00361 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00362 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00363 }
00364
00365 TEST_F(RobonetDataElementSMTTest, PullUnsignedIntThirtyTwo)
00366 {
00367 RobonetDataElement robonetDataElement("uint32_t", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint32Resource);
00368 RobonetDataElement::RawPair rawPair;
00369
00370 robonetDataElement.setValue<uint32_t>(65536);
00371 rawPair = robonetDataElement.pull();
00372 EXPECT_EQ(0, rawPair.first);
00373 EXPECT_EQ(1, rawPair.second);
00374 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00375 EXPECT_EQ(1, robonetDataElement.getRawPair().second);
00376 }
00377
00378 TEST_F(RobonetDataElementSMTTest, PullIntSixteen)
00379 {
00380 RobonetDataElement robonetDataElement("int16_t", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, int16Resource);
00381 RobonetDataElement::RawPair rawPair;
00382
00383 EXPECT_EQ(0, robonetDataElement.getValue<int16_t>());
00384 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00385 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00386
00387 robonetDataElement.setValue<int16_t>(-12);
00388
00389 EXPECT_EQ(-12, robonetDataElement.getValue<int16_t>());
00390 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00391 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00392
00393 rawPair = robonetDataElement.pull();
00394 EXPECT_EQ(65524, rawPair.first);
00395 EXPECT_EQ(0, rawPair.second);
00396 EXPECT_EQ(65524, robonetDataElement.getRawPair().first);
00397 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00398
00399 robonetDataElement.setValue<int16_t>((int16_t)65536);
00400 rawPair = robonetDataElement.pull();
00401 EXPECT_EQ(0, rawPair.first);
00402 EXPECT_EQ(0, rawPair.second);
00403 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00404 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00405
00406 robonetDataElement.setValue<int16_t>(-1);
00407 rawPair = robonetDataElement.pull();
00408 EXPECT_EQ(65535, rawPair.first);
00409 EXPECT_EQ(0, rawPair.second);
00410 EXPECT_EQ(65535, robonetDataElement.getRawPair().first);
00411 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00412 }
00413
00414 TEST_F(RobonetDataElementSMTTest, PullIntThirtyTwo)
00415 {
00416 RobonetDataElement robonetDataElement("int32_t", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, int32Resource);
00417 RobonetDataElement::RawPair rawPair;
00418
00419 EXPECT_EQ(0, robonetDataElement.getValue<int32_t>());
00420 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00421 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00422
00423 robonetDataElement.setValue<int32_t>(-12);
00424
00425 EXPECT_EQ(-12, robonetDataElement.getValue<int32_t>());
00426 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00427 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00428
00429 rawPair = robonetDataElement.pull();
00430 EXPECT_EQ(65524, rawPair.first);
00431 EXPECT_EQ(65535, rawPair.second);
00432 EXPECT_EQ(65524, robonetDataElement.getRawPair().first);
00433 EXPECT_EQ(65535, robonetDataElement.getRawPair().second);
00434
00435 robonetDataElement.setValue<int32_t>(65536);
00436 rawPair = robonetDataElement.pull();
00437 EXPECT_EQ(0, rawPair.first);
00438 EXPECT_EQ(1, rawPair.second);
00439 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00440 EXPECT_EQ(1, robonetDataElement.getRawPair().second);
00441
00442 robonetDataElement.setValue<int32_t>(-1);
00443 rawPair = robonetDataElement.pull();
00444 EXPECT_EQ(65535, rawPair.first);
00445 EXPECT_EQ(65535, rawPair.second);
00446 EXPECT_EQ(65535, robonetDataElement.getRawPair().first);
00447 EXPECT_EQ(65535, robonetDataElement.getRawPair().second);
00448 }
00449
00450 TEST_F(RobonetDataElementSMTTest, PullFloat)
00451 {
00452 RobonetDataElement robonetDataElement("float", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, floatResource);
00453 RobonetDataElement::RawPair rawPair;
00454
00455 EXPECT_FLOAT_EQ(0, robonetDataElement.getValue<float>());
00456 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00457 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00458
00459 robonetDataElement.setValue<float>(3.14159);
00460
00461 EXPECT_FLOAT_EQ(3.14159, robonetDataElement.getValue<float>());
00462 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00463 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00464
00465 rawPair = robonetDataElement.pull();
00466 EXPECT_EQ(4048, rawPair.first);
00467 EXPECT_EQ(16457, rawPair.second);
00468 EXPECT_EQ(4048, robonetDataElement.getRawPair().first);
00469 EXPECT_EQ(16457, robonetDataElement.getRawPair().second);
00470 }
00471
00472 TEST_F(RobonetDataElementSMTTest, PullBool)
00473 {
00474 RobonetDataElement robonetDataElement("bool", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint8Resource);
00475 RobonetDataElement::RawPair rawPair;
00476
00477 EXPECT_FALSE(robonetDataElement.getValue<bool>());
00478 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00479 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00480
00481 robonetDataElement.setValue<bool>(true);
00482
00483 EXPECT_TRUE(robonetDataElement.getValue<bool>());
00484 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00485 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00486
00487 rawPair = robonetDataElement.pull();
00488 EXPECT_EQ(1, rawPair.first);
00489 EXPECT_EQ(0, rawPair.second);
00490 EXPECT_EQ(1, robonetDataElement.getRawPair().first);
00491 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00492 }
00493
00494 TEST_F(RobonetDataElementSMTTest, PullMotCom)
00495 {
00496 RobonetDataElement robonetDataElement("int16_t", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::MotCom, int16Resource);
00497 RobonetDataElement::RawPair rawPair;
00498
00499 EXPECT_EQ(0, robonetDataElement.getValue<int16_t>());
00500 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00501 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00502
00503 rawPair = robonetDataElement.pull();
00504 EXPECT_EQ(0x0E00, rawPair.first);
00505 EXPECT_EQ(0x0000, rawPair.second);
00506
00507 robonetDataElement.setValue<int16_t>(255);
00508 rawPair = robonetDataElement.pull();
00509 EXPECT_EQ(0x0EFF, rawPair.first);
00510 EXPECT_EQ(0x0000, rawPair.second);
00511
00512 robonetDataElement.setValue<int16_t>(-255);
00513 rawPair = robonetDataElement.pull();
00514 EXPECT_EQ(0x0FFF, rawPair.first);
00515 EXPECT_EQ(0x0000, rawPair.second);
00516
00517 robonetDataElement.setValue<int16_t>(64);
00518 rawPair = robonetDataElement.pull();
00519 EXPECT_EQ(0x0E40, rawPair.first);
00520 EXPECT_EQ(0x0000, rawPair.second);
00521
00522 robonetDataElement.setValue<int16_t>(-48);
00523 rawPair = robonetDataElement.pull();
00524 EXPECT_EQ(0x0F30, rawPair.first);
00525 EXPECT_EQ(0x0000, rawPair.second);
00526 }
00527
00528 TEST_F(RobonetDataElementSMTTest, PullTemperature)
00529 {
00530 RobonetDataElement robonetDataElement("float", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Temperature, floatResource);
00531 RobonetDataElement::RawPair rawPair;
00532
00533 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00534 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00535 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00536
00537 rawPair = robonetDataElement.pull();
00538 EXPECT_EQ(0x0000, rawPair.first);
00539 EXPECT_EQ(0x0000, rawPair.second);
00540
00541 robonetDataElement.setValue<float>(100.0);
00542 rawPair = robonetDataElement.pull();
00543 EXPECT_EQ(0x00C8, rawPair.first);
00544 EXPECT_EQ(0x0000, rawPair.second);
00545
00546 robonetDataElement.setValue<float>(121.5);
00547 rawPair = robonetDataElement.pull();
00548 EXPECT_EQ(0x00F3, rawPair.first);
00549 EXPECT_EQ(0x0000, rawPair.second);
00550 }
00551
00552 TEST_F(RobonetDataElementSMTTest, PullBrakePwm)
00553 {
00554 RobonetDataElement robonetDataElement("uint16_t", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::BrakePwm, uint16Resource);
00555 RobonetDataElement::RawPair rawPair;
00556
00557 EXPECT_EQ(0, robonetDataElement.getValue<uint16_t>());
00558 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00559 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00560
00561 rawPair = robonetDataElement.pull();
00562 EXPECT_EQ(0xC000, rawPair.first);
00563 EXPECT_EQ(0x0000, rawPair.second);
00564
00565 robonetDataElement.setValue<uint16_t>(0x123);
00566 rawPair = robonetDataElement.pull();
00567 EXPECT_EQ(0xC123, rawPair.first);
00568 EXPECT_EQ(0x0000, rawPair.second);
00569 }
00570
00571 TEST_F(RobonetDataElementSMTTest, PullFixedPointMilli)
00572 {
00573 RobonetDataElement robonetDataElement("float", DataElement::Write, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::FixedPointMilli, floatResource);
00574 RobonetDataElement::RawPair rawPair;
00575
00576 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00577 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00578 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00579
00580 rawPair = robonetDataElement.pull();
00581 EXPECT_EQ(0x0000, rawPair.first);
00582 EXPECT_EQ(0x0000, rawPair.second);
00583
00584 robonetDataElement.setValue<float>(-31.456);
00585 rawPair = robonetDataElement.pull();
00586 EXPECT_EQ(0x8520, rawPair.first);
00587 EXPECT_EQ(0x0000, rawPair.second);
00588
00589 robonetDataElement.setValue<float>(-1.454);
00590 rawPair = robonetDataElement.pull();
00591 EXPECT_EQ(0xFA52, rawPair.first);
00592 EXPECT_EQ(0x0000, rawPair.second);
00593
00594 robonetDataElement.setValue<float>(31.456);
00595 rawPair = robonetDataElement.pull();
00596 EXPECT_EQ(0x7AE0, rawPair.first);
00597 EXPECT_EQ(0x0000, rawPair.second);
00598 }
00599
00600 TEST_F(RobonetDataElementSMTTest, PullUnsignedFixedPointMilli)
00601 {
00602 RobonetDataElement robonetDataElement("float", DataElement::Write, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::UnsignedFixedPointMilli, floatResource);
00603 RobonetDataElement::RawPair rawPair;
00604
00605 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00606 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00607 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00608
00609 rawPair = robonetDataElement.pull();
00610 EXPECT_EQ(0x0000, rawPair.first);
00611 EXPECT_EQ(0x0000, rawPair.second);
00612
00613 robonetDataElement.setValue<float>(1.454);
00614 rawPair = robonetDataElement.pull();
00615 EXPECT_EQ(0x5AE, rawPair.first);
00616 EXPECT_EQ(0x0000, rawPair.second);
00617
00618 robonetDataElement.setValue<float>(31.456);
00619 rawPair = robonetDataElement.pull();
00620 EXPECT_EQ(0x7AE0, rawPair.first);
00621 EXPECT_EQ(0x0000, rawPair.second);
00622
00623 robonetDataElement.setValue<float>(63.772);
00624 rawPair = robonetDataElement.pull();
00625 EXPECT_EQ(0xF91C, rawPair.first);
00626 EXPECT_EQ(0x0000, rawPair.second);
00627 }
00628
00629 TEST_F(RobonetDataElementSMTTest, PullFixedPointCenti)
00630 {
00631 RobonetDataElement robonetDataElement("float", DataElement::Write, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::FixedPointCenti, floatResource);
00632 RobonetDataElement::RawPair rawPair;
00633
00634 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00635 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00636 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00637
00638 rawPair = robonetDataElement.pull();
00639 EXPECT_EQ(0x0000, rawPair.first);
00640 EXPECT_EQ(0x0000, rawPair.second);
00641
00642 robonetDataElement.setValue<float>(-314.56);
00643 rawPair = robonetDataElement.pull();
00644 EXPECT_EQ(0x8520, rawPair.first);
00645 EXPECT_EQ(0x0000, rawPair.second);
00646
00647 robonetDataElement.setValue<float>(-14.54);
00648 rawPair = robonetDataElement.pull();
00649 EXPECT_EQ(0xFA52, rawPair.first);
00650 EXPECT_EQ(0x0000, rawPair.second);
00651
00652 robonetDataElement.setValue<float>(314.56);
00653 rawPair = robonetDataElement.pull();
00654 EXPECT_EQ(0x7AE0, rawPair.first);
00655 EXPECT_EQ(0x0000, rawPair.second);
00656 }
00657
00658 TEST_F(RobonetDataElementSMTTest, PullUnsignedFixedPointCenti)
00659 {
00660 RobonetDataElement robonetDataElement("float", DataElement::Write, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::UnsignedFixedPointCenti, floatResource);
00661 RobonetDataElement::RawPair rawPair;
00662
00663 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00664 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00665 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00666
00667 rawPair = robonetDataElement.pull();
00668 EXPECT_EQ(0x0000, rawPair.first);
00669 EXPECT_EQ(0x0000, rawPair.second);
00670
00671 robonetDataElement.setValue<float>(14.54);
00672 rawPair = robonetDataElement.pull();
00673 EXPECT_EQ(0x5AE, rawPair.first);
00674 EXPECT_EQ(0x0000, rawPair.second);
00675
00676 robonetDataElement.setValue<float>(314.56);
00677 rawPair = robonetDataElement.pull();
00678 EXPECT_EQ(0x7AE0, rawPair.first);
00679 EXPECT_EQ(0x0000, rawPair.second);
00680
00681 robonetDataElement.setValue<float>(637.72);
00682 rawPair = robonetDataElement.pull();
00683 EXPECT_EQ(0xF91B, rawPair.first);
00684 EXPECT_EQ(0x0000, rawPair.second);
00685 }
00686
00687 TEST_F(RobonetDataElementSMTTest, PullPowConTemperature)
00688 {
00689 RobonetDataElement robonetDataElement("float", DataElement::Write, "Power", "PowCon", RobonetDataElement::OffsetPair("PC_24V_TEMP_1", ""), "Monitor", RobonetDataElement::PowConTemperature, floatResource);
00690 RobonetDataElement::RawPair rawPair;
00691
00692 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00693 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00694 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00695
00696 rawPair = robonetDataElement.pull();
00697 EXPECT_EQ(0x199, rawPair.first);
00698 EXPECT_EQ(0x0000, rawPair.second);
00699
00700 robonetDataElement.setValue<float>(1.454);
00701 rawPair = robonetDataElement.pull();
00702 EXPECT_EQ(0x1A5, rawPair.first);
00703 EXPECT_EQ(0x0000, rawPair.second);
00704
00705 robonetDataElement.setValue<float>(448.5);
00706 rawPair = robonetDataElement.pull();
00707 EXPECT_EQ(0xFF2, rawPair.first);
00708 EXPECT_EQ(0x0000, rawPair.second);
00709
00710 robonetDataElement.setValue<float>(333.555);
00711 rawPair = robonetDataElement.pull();
00712 EXPECT_EQ(0xC45, rawPair.first);
00713 EXPECT_EQ(0x0000, rawPair.second);
00714 }
00715
00716 TEST_F(RobonetDataElementSMTTest, PullPowConCurrentMany)
00717 {
00718 RobonetDataElement robonetDataElement("float", DataElement::Write, "Power", "PowCon", RobonetDataElement::OffsetPair("PC_24V_TEMP_1", ""), "Monitor", RobonetDataElement::PowConCurrentMany, floatResource);
00719 RobonetDataElement::RawPair rawPair;
00720
00721 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00722 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00723 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00724
00725 rawPair = robonetDataElement.pull();
00726 EXPECT_EQ(0x199, rawPair.first);
00727 EXPECT_EQ(0x0000, rawPair.second);
00728
00729 robonetDataElement.setValue<float>(1.454);
00730 rawPair = robonetDataElement.pull();
00731 EXPECT_EQ(0x275, rawPair.first);
00732 EXPECT_EQ(0x0000, rawPair.second);
00733
00734 robonetDataElement.setValue<float>(24.001);
00735 rawPair = robonetDataElement.pull();
00736 EXPECT_EQ(0xFCE, rawPair.first);
00737 EXPECT_EQ(0x0000, rawPair.second);
00738
00739 robonetDataElement.setValue<float>(14.2);
00740 rawPair = robonetDataElement.pull();
00741 EXPECT_EQ(0xA01, rawPair.first);
00742 EXPECT_EQ(0x0000, rawPair.second);
00743 }
00744
00745 TEST_F(RobonetDataElementSMTTest, PullPowConVoltageMany)
00746 {
00747 RobonetDataElement robonetDataElement("float", DataElement::Write, "Power", "PowCon", RobonetDataElement::OffsetPair("PC_24V_TEMP_1", ""), "Monitor", RobonetDataElement::PowConVoltageMany, floatResource);
00748 RobonetDataElement::RawPair rawPair;
00749
00750 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00751 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00752 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00753
00754 rawPair = robonetDataElement.pull();
00755 EXPECT_EQ(0x0000, rawPair.first);
00756 EXPECT_EQ(0x0000, rawPair.second);
00757
00758 robonetDataElement.setValue<float>(1.454);
00759 rawPair = robonetDataElement.pull();
00760 EXPECT_EQ(0x4A6, rawPair.first);
00761 EXPECT_EQ(0x0000, rawPair.second);
00762
00763 robonetDataElement.setValue<float>(4.998);
00764 rawPair = robonetDataElement.pull();
00765 EXPECT_EQ(0xFFD, rawPair.first);
00766 EXPECT_EQ(0x0000, rawPair.second);
00767
00768 robonetDataElement.setValue<float>(1.36);
00769 rawPair = robonetDataElement.pull();
00770 EXPECT_EQ(0x459, rawPair.first);
00771 EXPECT_EQ(0x0000, rawPair.second);
00772 }
00773
00774 TEST_F(RobonetDataElementSMTTest, PushToReadElement)
00775 {
00776 RobonetDataElement robonetDataElement("uint32_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint32Resource);
00777 RobonetDataElement::RawPair rawPair;
00778
00779 robonetDataElement.push(RobonetDataElement::RawPair(1, 1));
00780 EXPECT_EQ(1, robonetDataElement.getRawPair().first);
00781 EXPECT_EQ(1, robonetDataElement.getRawPair().second);
00782 EXPECT_EQ(65537, robonetDataElement.getValue<uint32_t>());
00783 }
00784
00785 TEST_F(RobonetDataElementSMTTest, PushToWriteElement)
00786 {
00787 RobonetDataElement robonetDataElement("uint32_t", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint32Resource);
00788 RobonetDataElement::RawPair rawPair;
00789
00790 EXPECT_THROW(robonetDataElement.push(RobonetDataElement::RawPair(1, 1)), PushToWriteElementException);
00791 }
00792
00793 TEST_F(RobonetDataElementSMTTest, PushUnsignedIntSixteen)
00794 {
00795 RobonetDataElement robonetDataElement("uint16_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint16Resource);
00796 RobonetDataElement::RawPair rawPair;
00797
00798 EXPECT_EQ(0, robonetDataElement.getValue<uint16_t>());
00799 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00800 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00801
00802 rawPair = RobonetDataElement::RawPair(1, 0);
00803 robonetDataElement.push(rawPair);
00804 EXPECT_EQ(1, robonetDataElement.getRawPair().first);
00805 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00806 EXPECT_EQ(1, robonetDataElement.getValue<uint16_t>());
00807
00808 rawPair = RobonetDataElement::RawPair(0, 1);
00809 robonetDataElement.push(rawPair);
00810 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00811 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00812 EXPECT_EQ(0, robonetDataElement.getValue<uint16_t>());
00813
00814 rawPair = RobonetDataElement::RawPair((uint16_t)65536, 0);
00815 robonetDataElement.push(rawPair);
00816 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00817 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00818 EXPECT_EQ(0, robonetDataElement.getValue<uint16_t>());
00819 }
00820
00821 TEST_F(RobonetDataElementSMTTest, PushUnsignedIntThirtyTwo)
00822 {
00823 RobonetDataElement robonetDataElement("uint32_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint32Resource);
00824 RobonetDataElement::RawPair rawPair;
00825
00826 EXPECT_EQ(0, robonetDataElement.getValue<uint32_t>());
00827 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00828 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00829
00830 rawPair = RobonetDataElement::RawPair(1, 0);
00831 robonetDataElement.push(rawPair);
00832 EXPECT_EQ(1, robonetDataElement.getRawPair().first);
00833 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00834 EXPECT_EQ(1, robonetDataElement.getValue<uint32_t>());
00835
00836 rawPair = RobonetDataElement::RawPair(0, 1);
00837 robonetDataElement.push(rawPair);
00838 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00839 EXPECT_EQ(1, robonetDataElement.getRawPair().second);
00840 EXPECT_EQ(65536, robonetDataElement.getValue<uint32_t>());
00841
00842 rawPair = RobonetDataElement::RawPair((uint16_t)65536, (uint16_t)65536);
00843 robonetDataElement.push(rawPair);
00844 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00845 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00846 EXPECT_EQ(0, robonetDataElement.getValue<uint32_t>());
00847 }
00848
00849 TEST_F(RobonetDataElementSMTTest, PushIntSixteen)
00850 {
00851 RobonetDataElement robonetDataElement("int16_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, int16Resource);
00852 RobonetDataElement::RawPair rawPair;
00853
00854 EXPECT_EQ(0, robonetDataElement.getValue<int16_t>());
00855 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00856 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00857
00858 rawPair = RobonetDataElement::RawPair(1, 0);
00859 robonetDataElement.push(rawPair);
00860 EXPECT_EQ(1, robonetDataElement.getRawPair().first);
00861 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00862 EXPECT_EQ(1, robonetDataElement.getValue<int16_t>());
00863
00864 rawPair = RobonetDataElement::RawPair(0, 1);
00865 robonetDataElement.push(rawPair);
00866 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00867 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00868 EXPECT_EQ(0, robonetDataElement.getValue<int16_t>());
00869
00870 rawPair = RobonetDataElement::RawPair((uint16_t)65536, 0);
00871 robonetDataElement.push(rawPair);
00872 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00873 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00874 EXPECT_EQ(0, robonetDataElement.getValue<int16_t>());
00875
00876 rawPair = RobonetDataElement::RawPair(65535, 0);
00877 robonetDataElement.push(rawPair);
00878 EXPECT_EQ(65535, robonetDataElement.getRawPair().first);
00879 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00880 EXPECT_EQ(-1, robonetDataElement.getValue<int16_t>());
00881 }
00882
00883 TEST_F(RobonetDataElementSMTTest, PushIntThirtyTwo)
00884 {
00885 RobonetDataElement robonetDataElement("int32_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, int32Resource);
00886 RobonetDataElement::RawPair rawPair;
00887
00888 EXPECT_EQ(0, robonetDataElement.getValue<int32_t>());
00889 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00890 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00891
00892 rawPair = RobonetDataElement::RawPair(1, 0);
00893 robonetDataElement.push(rawPair);
00894 EXPECT_EQ(1, robonetDataElement.getRawPair().first);
00895 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00896 EXPECT_EQ(1, robonetDataElement.getValue<int32_t>());
00897
00898 rawPair = RobonetDataElement::RawPair(0, 1);
00899 robonetDataElement.push(rawPair);
00900 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00901 EXPECT_EQ(1, robonetDataElement.getRawPair().second);
00902 EXPECT_EQ(65536, robonetDataElement.getValue<int32_t>());
00903
00904 rawPair = RobonetDataElement::RawPair((uint16_t)65536, 0);
00905 robonetDataElement.push(rawPair);
00906 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00907 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00908 EXPECT_EQ(0, robonetDataElement.getValue<int32_t>());
00909
00910 rawPair = RobonetDataElement::RawPair(65535, 0);
00911 robonetDataElement.push(rawPair);
00912 EXPECT_EQ(65535, robonetDataElement.getRawPair().first);
00913 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00914 EXPECT_EQ(65535, robonetDataElement.getValue<int32_t>());
00915
00916 rawPair = RobonetDataElement::RawPair(65535, 65535);
00917 robonetDataElement.push(rawPair);
00918 EXPECT_EQ(65535, robonetDataElement.getRawPair().first);
00919 EXPECT_EQ(65535, robonetDataElement.getRawPair().second);
00920 EXPECT_EQ(-1, robonetDataElement.getValue<int32_t>());
00921 }
00922
00923 TEST_F(RobonetDataElementSMTTest, PushFloat)
00924 {
00925 RobonetDataElement robonetDataElement("float", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, floatResource);
00926 RobonetDataElement::RawPair rawPair;
00927
00928 EXPECT_EQ(0, robonetDataElement.getValue<float>());
00929 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00930 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00931
00932 rawPair = RobonetDataElement::RawPair(4048, 16457);
00933 robonetDataElement.push(rawPair);
00934 EXPECT_EQ(4048, robonetDataElement.getRawPair().first);
00935 EXPECT_EQ(16457, robonetDataElement.getRawPair().second);
00936 EXPECT_FLOAT_EQ(3.14159, robonetDataElement.getValue<float>());
00937 }
00938
00939 TEST_F(RobonetDataElementSMTTest, PushBool)
00940 {
00941 RobonetDataElement robonetDataElement("bool", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, uint8Resource);
00942 RobonetDataElement::RawPair rawPair;
00943
00944 EXPECT_FALSE(robonetDataElement.getValue<bool>());
00945 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00946 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00947
00948 rawPair = RobonetDataElement::RawPair(1, 1);
00949 robonetDataElement.push(rawPair);
00950 EXPECT_EQ(1, robonetDataElement.getRawPair().first);
00951 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00952 EXPECT_TRUE( robonetDataElement.getValue<bool>());
00953
00954 rawPair = RobonetDataElement::RawPair(2, 0);
00955 robonetDataElement.push(rawPair);
00956 EXPECT_EQ(2, robonetDataElement.getRawPair().first);
00957 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00958 EXPECT_TRUE( robonetDataElement.getValue<bool>());
00959
00960 rawPair = RobonetDataElement::RawPair(256, 0);
00961 robonetDataElement.push(rawPair);
00962 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00963 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00964 EXPECT_FALSE(robonetDataElement.getValue<bool>());
00965 }
00966
00967 TEST_F(RobonetDataElementSMTTest, PushMotCom)
00968 {
00969 RobonetDataElement robonetDataElement("int16_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::MotCom, int16Resource);
00970 RobonetDataElement::RawPair rawPair;
00971
00972 EXPECT_EQ(0, robonetDataElement.getValue<int16_t>());
00973 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
00974 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00975
00976 rawPair = RobonetDataElement::RawPair(0x0EFF, 0);
00977 robonetDataElement.push(rawPair);
00978 EXPECT_EQ(0x0EFF, robonetDataElement.getRawPair().first);
00979 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00980 EXPECT_EQ(255, robonetDataElement.getValue<int16_t>());
00981
00982 rawPair = RobonetDataElement::RawPair(0x0FFF, 0);
00983 robonetDataElement.push(rawPair);
00984 EXPECT_EQ(0x0FFF, robonetDataElement.getRawPair().first);
00985 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00986 EXPECT_EQ(-255, robonetDataElement.getValue<int16_t>());
00987
00988 rawPair = RobonetDataElement::RawPair(0x0E40, 0);
00989 robonetDataElement.push(rawPair);
00990 EXPECT_EQ(0x0E40, robonetDataElement.getRawPair().first);
00991 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00992 EXPECT_EQ(64, robonetDataElement.getValue<int16_t>());
00993
00994 rawPair = RobonetDataElement::RawPair(0x0F30, 0);
00995 robonetDataElement.push(rawPair);
00996 EXPECT_EQ(0x0F30, robonetDataElement.getRawPair().first);
00997 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
00998 EXPECT_EQ(-48, robonetDataElement.getValue<int16_t>());
00999 }
01000
01001 TEST_F(RobonetDataElementSMTTest, PushTemperature)
01002 {
01003 RobonetDataElement robonetDataElement("float", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Temperature, floatResource);
01004 RobonetDataElement::RawPair rawPair;
01005
01006 EXPECT_EQ(0, robonetDataElement.getValue<float>());
01007 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01008 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01009
01010 rawPair = RobonetDataElement::RawPair(0xF86A, 0);
01011 robonetDataElement.push(rawPair);
01012 EXPECT_EQ(0xF86A, robonetDataElement.getRawPair().first);
01013 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01014 EXPECT_FLOAT_EQ(31797, robonetDataElement.getValue<float>());
01015
01016 rawPair = RobonetDataElement::RawPair(0xF86B, 0);
01017 robonetDataElement.push(rawPair);
01018 EXPECT_EQ(0xF86B, robonetDataElement.getRawPair().first);
01019 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01020 EXPECT_FLOAT_EQ(31797.5, robonetDataElement.getValue<float>());
01021 }
01022
01023 TEST_F(RobonetDataElementSMTTest, PushBrakePwm)
01024 {
01025 RobonetDataElement robonetDataElement("uint16_t", DataElement::Read, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::BrakePwm, uint16Resource);
01026 RobonetDataElement::RawPair rawPair;
01027
01028 EXPECT_EQ(0, robonetDataElement.getValue<uint16_t>());
01029 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01030 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01031
01032 rawPair = RobonetDataElement::RawPair(0xC000, 0);
01033 robonetDataElement.push(rawPair);
01034 EXPECT_EQ(0xC000, robonetDataElement.getRawPair().first);
01035 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01036 EXPECT_EQ(0, robonetDataElement.getValue<uint16_t>());
01037
01038 rawPair = RobonetDataElement::RawPair(0xC123, 0);
01039 robonetDataElement.push(rawPair);
01040 EXPECT_EQ(0xC123, robonetDataElement.getRawPair().first);
01041 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01042 EXPECT_EQ(0x123, robonetDataElement.getValue<uint16_t>());
01043 }
01044
01045 TEST_F(RobonetDataElementSMTTest, PushFixedPointMilli)
01046 {
01047 RobonetDataElement robonetDataElement("float", DataElement::Read, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::FixedPointMilli, floatResource);
01048 RobonetDataElement::RawPair rawPair;
01049
01050 EXPECT_EQ(0, robonetDataElement.getValue<float>());
01051 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01052 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01053
01054 rawPair = RobonetDataElement::RawPair(0x8520, 0);
01055 robonetDataElement.push(rawPair);
01056 EXPECT_EQ(0x8520, robonetDataElement.getRawPair().first);
01057 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01058 EXPECT_FLOAT_EQ(-31.456, robonetDataElement.getValue<float>());
01059
01060 rawPair = RobonetDataElement::RawPair(0xFA52, 0);
01061 robonetDataElement.push(rawPair);
01062 EXPECT_EQ(0xFA52, robonetDataElement.getRawPair().first);
01063 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01064 EXPECT_FLOAT_EQ(-1.454, robonetDataElement.getValue<float>());
01065
01066 rawPair = RobonetDataElement::RawPair(0x7AE0, 0);
01067 robonetDataElement.push(rawPair);
01068 EXPECT_EQ(0x7AE0, robonetDataElement.getRawPair().first);
01069 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01070 EXPECT_FLOAT_EQ(31.456, robonetDataElement.getValue<float>());
01071 }
01072
01073 TEST_F(RobonetDataElementSMTTest, PushUnsignedFixedPointMilli)
01074 {
01075 RobonetDataElement robonetDataElement("float", DataElement::Read, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::UnsignedFixedPointMilli, floatResource);
01076 RobonetDataElement::RawPair rawPair;
01077
01078 EXPECT_EQ(0, robonetDataElement.getValue<float>());
01079 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01080 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01081
01082 rawPair = RobonetDataElement::RawPair(0x5AE, 0);
01083 robonetDataElement.push(rawPair);
01084 EXPECT_EQ(0x5AE, robonetDataElement.getRawPair().first);
01085 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01086 EXPECT_FLOAT_EQ(1.454, robonetDataElement.getValue<float>());
01087
01088 rawPair = RobonetDataElement::RawPair(0x7AE0, 0);
01089 robonetDataElement.push(rawPair);
01090 EXPECT_EQ(0x7AE0, robonetDataElement.getRawPair().first);
01091 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01092 EXPECT_FLOAT_EQ(31.456, robonetDataElement.getValue<float>());
01093
01094 rawPair = RobonetDataElement::RawPair(0xF91C, 0);
01095 robonetDataElement.push(rawPair);
01096 EXPECT_EQ(0xF91C, robonetDataElement.getRawPair().first);
01097 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01098 EXPECT_FLOAT_EQ(63.772, robonetDataElement.getValue<float>());
01099 }
01100
01101 TEST_F(RobonetDataElementSMTTest, PushFixedPointCenti)
01102 {
01103 RobonetDataElement robonetDataElement("float", DataElement::Read, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::FixedPointCenti, floatResource);
01104 RobonetDataElement::RawPair rawPair;
01105
01106 EXPECT_EQ(0, robonetDataElement.getValue<float>());
01107 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01108 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01109
01110 rawPair = RobonetDataElement::RawPair(0x8520, 0);
01111 robonetDataElement.push(rawPair);
01112 EXPECT_EQ(0x8520, robonetDataElement.getRawPair().first);
01113 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01114 EXPECT_FLOAT_EQ(-314.56, robonetDataElement.getValue<float>());
01115
01116 rawPair = RobonetDataElement::RawPair(0xFA52, 0);
01117 robonetDataElement.push(rawPair);
01118 EXPECT_EQ(0xFA52, robonetDataElement.getRawPair().first);
01119 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01120 EXPECT_FLOAT_EQ(-14.54, robonetDataElement.getValue<float>());
01121
01122 rawPair = RobonetDataElement::RawPair(0x7AE0, 0);
01123 robonetDataElement.push(rawPair);
01124 EXPECT_EQ(0x7AE0, robonetDataElement.getRawPair().first);
01125 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01126 EXPECT_FLOAT_EQ(314.56, robonetDataElement.getValue<float>());
01127 }
01128
01129 TEST_F(RobonetDataElementSMTTest, PushUnsignedFixedPointCenti)
01130 {
01131 RobonetDataElement robonetDataElement("float", DataElement::Read, "Power", "BMS", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::UnsignedFixedPointCenti, floatResource);
01132 RobonetDataElement::RawPair rawPair;
01133
01134 EXPECT_EQ(0, robonetDataElement.getValue<float>());
01135 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01136 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01137
01138 rawPair = RobonetDataElement::RawPair(0x5AE, 0);
01139 robonetDataElement.push(rawPair);
01140 EXPECT_EQ(0x5AE, robonetDataElement.getRawPair().first);
01141 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01142 EXPECT_FLOAT_EQ(14.54, robonetDataElement.getValue<float>());
01143
01144 rawPair = RobonetDataElement::RawPair(0x7AE0, 0);
01145 robonetDataElement.push(rawPair);
01146 EXPECT_EQ(0x7AE0, robonetDataElement.getRawPair().first);
01147 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01148 EXPECT_FLOAT_EQ(314.56, robonetDataElement.getValue<float>());
01149
01150 rawPair = RobonetDataElement::RawPair(0xF91C, 0);
01151 robonetDataElement.push(rawPair);
01152 EXPECT_EQ(0xF91C, robonetDataElement.getRawPair().first);
01153 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01154 EXPECT_FLOAT_EQ(637.72, robonetDataElement.getValue<float>());
01155 }
01156
01157 TEST_F(RobonetDataElementSMTTest, PushPowConTemperature)
01158 {
01159 RobonetDataElement robonetDataElement("float", DataElement::Read, "Power", "PowCon", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::PowConTemperature, floatResource);
01160 RobonetDataElement::RawPair rawPair;
01161
01162 EXPECT_EQ(0, robonetDataElement.getValue<float>());
01163 robonetDataElement.push(rawPair);
01164 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01165 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01166 EXPECT_FLOAT_EQ(-50, robonetDataElement.getValue<float>());
01167
01168 rawPair = RobonetDataElement::RawPair(0x1A5, 0);
01169 robonetDataElement.push(rawPair);
01170 EXPECT_EQ(0x1A5, robonetDataElement.getRawPair().first);
01171 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01172 EXPECT_NEAR(1.40415, robonetDataElement.getValue<float>(), 0.00001);
01173
01174 rawPair = RobonetDataElement::RawPair(0xFF2, 0);
01175 robonetDataElement.push(rawPair);
01176 EXPECT_EQ(0xFF2, robonetDataElement.getRawPair().first);
01177 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01178 EXPECT_NEAR(448.5, robonetDataElement.getValue<float>(), 0.1);
01179
01180 rawPair = RobonetDataElement::RawPair(0xC45, 0);
01181 robonetDataElement.push(rawPair);
01182 EXPECT_EQ(0xC45, robonetDataElement.getRawPair().first);
01183 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01184 EXPECT_NEAR(333.555, robonetDataElement.getValue<float>(), 0.04);
01185 }
01186
01187 TEST_F(RobonetDataElementSMTTest, PushPowConCurrentMany)
01188 {
01189 RobonetDataElement robonetDataElement("float", DataElement::Read, "Power", "PowCon", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::PowConCurrentMany, floatResource);
01190 RobonetDataElement::RawPair rawPair;
01191
01192 EXPECT_EQ(0, robonetDataElement.getValue<float>());
01193 robonetDataElement.push(rawPair);
01194 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01195 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01196 EXPECT_FLOAT_EQ(-2.702702, robonetDataElement.getValue<float>());
01197
01198 rawPair = RobonetDataElement::RawPair(0x275, 0);
01199 robonetDataElement.push(rawPair);
01200 EXPECT_EQ(0x275, robonetDataElement.getRawPair().first);
01201 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01202 EXPECT_NEAR(1.44870, robonetDataElement.getValue<float>(), 0.00001);
01203
01204 rawPair = RobonetDataElement::RawPair(0xFCE, 0);
01205 robonetDataElement.push(rawPair);
01206 EXPECT_EQ(0xFCE, robonetDataElement.getRawPair().first);
01207 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01208 EXPECT_NEAR(24.001, robonetDataElement.getValue<float>(), 0.0001);
01209
01210 rawPair = RobonetDataElement::RawPair(0xA01, 0);
01211 robonetDataElement.push(rawPair);
01212 EXPECT_EQ(0xA01, robonetDataElement.getRawPair().first);
01213 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01214 EXPECT_NEAR(14.2, robonetDataElement.getValue<float>(), 0.0001);
01215 }
01216
01217 TEST_F(RobonetDataElementSMTTest, PushPowConVoltageMany)
01218 {
01219 RobonetDataElement robonetDataElement("float", DataElement::Read, "Power", "PowCon", RobonetDataElement::OffsetPair("Current24VUpperLimit", ""), "Monitor", RobonetDataElement::PowConVoltageMany, floatResource);
01220 RobonetDataElement::RawPair rawPair;
01221
01222 EXPECT_EQ(0, robonetDataElement.getValue<float>());
01223 robonetDataElement.push(rawPair);
01224 EXPECT_EQ(0, robonetDataElement.getRawPair().first);
01225 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01226 EXPECT_FLOAT_EQ(0, robonetDataElement.getValue<float>());
01227
01228 rawPair = RobonetDataElement::RawPair(0x4A6, 0);
01229 robonetDataElement.push(rawPair);
01230 EXPECT_EQ(0x4A6, robonetDataElement.getRawPair().first);
01231 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01232 EXPECT_NEAR(1.45299, robonetDataElement.getValue<float>(), 0.00001);
01233
01234 rawPair = RobonetDataElement::RawPair(0xFFD, 0);
01235 robonetDataElement.push(rawPair);
01236 EXPECT_EQ(0xFFD, robonetDataElement.getRawPair().first);
01237 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01238 EXPECT_NEAR(4.998, robonetDataElement.getValue<float>(), 0.001);
01239
01240 rawPair = RobonetDataElement::RawPair(0x459, 0);
01241 robonetDataElement.push(rawPair);
01242 EXPECT_EQ(0x459, robonetDataElement.getRawPair().first);
01243 EXPECT_EQ(0, robonetDataElement.getRawPair().second);
01244 EXPECT_NEAR(1.36, robonetDataElement.getValue<float>(), 0.01);
01245 }
01246
01247 TEST_F(RobonetDataElementSMTTest, ToString)
01248 {
01249 RobonetDataElement robonetDataElement("bool", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", ""), "Monitor", RobonetDataElement::Normal, uint8Resource);
01250 string s;
01251
01252 s.append("RobonetDataElement:\n");
01253 s.append(" Value: 0\n");
01254 s.append(" Type: b\n");
01255 s.append(" Size: 8\n");
01256 s.append(" Read/Write: Write\n");
01257 s.append(" Raw Value 1: 0x0000 (0)\n");
01258 s.append(" Raw Value 2: 0x0000 (0)\n");
01259 s.append(" Channel: RightArm\n");
01260 s.append(" Node: J1\n");
01261 s.append(" Offset 1: OnOff\n");
01262 s.append(" Offset 2: \n");
01263 s.append(" Group: Monitor");
01264 EXPECT_EQ(s, robonetDataElement.toString());
01265
01266 RobonetDataElement robonetDataElement2("float", DataElement::Write, "RightArm", "J1", RobonetDataElement::OffsetPair("OnOff", "OnOff2"), "Monitor", RobonetDataElement::Normal, floatResource);
01267 robonetDataElement2.setValue<float>(3.14159);
01268 robonetDataElement2.pull();
01269 string t;
01270
01271 t.append("RobonetDataElement:\n");
01272 t.append(" Value: 3.14159\n");
01273 t.append(" Type: f\n");
01274 t.append(" Size: 32\n");
01275 t.append(" Read/Write: Write\n");
01276 t.append(" Raw Value 1: 0x0FD0 (4048)\n");
01277 t.append(" Raw Value 2: 0x4049 (16457)\n");
01278 t.append(" Channel: RightArm\n");
01279 t.append(" Node: J1\n");
01280 t.append(" Offset 1: OnOff\n");
01281 t.append(" Offset 2: OnOff2\n");
01282 t.append(" Group: Monitor");
01283 EXPECT_EQ(t, robonetDataElement2.toString());
01284 }
01285
01286 int main(int argc, char** argv)
01287 {
01288 testing::InitGoogleTest(&argc, argv);
01289 return RUN_ALL_TESTS();
01290 }