Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/signals/test/ordering_test.cpp @ 29

Last change on this file since 29 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 2.2 KB
Line 
1// Boost.Signals library
2
3// Copyright Douglas Gregor 2002-2004. Use, modification and
4// distribution is subject to the Boost Software License, Version
5// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7
8// For more information, see http://www.boost.org
9
10#include <boost/test/minimal.hpp>
11#include <boost/signal.hpp>
12#include <iostream>
13#include <vector>
14#include <algorithm>
15#include <cstdlib>
16#include <ctime>
17
18std::vector<int> valuesOutput;
19bool ungrouped1 = false;
20bool ungrouped2 = false;
21bool ungrouped3 = false;
22
23struct emit_int {
24  emit_int(int v) : value(v) {}
25
26  void operator()() const
27  {
28    BOOST_CHECK(value == 42 || (!ungrouped1 && !ungrouped2 && !ungrouped3));
29    valuesOutput.push_back(value);
30    std::cout << value << ' ';
31  }
32
33private:
34  int value;
35};
36
37struct write_ungrouped1 {
38  void operator()() const
39  {
40    BOOST_CHECK(!ungrouped1);
41    ungrouped1 = true;
42    std::cout << "(Ungrouped #1)" << ' ';
43  }
44};
45
46struct write_ungrouped2 {
47  void operator()() const
48  {
49    BOOST_CHECK(!ungrouped2);
50    ungrouped2 = true;
51    std::cout << "(Ungrouped #2)" << ' ';
52  }
53};
54
55struct write_ungrouped3 {
56  void operator()() const
57  {
58    BOOST_CHECK(!ungrouped3);
59    ungrouped3 = true;
60    std::cout << "(Ungrouped #3)" << ' ';
61  }
62};
63
64int test_main(int, char* [])
65{
66  using namespace std;
67  srand(time(0));
68
69  std::vector<int> sortedValues;
70
71  boost::signal0<void> sig;
72  sig.connect(write_ungrouped1());
73  for (int i = 0; i < 100; ++i) {
74#ifdef BOOST_NO_STDC_NAMESPACE
75    int v = rand() % 100;
76#else
77    int v = std::rand() % 100;
78#endif
79    sortedValues.push_back(v);
80    sig.connect(v, emit_int(v));
81
82    if (i == 50) {
83      sig.connect(write_ungrouped2());
84    }
85  }
86  sig.connect(write_ungrouped3());
87
88  std::sort(sortedValues.begin(), sortedValues.end());
89
90  // 17 at beginning, 42 at end
91  sortedValues.insert(sortedValues.begin(), 17);
92  sig.connect(emit_int(17), boost::BOOST_SIGNALS_NAMESPACE::at_front);
93  sortedValues.push_back(42);
94  sig.connect(emit_int(42));
95
96  sig();
97  std::cout << std::endl;
98
99  BOOST_CHECK(valuesOutput == sortedValues);
100  BOOST_CHECK(ungrouped1);
101  BOOST_CHECK(ungrouped2);
102  BOOST_CHECK(ungrouped3);
103  return 0;
104}
Note: See TracBrowser for help on using the repository browser.