aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg-test/optional.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src/vcpkg-test/optional.cpp')
-rw-r--r--toolsrc/src/vcpkg-test/optional.cpp39
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());
+}