RobonetDataElementSMT_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 #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         // start an smtcore with a random port so we don't collide with any service.
00019         smtcore.startSmtCore(true);
00020     }
00021     static void TearDownTestCase() {
00022         // Shut down the SMTcore instance we started.
00023         smtcore.shutdownSmtCore();
00024     }
00025 
00026     virtual void SetUp(){
00027         // Get the current test info.
00028         const ::testing::TestInfo* const test_info = ::testing::UnitTest::GetInstance()->current_test_info();
00029         test_name = std::string(test_info->name());
00030         // Create an smtclient with the created smtcore port
00031         smtclient = new SMT::SMTClient("http://localhost:" + std::to_string(smtcore.getPort()) + "/");
00032 
00033         // Create some common resources to use.
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         // Destroy common resources
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         // Cleanup smtclient
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 // Because we actually need something for the static member to link to.
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);  // 0xFFF4
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);  // 0xFFFFFFF4
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);  // 0x40490FD0
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); // 409 = 0x199
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); // 0x100 (first byte empty)
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 }


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