Tests for try_implicit_cast<>()

This commit is contained in:
Pavel Kirienko
2014-03-09 14:04:11 +04:00
parent 1659b5c476
commit 6a2eb3b852
+33
View File
@@ -0,0 +1,33 @@
/*
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
*/
#include <gtest/gtest.h>
#include <uavcan/internal/util.hpp>
struct NonConvertible { };
struct ConvertibleToBool
{
const bool value;
ConvertibleToBool(bool value) : value(value) { }
operator bool() const { return value; }
bool operator!() const { return !value; }
};
TEST(Util, TryImplicitCast)
{
using uavcan::try_implicit_cast;
ASSERT_FALSE(try_implicit_cast<bool>(NonConvertible()));
ASSERT_TRUE(try_implicit_cast<bool>(NonConvertible(), true));
ASSERT_EQ(0, try_implicit_cast<long>(NonConvertible()));
ASSERT_EQ(9000, try_implicit_cast<long>(NonConvertible(), 9000));
ASSERT_TRUE(try_implicit_cast<bool>(ConvertibleToBool(true)));
ASSERT_TRUE(try_implicit_cast<bool>(ConvertibleToBool(true), false));
ASSERT_FALSE(try_implicit_cast<bool>(ConvertibleToBool(false)));
ASSERT_FALSE(try_implicit_cast<bool>(ConvertibleToBool(false), true));
ASSERT_EQ(1, try_implicit_cast<long>(ConvertibleToBool(true)));
ASSERT_EQ(0, try_implicit_cast<long>(ConvertibleToBool(false), -100));
}