autoc 1.2 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -0
  3. data/README +3 -1
  4. data/doc/AutoC.html +23 -7
  5. data/doc/AutoC/Code.html +3 -3
  6. data/doc/AutoC/Collection.html +289 -76
  7. data/doc/AutoC/HashMap.html +44 -46
  8. data/doc/AutoC/HashSet.html +20 -17
  9. data/doc/AutoC/List.html +56 -92
  10. data/doc/AutoC/Module.html +2 -2
  11. data/doc/AutoC/Module/File.html +2 -2
  12. data/doc/AutoC/Module/Header.html +6 -4
  13. data/doc/AutoC/Module/Source.html +26 -26
  14. data/doc/AutoC/Priority.html +2 -2
  15. data/doc/AutoC/Queue.html +30 -92
  16. data/doc/AutoC/Reference.html +217 -61
  17. data/doc/AutoC/String.html +1393 -0
  18. data/doc/AutoC/Type.html +240 -128
  19. data/doc/AutoC/UserDefinedType.html +688 -47
  20. data/doc/AutoC/Vector.html +154 -62
  21. data/doc/_index.html +9 -2
  22. data/doc/class_list.html +1 -1
  23. data/doc/file.CHANGES.html +10 -2
  24. data/doc/file.README.html +5 -3
  25. data/doc/index.html +5 -3
  26. data/doc/method_list.html +235 -97
  27. data/doc/top-level-namespace.html +2 -2
  28. data/lib/autoc.rb +3 -1
  29. data/lib/autoc/code.rb +3 -2
  30. data/lib/autoc/collection.rb +36 -40
  31. data/lib/autoc/collection/hash_map.rb +10 -14
  32. data/lib/autoc/collection/hash_set.rb +12 -11
  33. data/lib/autoc/collection/list.rb +21 -11
  34. data/lib/autoc/collection/queue.rb +5 -8
  35. data/lib/autoc/collection/vector.rb +28 -12
  36. data/lib/autoc/string.rb +492 -0
  37. data/lib/autoc/type.rb +155 -66
  38. data/test/test.rb +157 -35
  39. data/test/test_char_string.rb +270 -0
  40. data/test/test_int_list.rb +35 -0
  41. data/test/test_int_vector.rb +34 -0
  42. data/test/test_value_hash_map.rb +162 -0
  43. data/test/test_value_hash_set.rb +173 -0
  44. data/test/test_value_list.rb +193 -0
  45. data/test/test_value_queue.rb +275 -0
  46. data/test/test_value_vector.rb +155 -0
  47. data/test/value.rb +80 -0
  48. metadata +15 -8
  49. data/test/test.c +0 -1041
  50. data/test/test.h +0 -41
  51. data/test/test_auto.c +0 -3407
  52. data/test/test_auto.h +0 -765
