Build system improvements
[ustl.git] / bvt / bvt10.cc
blob7c6c55e07e88edfdf3d85edf2c3aa44b1a46cad4
1 // This file is part of the ustl library, an STL implementation.
2 //
3 // Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
4 // This file is free software, distributed under the MIT License.
5 //
7 #include "stdtest.h"
9 template <typename Container>
10 void PrintVector (const Container& ctr)
12 cout << "{";
13 foreach (typename Container::const_iterator, i, ctr)
14 cout << ' ' << *i;
15 cout << " }\n";
18 class A {
19 public:
20 A (int dv = 6) : m_v1 (0), m_v (dv) {}
21 int addsix (int i) { return (i + m_v); }
22 void addsix (int& i) const { i += m_v; }
23 void addtosix (int i) { m_v += i; }
24 inline void text_write (ostringstream& os) const { os << m_v; }
25 public:
26 int m_v1;
27 int m_v;
30 INTEGRAL_STREAMABLE(A)
31 TEXT_STREAMABLE(A)
33 void TestFunctors (void)
35 vector<int> v;
36 v.resize (20);
37 fill (v, 2);
38 foreach (vector<int>::iterator, i, v)
39 *i -= distance(v.begin(), i) & 1;
40 vector<int> v1 (v);
42 cout << "start:\t\t\t";
43 PrintVector (v);
45 v = v1;
46 cout << "plus:\t\t\t";
47 transform (v, v.begin(), v.begin(), plus<int>());
48 PrintVector (v);
50 v = v1;
51 cout << "minus:\t\t\t";
52 transform (v, v.begin(), v.begin(), minus<int>());
53 PrintVector (v);
55 v = v1;
56 cout << "divides:\t\t";
57 transform (v, v.begin(), v.begin(), divides<int>());
58 PrintVector (v);
60 v = v1;
61 cout << "multiplies:\t\t";
62 transform (v, v.begin(), v.begin(), multiplies<int>());
63 PrintVector (v);
65 v = v1;
66 cout << "modulus:\t\t";
67 transform (v, v.begin(), v.begin(), modulus<int>());
68 PrintVector (v);
70 v = v1;
71 cout << "logical_and:\t\t";
72 transform (v, v.begin(), v.begin(), logical_and<int>());
73 PrintVector (v);
75 v = v1;
76 cout << "logical_or:\t\t";
77 transform (v, v.begin(), v.begin(), logical_or<int>());
78 PrintVector (v);
80 v = v1;
81 cout << "equal_to:\t\t";
82 transform (v, v.begin(), v.begin(), equal_to<int>());
83 PrintVector (v);
85 v = v1;
86 cout << "not_equal_to:\t\t";
87 transform (v, v.begin(), v.begin(), not_equal_to<int>());
88 PrintVector (v);
90 v = v1;
91 cout << "greater:\t\t";
92 transform (v, v.begin(), v.begin(), greater<int>());
93 PrintVector (v);
95 v = v1;
96 cout << "less:\t\t\t";
97 transform (v, v.begin(), v.begin(), less<int>());
98 PrintVector (v);
100 v = v1;
101 cout << "greater_equal:\t\t";
102 transform (v, v.begin(), v.begin(), greater_equal<int>());
103 PrintVector (v);
105 v = v1;
106 cout << "less_equal:\t\t";
107 transform (v, v.begin(), v.begin(), less_equal<int>());
108 PrintVector (v);
110 v = v1;
111 cout << "compare:\t\t";
112 transform (v, v.begin(), v.begin(), compare<int>());
113 PrintVector (v);
115 v = v1;
116 cout << "negate:\t\t\t";
117 transform (v, negate<int>());
118 PrintVector (v);
120 v = v1;
121 cout << "logical_not:\t\t";
122 transform (v, logical_not<int>());
123 PrintVector (v);
125 v = v1;
126 cout << "unary_neg(negate):\t";
127 transform (v, unary_negator(negate<int>()));
128 PrintVector (v);
130 v = v1;
131 cout << "binder1st(plus,5):\t";
132 transform (v, bind1st(plus<int>(), 5));
133 PrintVector (v);
135 v = v1;
136 cout << "binder2nd(minus,1):\t";
137 transform (v, bind2nd(minus<int>(), 1));
138 PrintVector (v);
140 v = v1;
141 cout << "compose1(-,+5):\t\t";
142 transform (v, compose1 (negate<int>(), bind2nd(plus<int>(), 5)));
143 PrintVector (v);
145 v = v1;
146 cout << "compose1(-,-4):\t\t";
147 transform (v, compose1 (negate<int>(), bind2nd(minus<int>(), 4)));
148 PrintVector (v);
150 v = v1;
151 cout << "compose2(/,+6,-4):\t";
152 transform (v, compose2 (divides<int>(), bind2nd(plus<int>(), 6), bind2nd(minus<int>(), 4)));
153 PrintVector (v);
155 cout << "mem_var(plus,6):\t";
156 vector<A> av;
157 for (uoff_t i = 0; i < 20; ++ i)
158 av.push_back (A(i));
159 transform (av, mem_var1(&A::m_v, bind2nd(plus<int>(), 6)));
160 PrintVector (av);
162 vector<A>::iterator found = find_if (av, mem_var_equal_to(&A::m_v, 14));
163 cout << "14 found at position " << found - av.begin() << endl;
164 found = lower_bound (av.begin(), av.end(), 18, mem_var_less(&A::m_v));
165 cout << "18 found at position " << found - av.begin() << endl;
167 cout << "add next:\t\t";
168 transform (av.begin(), av.end() - 1, av.begin() + 1, av.begin(), mem_var2(&A::m_v, plus<int>()));
169 PrintVector (av);
172 StdBvtMain (TestFunctors)