aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg-test/optional.cpp
diff options
context:
space:
mode:
authorras0219 <533828+ras0219@users.noreply.github.com>2021-02-02 15:00:33 -0800
committerGitHub <noreply@github.com>2021-02-02 15:00:33 -0800
commit5793c4bd9f5d3a8e9087d444beba202e753ec4c9 (patch)
treeda656084cd9fd4685d202b8fd24d852ce7185d84 /toolsrc/src/vcpkg-test/optional.cpp
parent3b4a4e4b5cff58ae9af6b46ad63fda71146f6ce4 (diff)
downloadvcpkg-5793c4bd9f5d3a8e9087d444beba202e753ec4c9.tar.gz
vcpkg-5793c4bd9f5d3a8e9087d444beba202e753ec4c9.zip
[vcpkg] Miscellaneous internal improvements extracted from #15424 (#15677)
* [vcpkg] Miscellaneous internal improvements extracted from #15424 * [vcpkg] CR comments * [armadillo] Use vcpkg_from_git() to workaround gitlab missing archive Co-authored-by: Robert Schumacher <roschuma@microsoft.com> Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
Diffstat (limited to 'toolsrc/src/vcpkg-test/optional.cpp')
-rw-r--r--toolsrc/src/vcpkg-test/optional.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/toolsrc/src/vcpkg-test/optional.cpp b/toolsrc/src/vcpkg-test/optional.cpp
index c2656d97e..f18efb359 100644
--- a/toolsrc/src/vcpkg-test/optional.cpp
+++ b/toolsrc/src/vcpkg-test/optional.cpp
@@ -80,6 +80,33 @@ TEST_CASE ("value conversion", "[optional]")
REQUIRE(o_v.get()->size() == 3);
}
+TEST_CASE ("optional.map", "[optional]")
+{
+ using vcpkg::NullOpt;
+ using vcpkg::nullopt;
+ using vcpkg::Optional;
+
+ const Optional<std::unique_ptr<int>> move_only;
+
+ Optional<int*> m = move_only.map([](auto&& p) { return p.get(); });
+ Optional<Optional<int*>> n =
+ move_only.map([](auto&& p) -> Optional<int*> { return p ? Optional<int*>{p.get()} : nullopt; });
+ Optional<NullOpt> o = move_only.map([](auto&&) { return nullopt; });
+
+ Optional<int> five = 5;
+
+ struct MoveTest
+ {
+ int operator()(int&&) { return 1; }
+ int operator()(const int&) { return -1; }
+ } move_test;
+
+ Optional<int> dst = std::move(five).map(move_test);
+ REQUIRE(dst == 1);
+ Optional<int> dst2 = five.map(move_test);
+ REQUIRE(dst2 == -1);
+}
+
TEST_CASE ("common_projection", "[optional]")
{
using vcpkg::Util::common_projection;