diff options
| author | ras0219 <533828+ras0219@users.noreply.github.com> | 2021-02-02 15:00:33 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-02 15:00:33 -0800 |
| commit | 5793c4bd9f5d3a8e9087d444beba202e753ec4c9 (patch) | |
| tree | da656084cd9fd4685d202b8fd24d852ce7185d84 /toolsrc/src/vcpkg-test/optional.cpp | |
| parent | 3b4a4e4b5cff58ae9af6b46ad63fda71146f6ce4 (diff) | |
| download | vcpkg-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.cpp | 27 |
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; |
