diff options
Diffstat (limited to 'toolsrc/src/vcpkg-test/optional.cpp')
| -rw-r--r-- | toolsrc/src/vcpkg-test/optional.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/toolsrc/src/vcpkg-test/optional.cpp b/toolsrc/src/vcpkg-test/optional.cpp new file mode 100644 index 000000000..ce728208f --- /dev/null +++ b/toolsrc/src/vcpkg-test/optional.cpp @@ -0,0 +1,39 @@ +#include <catch2/catch.hpp> +#include <vcpkg/base/optional.h> +#include <vector> + +namespace +{ + struct identity_projection + { + template<class T> + const T& operator()(const T& val) noexcept + { + return val; + } + }; +} + +TEST_CASE ("equal", "[optional]") +{ + using vcpkg::Optional; + + CHECK(Optional<int>{} == Optional<int>{}); + CHECK(!(Optional<int>{} == Optional<int>{42})); + CHECK(!(Optional<int>{42} == Optional<int>{})); + CHECK(!(Optional<int>{1729} == Optional<int>{42})); + CHECK(Optional<int>{42} == Optional<int>{42}); +} + +TEST_CASE ("common_projection", "[optional]") +{ + using vcpkg::common_projection; + std::vector<int> 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()); +} |
