From 6a2eb3b852ff1c4701813266d531dc2a14b74bef Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Sun, 9 Mar 2014 14:04:11 +0400 Subject: [PATCH] Tests for try_implicit_cast<>() --- libuavcan/test/util.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 libuavcan/test/util.cpp diff --git a/libuavcan/test/util.cpp b/libuavcan/test/util.cpp new file mode 100644 index 0000000000..76aa2fa20a --- /dev/null +++ b/libuavcan/test/util.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2014 Pavel Kirienko + */ + +#include +#include + +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(NonConvertible())); + ASSERT_TRUE(try_implicit_cast(NonConvertible(), true)); + + ASSERT_EQ(0, try_implicit_cast(NonConvertible())); + ASSERT_EQ(9000, try_implicit_cast(NonConvertible(), 9000)); + + ASSERT_TRUE(try_implicit_cast(ConvertibleToBool(true))); + ASSERT_TRUE(try_implicit_cast(ConvertibleToBool(true), false)); + ASSERT_FALSE(try_implicit_cast(ConvertibleToBool(false))); + ASSERT_FALSE(try_implicit_cast(ConvertibleToBool(false), true)); + ASSERT_EQ(1, try_implicit_cast(ConvertibleToBool(true))); + ASSERT_EQ(0, try_implicit_cast(ConvertibleToBool(false), -100)); +}