From 6a58b03eab0d238092747bcb7515ca0a0c83b906 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 22 Jan 2023 01:15:08 +0200 Subject: [PATCH] Add test/result_value_construct4.cpp. Refs #104. --- test/CMakeLists.txt | 1 + test/Jamfile.v2 | 1 + test/result_value_construct4.cpp | 62 ++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 test/result_value_construct4.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 58ede82..2208684 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -161,3 +161,4 @@ boost_test(TYPE run SOURCES result_value_construct3.cpp) boost_test(TYPE run SOURCES result_error_construct3.cpp) boost_test(TYPE run SOURCES result_emplace.cpp) boost_test(TYPE run SOURCES result_error_construct4.cpp) +boost_test(TYPE run SOURCES result_value_construct4.cpp) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 4da60c4..84d549c 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -191,3 +191,4 @@ run result_value_construct3.cpp : : : $(CPP11) ; run result_error_construct3.cpp : : : $(CPP11) ; run result_emplace.cpp : : : $(CPP11) ; run result_error_construct4.cpp : : : $(CPP11) ; +run result_value_construct4.cpp : : : $(CPP11) ; diff --git a/test/result_value_construct4.cpp b/test/result_value_construct4.cpp new file mode 100644 index 0000000..9c26626 --- /dev/null +++ b/test/result_value_construct4.cpp @@ -0,0 +1,62 @@ +// Copyright 2023 Peter Dimov. +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include + +using namespace boost::system; + +// Tricky mixed construction cases +// https://github.com/boostorg/system/issues/104 +// https://brevzin.github.io//c++/2023/01/18/optional-construction/ + +int main() +{ + { + result r( make_error_code( errc::invalid_argument ) ); + result> r2( r ); + + BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); + } + + { + result r( 5 ); + result> r2( r ); + + BOOST_TEST( r2.has_value() ); + BOOST_TEST( !r2.has_error() ); + + BOOST_TEST_EQ( r2.value(), r ); + } + + { + result const r( make_error_code( errc::invalid_argument ) ); + result> r2( r ); + + BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); + } + + { + result const r( 5 ); + result> r2( r ); + + BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); + } + + { + result r( make_error_code( errc::invalid_argument ) ); + result> r2( std::move( r ) ); + + BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); + } + + { + result r( 5 ); + result> r2( std::move( r ) ); + + BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); + } + + return boost::report_errors(); +}