@@ -0,0 +1,173 @@
1
+ require "value"
2
+
3
+ type_test(AutoC::HashSet, :ValueSet, Value) do
4
+
5
+ def write_defs(stream)
6
+ stream << %~
7
+ #undef PUT
8
+ #define PUT(t, v) {#{element.type} e; #{element.ctorEx}(e, v); #{put}(t, e); #{element.dtor}(e);}
9
+ ~
10
+ super
11
+ end
12
+
13
+ setup %~#{type} t;~
14
+ cleanup %~#{dtor}(&t);~
15
+
16
+ test :create, %~
17
+ #{ctor}(&t);
18
+ TEST_EQUAL( #{size}(&t), 0 );
19
+ TEST_TRUE( #{empty}(&t) );
20
+ ~
21
+
22
+ test :purge, %~
23
+ #{ctor}(&t);
24
+ PUT(&t, 0);
25
+ TEST_FALSE( #{empty}(&t) );
26
+ #{purge}(&t);
27
+ TEST_TRUE( #{empty}(&t) );
28
+ ~
29
+
30
+ setup %~
31
+ /* a: [1,2,3], e: 0 */
32
+ #{type} a;
33
+ #{element.type} e;
34
+ #{element.ctor(:e)};
35
+ #{ctor}(&a);
36
+ PUT(&a, 1); PUT(&a, 2); PUT(&a, 3);
37
+ ~
38
+ cleanup %~
39
+ #{dtor}(&a);
40
+ #{element.dtor(:e)};
41
+ ~
42
+
43
+ test :contains, %~
44
+ TEST_FALSE( #{contains}(&a, e) );
45
+ #{element.set}(e, 1);
46
+ TEST_TRUE( #{contains}(&a, e) );
47
+ ~
48
+
49
+ test :get, %~
50
+ #{element.type} e2;
51
+ #{element.set}(e, -1);
52
+ #{put}(&a, e);
53
+ e2 = #{get}(&a, e);
54
+ TEST_TRUE( #{element.equal}(e, e2) );
55
+ #{element.dtor(:e2)};
56
+ ~
57
+
58
+ test :putNew, %~
59
+ #{element.set}(e, -1);
60
+ TEST_FALSE( #{contains}(&a, e) );
61
+ TEST_TRUE( #{put}(&a, e) );
62
+ TEST_TRUE( #{contains}(&a, e) );
63
+ ~
64
+
65
+ test :putExisting, %~
66
+ #{element.set}(e, -1);
67
+ TEST_FALSE( #{contains}(&a, e) );
68
+ TEST_TRUE( #{put}(&a, e) );
69
+ TEST_TRUE( #{contains}(&a, e) );
70
+ TEST_FALSE( #{put}(&a, e) );
71
+ ~
72
+
73
+ test :replace, %~
74
+ #{element.set}(e, 1);
75
+ TEST_TRUE( #{contains}(&a, e) );
76
+ TEST_TRUE( #{replace}(&a, e) );
77
+ TEST_TRUE( #{contains}(&a, e) );
78
+ ~
79
+
80
+ test :replaceNone, %~
81
+ #{element.set}(e, -1);
82
+ TEST_FALSE( #{contains}(&a, e) );
83
+ TEST_FALSE( #{replace}(&a, e) );
84
+ TEST_FALSE( #{contains}(&a, e) );
85
+ ~
86
+
87
+ test :remove, %~
88
+ #{element.set}(e, 1);
89
+ TEST_TRUE( #{contains}(&a, e) );
90
+ TEST_TRUE( #{remove}(&a, e) );
91
+ TEST_FALSE( #{contains}(&a, e) );
92
+ ~
93
+
94
+ test :removeNone, %~
95
+ #{element.set}(e, -1);
96
+ TEST_FALSE( #{contains}(&a, e) );
97
+ TEST_FALSE( #{remove}(&a, e) );
98
+ ~
99
+
100
+ test :iterate, %~
101
+ #{it} it;
102
+ size_t i = 0;
103
+ #{itCtor}(&it, &a);
104
+ while(#{itMove}(&it)) {
105
+ #{element.type} e2 = #{itGet}(&it);
106
+ #{element.dtor(:e2)};
107
+ i++;
108
+ }
109
+ TEST_EQUAL( #{size}(&a), i );
110
+ ~
111
+
112
+ setup %~
113
+ /* a: [1,2,3] */
114
+ #{type} a, b;
115
+ #{ctor}(&a);
116
+ PUT(&a, 1); PUT(&a, 2); PUT(&a, 3);
117
+ ~
118
+ cleanup %~
119
+ #{dtor}(&a);
120
+ #{dtor}(&b);
121
+ ~
122
+
123
+ test :copy, %~
124
+ #{copy}(&b, &a);
125
+ TEST_TRUE( #{equal}(&a, &b) );
126
+ ~
127
+
128
+ test :empty, %~
129
+ #{ctor}(&b);
130
+ TEST_FALSE( #{empty}(&a) );
131
+ TEST_TRUE( #{empty}(&b) );
132
+ ~
133
+
134
+ setup %~
135
+ /* a: [1,2,3], b: [2,3,4] */
136
+ #{type} a, b, c;
137
+ #{ctor}(&a);
138
+ #{ctor}(&b);
139
+ #{ctor}(&c);
140
+ PUT(&a, 1); PUT(&a, 2); PUT(&a, 3);
141
+ PUT(&b, 4); PUT(&b, 2); PUT(&b, 3);
142
+ ~
143
+ cleanup %~
144
+ #{dtor}(&a);
145
+ #{dtor}(&b);
146
+ #{dtor}(&c);
147
+ ~
148
+
149
+ test :exclude, %~
150
+ PUT(&c, 1);
151
+ #{exclude}(&a, &b);
152
+ TEST_TRUE( #{equal}(&a, &c) );
153
+ ~
154
+
155
+ test :include, %~
156
+ PUT(&c, 1); PUT(&c, 2); PUT(&c, 3); PUT(&c, 4);
157
+ #{include}(&a, &b);
158
+ TEST_TRUE( #{equal}(&a, &c) );
159
+ ~
160
+
161
+ test :invert, %~
162
+ PUT(&c, 1); PUT(&c, 4);
163
+ #{invert}(&a, &b);
164
+ TEST_TRUE( #{equal}(&a, &c) );
165
+ ~
166
+
167
+ test :retain, %~
168
+ PUT(&c, 2); PUT(&c, 3);
169
+ #{retain}(&a, &b);
170
+ TEST_TRUE( #{equal}(&a, &c) );
171
+ ~
172
+
173
+ end
@@ -0,0 +1,193 @@
1
+ require "value"
2
+
3
+ type_test(AutoC::List, :ValueList, Value) do
4
+
5
+ setup %~#{type} t;~
6
+ cleanup %~#{dtor}(&t);~
7
+
8
+ test :create, %~
9
+ #{ctor}(&t);
10
+ TEST_EQUAL( #{size}(&t), 0 );
11
+ TEST_TRUE( #{empty}(&t) );
12
+ ~
13
+
14
+ setup %~
15
+ /* [0,1,2] */
16
+ #{type} t;
17
+ #{element.type} e;
18
+ int i, c = 3;
19
+ #{ctor}(&t);
20
+ for(i = 0; i < c; ++i) {
21
+ #{element.ctorEx}(e, i);
22
+ #{push}(&t, e);
23
+ #{element.dtor(:e)};
24
+ }
25
+ ~
26
+ cleanup %~#{dtor}(&t);~
27
+
28
+ test :copy, %~
29
+ #{type} t2;
30
+ #{copy}(&t2, &t);
31
+ TEST_TRUE( #{equal}(&t2, &t) );
32
+ {
33
+ #{it} it;
34
+ #{itCtor}(&it, &t);
35
+ while(#{itMove}(&it)) {
36
+ #{element.get}(e = #{itGet}(&it));
37
+ #{element.dtor(:e)};
38
+ }
39
+ }
40
+ #{dtor}(&t2);
41
+ ~
42
+
43
+ test :iterate, %~
44
+ #{it} it;
45
+ #{itCtor}(&it, &t);
46
+ i = #{size}(&t)-1;
47
+ while(#{itMove}(&it)) {
48
+ e = #{itGet}(&it);
49
+ TEST_EQUAL( #{element.get}(e), i-- );
50
+ #{element.dtor(:e)};
51
+ }
52
+ ~
53
+
54
+ test :purge, %~
55
+ TEST_FALSE( #{empty}(&t) );
56
+ #{purge}(&t);
57
+ TEST_TRUE( #{empty}(&t) );
58
+ ~
59
+
60
+ test :peek, %~
61
+ size_t s1 = #{size}(&t);
62
+ e = #{peek}(&t);
63
+ TEST_EQUAL( #{element.get}(e), 2 );
64
+ #{element.dtor(:e)};
65
+ size_t s2 = #{size}(&t);
66
+ TEST_EQUAL( s1, s2 );
67
+ ~
68
+
69
+ test :pop, %~
70
+ size_t s1 = #{size}(&t);
71
+ e = #{pop}(&t);
72
+ TEST_EQUAL( #{element.get}(e), 2 );
73
+ #{element.dtor(:e)};
74
+ size_t s2 = #{size}(&t);
75
+ TEST_EQUAL( s1-1, s2 );
76
+ ~
77
+
78
+ test :push, %~
79
+ size_t s1 = #{size}(&t);
80
+ #{element.ctorEx}(e, -1);
81
+ #{push}(&t, e);
82
+ #{element.dtor(:e)};
83
+ size_t s2 = #{size}(&t);
84
+ TEST_EQUAL( s1+1, s2 );
85
+ e = #{peek}(&t);
86
+ TEST_EQUAL( #{element.get}(e), -1 );
87
+ #{element.dtor(:e)};
88
+ ~
89
+
90
+ test :contains, %~
91
+ #{element.ctorEx}(e, -1);
92
+ TEST_FALSE( #{contains}(&t, e) );
93
+ #{element.set}(e, 1);
94
+ TEST_TRUE( #{contains}(&t, e) );
95
+ #{element.dtor(:e)};
96
+ ~
97
+
98
+ test :find, %~
99
+ #{element.type} e2;
100
+ #{element.ctorEx}(e, 1);
101
+ e2 = #{find}(&t, e);
102
+ TEST_TRUE( #{element.equal}(e, e2) );
103
+ #{element.dtor(:e)};
104
+ #{element.dtor(:e2)};
105
+ ~
106
+
107
+ setup %~
108
+ /* [0,1,2,0] */
109
+ #{type} t1, t2;
110
+ #{element.type} e;
111
+ int i, c = 3;
112
+ #{ctor}(&t1);
113
+ #{ctor}(&t2);
114
+ TEST_TRUE( #{equal}(&t1, &t2) );
115
+ for(i = 0; i < c; ++i) {
116
+ #{element.ctorEx}(e, i);
117
+ #{push}(&t1, e);
118
+ #{push}(&t2, e);
119
+ #{element.dtor(:e)};
120
+ }
121
+ #{element.ctorEx}(e, 0);
122
+ #{push}(&t1, e);
123
+ #{push}(&t2, e);
124
+ #{element.dtor(:e)};
125
+ TEST_TRUE( #{equal}(&t1, &t2) );
126
+ ~
127
+ cleanup %~
128
+ #{dtor}(&t1);
129
+ #{dtor}(&t2);
130
+ ~
131
+
132
+ test :equal, %~
133
+ TEST_TRUE( #{equal}(&t1, &t2) );
134
+ #{element.ctorEx}(e, -1);
135
+ #{push}(&t2, e);
136
+ #{element.dtor(:e)};
137
+ TEST_FALSE( #{equal}(&t1, &t2) );
138
+ ~
139
+
140
+ test :replaceNone, %~
141
+ #{element.ctorEx}(e, -1);
142
+ TEST_FALSE( #{replace}(&t2, e) );
143
+ TEST_TRUE( #{equal}(&t1, &t2) );
144
+ #{element.dtor(:e)};
145
+ ~
146
+
147
+ test :replaceOne, %~
148
+ #{element.ctorEx}(e, 0);
149
+ TEST_EQUAL( #{replace}(&t2, e), 1 );
150
+ #{element.dtor(:e)};
151
+ ~
152
+
153
+ test :replaceExactOne, %~
154
+ #{element.ctorEx}(e, 0);
155
+ TEST_EQUAL( #{replaceEx}(&t2, e, 1), 1 );
156
+ #{element.dtor(:e)};
157
+ ~
158
+
159
+ test :replaceAll, %~
160
+ #{element.ctorEx}(e, 0);
161
+ TEST_EQUAL( #{replaceAll}(&t2, e), 2 );
162
+ #{element.dtor(:e)};
163
+ ~
164
+
165
+ test :removeNone, %~
166
+ #{element.ctorEx}(e, -1);
167
+ TEST_FALSE( #{remove}(&t2, e) );
168
+ TEST_TRUE( #{equal}(&t1, &t2) );
169
+ #{element.dtor(:e)};
170
+ ~
171
+
172
+ test :removeOne, %~
173
+ #{element.ctorEx}(e, 0);
174
+ TEST_EQUAL( #{remove}(&t2, e), 1 );
175
+ TEST_EQUAL( #{size}(&t1)-1, #{size}(&t2) );
176
+ #{element.dtor(:e)};
177
+ ~
178
+
179
+ test :removeExactOne, %~
180
+ #{element.ctorEx}(e, 0);
181
+ TEST_EQUAL( #{removeEx}(&t2, e, 1), 1 );
182
+ TEST_EQUAL( #{size}(&t1)-1, #{size}(&t2) );
183
+ #{element.dtor(:e)};
184
+ ~
185
+
186
+ test :removeAll, %~
187
+ #{element.ctorEx}(e, 0);
188
+ TEST_EQUAL( #{removeAll}(&t2, e), 2 );
189
+ TEST_EQUAL( #{size}(&t1)-2, #{size}(&t2) );
190
+ #{element.dtor(:e)};
191
+ ~
192
+
193
+ end
@@ -0,0 +1,275 @@
1
+ require "value"
2
+
3
+ type_test(AutoC::Queue, :ValueQueue, Value) do
4
+
5
+ setup %~#{type} t;~
6
+ cleanup %~#{dtor}(&t);~
7
+
8
+ test :create, %~
9
+ #{ctor}(&t);
10
+ TEST_EQUAL( #{size}(&t), 0 );
11
+ TEST_TRUE( #{empty}(&t) );
12
+ ~
13
+
14
+ setup %~
15
+ /* [0,1,2] */
16
+ #{type} t;
17
+ #{element.type} e;
18
+ int i, c = 3;
19
+ #{ctor}(&t);
20
+ for(i = 0; i < c; ++i) {
21
+ #{element.ctorEx}(e, i);
22
+ #{push}(&t, e);
23
+ #{element.dtor(:e)};
24
+ }
25
+ ~
26
+ cleanup %~#{dtor}(&t);~
27
+
28
+ test :copy, %~
29
+ #{type} t2;
30
+ #{copy}(&t2, &t);
31
+ TEST_TRUE( #{equal}(&t2, &t) );
32
+ {
33
+ #{it} it;
34
+ #{itCtor}(&it, &t);
35
+ while(#{itMove}(&it)) {
36
+ #{element.get}(e = #{itGet}(&it));
37
+ #{element.dtor(:e)};
38
+ }
39
+ }
40
+ #{dtor}(&t2);
41
+ ~
42
+
43
+ test :iterateForward, %~
44
+ #{it} it;
45
+ #{itCtor}(&it, &t);
46
+ i = 0;
47
+ while(#{itMove}(&it)) {
48
+ e = #{itGet}(&it);
49
+ TEST_EQUAL( #{element.get}(e), i++ );
50
+ #{element.dtor}(e);
51
+ }
52
+ ~
53
+
54
+ test :iterateExactForward, %~
55
+ #{it} it;
56
+ #{itCtorEx}(&it, &t, 1);
57
+ i = 0;
58
+ while(#{itMove}(&it)) {
59
+ e = #{itGet}(&it);
60
+ TEST_EQUAL( #{element.get}(e), i++ );
61
+ #{element.dtor}(e);
62
+ }
63
+ ~
64
+
65
+ test :iterateBackward, %~
66
+ #{it} it;
67
+ #{itCtorEx}(&it, &t, 0);
68
+ i = #{size}(&t)-1;
69
+ while(#{itMove}(&it)) {
70
+ e = #{itGet}(&it);
71
+ TEST_EQUAL( #{element.get}(e), i-- );
72
+ #{element.dtor(:e)};
73
+ }
74
+ ~
75
+
76
+ test :purge, %~
77
+ TEST_FALSE( #{empty}(&t) );
78
+ #{purge}(&t);
79
+ TEST_TRUE( #{empty}(&t) );
80
+ ~
81
+
82
+ test :peek, %~
83
+ size_t s1 = #{size}(&t);
84
+ e = #{peek}(&t);
85
+ TEST_EQUAL( #{element.get}(e), 0 );
86
+ #{element.dtor(:e)};
87
+ size_t s2 = #{size}(&t);
88
+ TEST_EQUAL( s1, s2 );
89
+ ~
90
+
91
+ test :peekHead, %~
92
+ size_t s1 = #{size}(&t);
93
+ e = #{peekHead}(&t);
94
+ TEST_EQUAL( #{element.get}(e), 0 );
95
+ #{element.dtor(:e)};
96
+ size_t s2 = #{size}(&t);
97
+ TEST_EQUAL( s1, s2 );
98
+ ~
99
+
100
+ test :peekTail, %~
101
+ size_t s1 = #{size}(&t);
102
+ e = #{peekTail}(&t);
103
+ TEST_EQUAL( #{element.get}(e), 2 );
104
+ #{element.dtor(:e)};
105
+ size_t s2 = #{size}(&t);
106
+ TEST_EQUAL( s1, s2 );
107
+ ~
108
+
109
+ test :pop, %~
110
+ size_t s1 = #{size}(&t);
111
+ e = #{pop}(&t);
112
+ TEST_EQUAL( #{element.get}(e), 0 );
113
+ #{element.dtor(:e)};
114
+ size_t s2 = #{size}(&t);
115
+ TEST_EQUAL( s1-1, s2 );
116
+ ~
117
+
118
+ test :popHead, %~
119
+ size_t s1 = #{size}(&t);
120
+ e = #{popHead}(&t);
121
+ TEST_EQUAL( #{element.get}(e), 0 );
122
+ #{element.dtor(:e)};
123
+ size_t s2 = #{size}(&t);
124
+ TEST_EQUAL( s1-1, s2 );
125
+ ~
126
+
127
+ test :popTail, %~
128
+ size_t s1 = #{size}(&t);
129
+ e = #{popTail}(&t);
130
+ TEST_EQUAL( #{element.get}(e), 2 );
131
+ #{element.dtor(:e)};
132
+ size_t s2 = #{size}(&t);
133
+ TEST_EQUAL( s1-1, s2 );
134
+ ~
135
+
136
+ test :push, %~
137
+ size_t s1 = #{size}(&t);
138
+ #{element.ctorEx}(e, -1);
139
+ #{push}(&t, e);
140
+ #{element.dtor(:e)};
141
+ size_t s2 = #{size}(&t);
142
+ TEST_EQUAL( s1+1, s2 );
143
+ e = #{peekTail}(&t);
144
+ TEST_EQUAL( #{element.get}(e), -1 );
145
+ #{element.dtor(:e)};
146
+ ~
147
+
148
+ test :pushTail, %~
149
+ size_t s1 = #{size}(&t);
150
+ #{element.ctorEx}(e, -1);
151
+ #{pushTail}(&t, e);
152
+ #{element.dtor(:e)};
153
+ size_t s2 = #{size}(&t);
154
+ TEST_EQUAL( s1+1, s2 );
155
+ e = #{peekTail}(&t);
156
+ TEST_EQUAL( #{element.get}(e), -1 );
157
+ #{element.dtor(:e)};
158
+ ~
159
+
160
+ test :pushHead, %~
161
+ size_t s1 = #{size}(&t);
162
+ #{element.ctorEx}(e, -1);
163
+ #{pushHead}(&t, e);
164
+ #{element.dtor(:e)};
165
+ size_t s2 = #{size}(&t);
166
+ TEST_EQUAL( s1+1, s2 );
167
+ e = #{peekHead}(&t);
168
+ TEST_EQUAL( #{element.get}(e), -1 );
169
+ #{element.dtor(:e)};
170
+ ~
171
+
172
+ test :contains, %~
173
+ #{element.ctorEx}(e, -1);
174
+ TEST_FALSE( #{contains}(&t, e) );
175
+ #{element.set}(e, 1);
176
+ TEST_TRUE( #{contains}(&t, e) );
177
+ #{element.dtor(:e)};
178
+ ~
179
+
180
+ test :find, %~
181
+ #{element.type} e2;
182
+ #{element.ctorEx}(e, 1);
183
+ e2 = #{find}(&t, e);
184
+ TEST_TRUE( #{element.equal}(e, e2) );
185
+ #{element.dtor(:e)};
186
+ #{element.dtor(:e2)};
187
+ ~
188
+
189
+ setup %~
190
+ /* [0,1,2,0] */
191
+ #{type} t1, t2;
192
+ #{element.type} e;
193
+ int i, c = 3;
194
+ #{ctor}(&t1);
195
+ #{ctor}(&t2);
196
+ TEST_TRUE( #{equal}(&t1, &t2) );
197
+ for(i = 0; i < c; ++i) {
198
+ #{element.ctorEx}(e, i);
199
+ #{push}(&t1, e);
200
+ #{push}(&t2, e);
201
+ #{element.dtor(:e)};
202
+ }
203
+ #{element.ctorEx}(e, 0);
204
+ #{push}(&t1, e);
205
+ #{push}(&t2, e);
206
+ #{element.dtor(:e)};
207
+ TEST_TRUE( #{equal}(&t1, &t2) );
208
+ ~
209
+ cleanup %~
210
+ #{dtor}(&t1);
211
+ #{dtor}(&t2);
212
+ ~
213
+
214
+ test :equal, %~
215
+ TEST_TRUE( #{equal}(&t1, &t2) );
216
+ #{element.ctorEx}(e, -1);
217
+ #{push}(&t2, e);
218
+ #{element.dtor(:e)};
219
+ TEST_FALSE( #{equal}(&t1, &t2) );
220
+ ~
221
+
222
+ test :replaceNone, %~
223
+ #{element.ctorEx}(e, -1);
224
+ TEST_FALSE( #{replace}(&t2, e) );
225
+ TEST_TRUE( #{equal}(&t1, &t2) );
226
+ #{element.dtor(:e)};
227
+ ~
228
+
229
+ test :replaceOne, %~
230
+ #{element.ctorEx}(e, 0);
231
+ TEST_EQUAL( #{replace}(&t2, e), 1 );
232
+ #{element.dtor(:e)};
233
+ ~
234
+
235
+ test :replaceExactOne, %~
236
+ #{element.ctorEx}(e, 0);
237
+ TEST_EQUAL( #{replaceEx}(&t2, e, 1), 1 );
238
+ #{element.dtor(:e)};
239
+ ~
240
+
241
+ test :replaceAll, %~
242
+ #{element.ctorEx}(e, 0);
243
+ TEST_EQUAL( #{replaceAll}(&t2, e), 2 );
244
+ #{element.dtor(:e)};
245
+ ~
246
+
247
+ test :removeNone, %~
248
+ #{element.ctorEx}(e, -1);
249
+ TEST_FALSE( #{remove}(&t2, e) );
250
+ TEST_TRUE( #{equal}(&t1, &t2) );
251
+ #{element.dtor(:e)};
252
+ ~
253
+
254
+ test :removeOne, %~
255
+ #{element.ctorEx}(e, 0);
256
+ TEST_EQUAL( #{remove}(&t2, e), 1 );
257
+ TEST_EQUAL( #{size}(&t1)-1, #{size}(&t2) );
258
+ #{element.dtor(:e)};
259
+ ~
260
+
261
+ test :removeExactOne, %~
262
+ #{element.ctorEx}(e, 0);
263
+ TEST_EQUAL( #{removeEx}(&t2, e, 1), 1 );
264
+ TEST_EQUAL( #{size}(&t1)-1, #{size}(&t2) );
265
+ #{element.dtor(:e)};
266
+ ~
267
+
268
+ test :removeAll, %~
269
+ #{element.ctorEx}(e, 0);
270
+ TEST_EQUAL( #{removeAll}(&t2, e), 2 );
271
+ TEST_EQUAL( #{size}(&t1)-2, #{size}(&t2) );
272
+ #{element.dtor(:e)};
273
+ ~
274
+
275
+ end