OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [language/] [cxx/] [ustl/] [current/] [tests/] [bvt10.cpp] - Blame information for rev 819

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.