From 9cad6fbca9d9821c72918248f79505dcc05a6556 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Thu, 21 Mar 2024 20:12:01 +0200 Subject: [PATCH] Add invoke_obj_test --- test/Jamfile | 1 + test/invoke_obj_test.cpp | 57 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 test/invoke_obj_test.cpp diff --git a/test/Jamfile b/test/Jamfile index f4fb748..8620da0 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -30,3 +30,4 @@ run shared_lock_test.cpp ; run shared_lock_test.cpp : : : off : shared_lock_test_nx ; run invoke_fn_test.cpp ; +run invoke_obj_test.cpp ; diff --git a/test/invoke_obj_test.cpp b/test/invoke_obj_test.cpp new file mode 100644 index 0000000..72547a1 --- /dev/null +++ b/test/invoke_obj_test.cpp @@ -0,0 +1,57 @@ +// Copyright 2024 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include + +struct F +{ + int operator()() + { + return -1; + } + + int operator()( int x1 ) noexcept + { + return x1; + } + + int operator()( int x1, int x2 ) const + { + return 10*x1+x2; + } + + int operator()( int x1, int x2, int x3 ) const noexcept + { + return 100*x1 + 10*x2 + x3; + } +}; + +int main() +{ + { + BOOST_TEST_EQ( boost::compat::invoke( F() ), -1 ); + BOOST_TEST_EQ( boost::compat::invoke( F(), 1 ), 1 ); + BOOST_TEST_EQ( boost::compat::invoke( F(), 1, 2 ), 12 ); + BOOST_TEST_EQ( boost::compat::invoke( F(), 1, 2, 3 ), 123 ); + } + + { + F f; + + BOOST_TEST_EQ( boost::compat::invoke( f ), -1 ); + BOOST_TEST_EQ( boost::compat::invoke( f, 1 ), 1 ); + BOOST_TEST_EQ( boost::compat::invoke( f, 1, 2 ), 12 ); + BOOST_TEST_EQ( boost::compat::invoke( f, 1, 2, 3 ), 123 ); + } + + { + F const f = {}; + + BOOST_TEST_EQ( boost::compat::invoke( f, 1, 2 ), 12 ); + BOOST_TEST_EQ( boost::compat::invoke( f, 1, 2, 3 ), 123 ); + } + + return boost::report_errors(); +}