Imported Upstream version 2.99.2
[platform/upstream/libsigc++.git] / tests / test_accum_iter.cc
1 #include "testutilities.h"
2 #include <sigc++/sigc++.h>
3 #include <sstream>
4 #include <algorithm>
5 #include <functional>
6 #include <cstdlib>
7
8 namespace
9 {
10 std::ostringstream result_stream;
11
12 int ident(int i)
13 {
14   return i;
15 }
16
17 template<typename T>
18 struct min_accum
19 {
20   using result_type = T;
21
22   template<class I>
23   typename std::iterator_traits<I>::value_type operator()(I i1, I i2)
24   {
25     return *std::min_element(i1, i2);
26   }
27 };
28
29 } // end anonymous namespace
30
31 int main(int argc, char* argv[])
32 {
33   auto util = TestUtilities::get_instance();
34
35   if (!util->check_command_args(argc, argv))
36     return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
37
38   sigc::signal<int()>::accumulated<min_accum<int>> signal;
39
40   signal.connect(sigc::bind(sigc::ptr_fun(ident), 3));
41   signal.connect(sigc::bind(sigc::ptr_fun(ident), 1));
42   signal.connect(sigc::bind(sigc::ptr_fun(ident), 42));
43
44   result_stream << signal();
45   util->check_result(result_stream, "1");
46
47   return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
48 }