2014-03-11 21:00:28 +04:00

50 lines
1.3 KiB
C++

/*
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
*/
#include <string>
#include <gtest/gtest.h>
#include <uavcan/internal/transport/transfer.hpp>
TEST(Transfer, TransferID)
{
using uavcan::TransferID;
// Tests below are based on this assumption
ASSERT_EQ(8, 1 << TransferID::BitLen);
/*
* forwardDistance()
*/
EXPECT_EQ(0, TransferID(0).forwardDistance(0));
EXPECT_EQ(1, TransferID(0).forwardDistance(1));
EXPECT_EQ(7, TransferID(0).forwardDistance(7));
EXPECT_EQ(0, TransferID(7).forwardDistance(7));
EXPECT_EQ(7, TransferID(7).forwardDistance(6));
EXPECT_EQ(1, TransferID(7).forwardDistance(0));
EXPECT_EQ(7, TransferID(7).forwardDistance(6));
EXPECT_EQ(5, TransferID(0).forwardDistance(5));
/*
* Misc
*/
EXPECT_TRUE(TransferID(2) == TransferID(2));
EXPECT_FALSE(TransferID(2) != TransferID(2));
EXPECT_FALSE(TransferID(2) == TransferID(0));
EXPECT_TRUE(TransferID(2) != TransferID(0));
TransferID tid;
for (int i = 0; i < 999; i++)
{
ASSERT_EQ(i & ((1 << TransferID::BitLen) - 1), tid.get());
const TransferID copy = tid;
tid.increment();
ASSERT_EQ(1, copy.forwardDistance(tid));
ASSERT_EQ(7, tid.forwardDistance(copy));
ASSERT_EQ(0, tid.forwardDistance(tid));
}
}