Squashed 'third_party/boostorg/function/' content from commit feea196
Change-Id: Iaf916451dad887c577d5822d9cf181f90957e080
git-subtree-dir: third_party/boostorg/function
git-subtree-split: feea19660bcac246fc054f0a890415d01e884c4b
diff --git a/test/contains2_test.cpp b/test/contains2_test.cpp
new file mode 100644
index 0000000..cf6d479
--- /dev/null
+++ b/test/contains2_test.cpp
@@ -0,0 +1,88 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2004.
+// Copyright 2005 Peter Dimov
+
+// Use, modification and distribution is subject to
+// the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/function.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+static int forty_two()
+{
+ return 42;
+}
+
+struct Seventeen
+{
+ int operator()() const
+ {
+ return 17;
+ }
+};
+
+bool operator==(const Seventeen&, const Seventeen&)
+{
+ return true;
+}
+
+struct ReturnInt
+{
+ explicit ReturnInt(int value) : value(value)
+ {
+ }
+
+ int operator()() const
+ {
+ return value;
+ }
+
+ int value;
+};
+
+bool operator==(const ReturnInt& x, const ReturnInt& y)
+{
+ return x.value == y.value;
+}
+
+bool operator!=(const ReturnInt& x, const ReturnInt& y)
+{
+ return x.value != y.value;
+}
+
+int main()
+{
+ boost::function0<int> fn;
+
+ fn = &forty_two;
+
+ BOOST_TEST( fn() == 42 );
+
+ BOOST_TEST( fn.contains(&forty_two) );
+ BOOST_TEST( !fn.contains( Seventeen() ) );
+ BOOST_TEST( !fn.contains( ReturnInt(0) ) );
+ BOOST_TEST( !fn.contains( ReturnInt(12) ) );
+
+ fn = Seventeen();
+
+ BOOST_TEST( fn() == 17 );
+
+ BOOST_TEST( !fn.contains( &forty_two ) );
+ BOOST_TEST( fn.contains( Seventeen() ) );
+ BOOST_TEST( !fn.contains( ReturnInt(0) ) );
+ BOOST_TEST( !fn.contains( ReturnInt(12) ) );
+
+ fn = ReturnInt(12);
+
+ BOOST_TEST( fn() == 12 );
+
+ BOOST_TEST( !fn.contains( &forty_two ) );
+ BOOST_TEST( !fn.contains( Seventeen() ) );
+ BOOST_TEST( !fn.contains( ReturnInt(0) ) );
+ BOOST_TEST( fn.contains( ReturnInt(12) ) );
+
+ return boost::report_errors();
+}