#include #include #include namespace { struct identity_projection { template const T& operator()(const T& val) noexcept { return val; } }; } TEST_CASE ("equal", "[optional]") { using vcpkg::Optional; CHECK(Optional{} == Optional{}); CHECK_FALSE(Optional{} == Optional{42}); CHECK_FALSE(Optional{42} == Optional{}); CHECK_FALSE(Optional{1729} == Optional{42}); CHECK(Optional{42} == Optional{42}); } TEST_CASE ("common_projection", "[optional]") { using vcpkg::common_projection; std::vector input; CHECK(!common_projection(input, identity_projection{}).has_value()); input.push_back(42); CHECK(common_projection(input, identity_projection{}).value_or_exit(VCPKG_LINE_INFO) == 42); input.push_back(42); CHECK(common_projection(input, identity_projection{}).value_or_exit(VCPKG_LINE_INFO) == 42); input.push_back(1729); CHECK(!common_projection(input, identity_projection{}).has_value()); }