// Copyright 2017, 2021 Peter Dimov. // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include #include using namespace boost::system; struct X { int v_; explicit X( int v = 0 ): v_( v ) {} X( X const& ) = default; X& operator=( X const& ) = delete; }; int main() { { result r; BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error(), error_code() ); } { result const r; BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error(), error_code() ); } { BOOST_TEST( result().has_value() ); BOOST_TEST( !result().has_error() ); BOOST_TEST_EQ( result().error(), error_code() ); } { result r( 1 ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error(), error_code() ); } { result const r( 1 ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error(), error_code() ); } { BOOST_TEST( result( 1 ).has_value() ); BOOST_TEST( !result( 1 ).has_error() ); BOOST_TEST_EQ( result( 1 ).error(), error_code() ); } { auto ec = make_error_code( errc::invalid_argument ); result r( ec ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( r.error(), ec ); } { auto ec = make_error_code( errc::invalid_argument ); result const r( ec ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( r.error(), ec ); } { auto ec = make_error_code( errc::invalid_argument ); BOOST_TEST( !result( ec ).has_value() ); BOOST_TEST( result( ec ).has_error() ); BOOST_TEST_EQ( result( ec ).error(), ec ); } { result r( 1 ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( r.error().v_, 1 ); } { result const r( 1 ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( r.error().v_, 1 ); } { BOOST_TEST(( !result( 1 ).has_value() )); BOOST_TEST(( result( 1 ).has_error() )); BOOST_TEST_EQ( (result( 1 ).error().v_), 1 ); } { result r( "s" ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error().v_, 0 ); } { result const r( "s" ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error().v_, 0 ); } { BOOST_TEST(( result( "s" ).has_value() )); BOOST_TEST(( !result( "s" ).has_error() )); BOOST_TEST_EQ( (result( "s" ).error().v_), 0 ); } // { result r; BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error(), error_code() ); } { result const r; BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error(), error_code() ); } { BOOST_TEST( result().has_value() ); BOOST_TEST( !result().has_error() ); BOOST_TEST_EQ( result().error(), error_code() ); } { auto ec = make_error_code( errc::invalid_argument ); result r( ec ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( r.error(), ec ); } { auto ec = make_error_code( errc::invalid_argument ); result const r( ec ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( r.error(), ec ); } { auto ec = make_error_code( errc::invalid_argument ); BOOST_TEST( !result( ec ).has_value() ); BOOST_TEST( result( ec ).has_error() ); BOOST_TEST_EQ( result( ec ).error(), ec ); } // { int x1 = 1; result r( x1 ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error(), error_code() ); } { int x1 = 1; result const r( x1 ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( r.error(), error_code() ); } { int x1 = 1; BOOST_TEST( result( x1 ).has_value() ); BOOST_TEST( !result( x1 ).has_error() ); BOOST_TEST_EQ( result( x1 ).error(), error_code() ); } { auto ec = make_error_code( errc::invalid_argument ); result r( ec ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( r.error(), ec ); } { auto ec = make_error_code( errc::invalid_argument ); result const r( ec ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( r.error(), ec ); } { auto ec = make_error_code( errc::invalid_argument ); BOOST_TEST( !result( ec ).has_value() ); BOOST_TEST( result( ec ).has_error() ); BOOST_TEST_EQ( result( ec ).error(), ec ); } // return boost::report_errors(); }