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


robot_instance
Author(s):
autogenerated on Sat Jun 8 2019 20:43:12