libuav original

Dependents:   UAVCAN UAVCAN_Subscriber

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers transfer.cpp Source File

transfer.cpp

00001 /*
00002  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
00003  */
00004 
00005 #include <string>
00006 #include <gtest/gtest.h>
00007 #include <uavcan/transport/transfer.hpp>
00008 
00009 
00010 TEST(Transfer, TransferID)
00011 {
00012     using uavcan::TransferID;
00013 
00014     // Tests below are based on this assumption
00015     ASSERT_EQ(32, 1 << TransferID::BitLen);
00016 
00017     /*
00018      * forwardDistance()
00019      */
00020     EXPECT_EQ(0, TransferID(0).computeForwardDistance(0));
00021     EXPECT_EQ(1, TransferID(0).computeForwardDistance(1));
00022     EXPECT_EQ(7, TransferID(0).computeForwardDistance(7));
00023 
00024     EXPECT_EQ(0, TransferID(7).computeForwardDistance(7));
00025     EXPECT_EQ(31,TransferID(31).computeForwardDistance(30));
00026     EXPECT_EQ(1, TransferID(31).computeForwardDistance(0));
00027 
00028     EXPECT_EQ(30,TransferID(7).computeForwardDistance(5));
00029     EXPECT_EQ(5, TransferID(0).computeForwardDistance(5));
00030 
00031     /*
00032      * Misc
00033      */
00034     EXPECT_TRUE(TransferID(2) == TransferID(2));
00035     EXPECT_FALSE(TransferID(2) != TransferID(2));
00036     EXPECT_FALSE(TransferID(2) == TransferID(0));
00037     EXPECT_TRUE(TransferID(2) != TransferID(0));
00038 
00039     TransferID tid;
00040     for (int i = 0; i < 999; i++)
00041     {
00042         ASSERT_EQ(i & ((1 << TransferID::BitLen) - 1), tid.get());
00043         const TransferID copy = tid;
00044         tid.increment();
00045         ASSERT_EQ(1, copy.computeForwardDistance(tid));
00046         ASSERT_EQ(31, tid.computeForwardDistance(copy));
00047         ASSERT_EQ(0, tid.computeForwardDistance(tid));
00048     }
00049 }
00050 
00051 
00052 TEST(Transfer, NodeID)
00053 {
00054     uavcan::NodeID nid1(1);
00055     uavcan::NodeID nid127(127);
00056     uavcan::NodeID nid0(0);
00057     uavcan::NodeID nidx;
00058 
00059     ASSERT_TRUE(nid1.isUnicast());
00060     ASSERT_FALSE(nid1.isBroadcast());
00061     ASSERT_TRUE(nid1.isValid());
00062 
00063     ASSERT_TRUE(nid127.isUnicast());
00064     ASSERT_FALSE(nid127.isBroadcast());
00065     ASSERT_TRUE(nid127.isValid());
00066 
00067     ASSERT_FALSE(nid0.isUnicast());
00068     ASSERT_TRUE(nid0.isBroadcast());
00069     ASSERT_TRUE(nid0.isValid());
00070 
00071     ASSERT_FALSE(nidx.isUnicast());
00072     ASSERT_FALSE(nidx.isBroadcast());
00073     ASSERT_FALSE(nidx.isValid());
00074 
00075     /*
00076      * Comparison operators
00077      */
00078     ASSERT_TRUE(nid1 < nid127);
00079     ASSERT_TRUE(nid1 <= nid127);
00080     ASSERT_TRUE(nid0 < nid1);
00081     ASSERT_TRUE(nid0 <= nid1);
00082 
00083     ASSERT_FALSE(nid1 > nid127);
00084     ASSERT_FALSE(nid1 >= nid127);
00085     ASSERT_FALSE(nid0 > nid1);
00086     ASSERT_FALSE(nid0 >= nid1);
00087 
00088     ASSERT_FALSE(nid1 > uavcan::NodeID(1));
00089     ASSERT_TRUE(nid1 >= uavcan::NodeID(1));
00090 
00091     ASSERT_FALSE(nid1 == nid127);
00092     ASSERT_TRUE(nid127 == uavcan::NodeID(127));
00093 }