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)); +}