/* * 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; } }; struct NonDefaultConstructible { NonDefaultConstructible(int) { } }; 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)); //try_implicit_cast(ConvertibleToBool(true)); // Will fail to compile try_implicit_cast(NonConvertible(), NonDefaultConstructible(64)); }