6 #include "library/directory.hpp"
9 uint64_t get_file_size(const std::string
& filename
)
11 uintmax_t size
= directory::size(filename
);
12 if(size
== static_cast<uintmax_t>(-1))
20 std::function
<bool()> run
;
23 struct test tests
[] = {
24 {"instance default ctor", []() {
25 rrdata_set::instance i
;
26 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000000";
27 }},{"instance bytes ctor", []() {
28 uint8_t buf
[32] = {0};
30 rrdata_set::instance
i(buf
);
31 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000100";
32 }},{"instance string ctor #1", []() {
33 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000763234676");
34 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000763234676";
35 }},{"instance string ctor #2", []() {
36 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000763afba76");
37 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000763AFBA76";
38 }},{"instance string ctor #3", []() {
39 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000763AFBA76");
40 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000763AFBA76";
42 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000000");
43 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000000");
46 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000000");
47 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000001");
50 rrdata_set::instance
i1("00000000000000000000000000000000000000000000000000000000000000FF");
51 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000100");
54 rrdata_set::instance
i1("00000000000000000000000000000000000000000000000000000000000000FF");
55 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000100");
58 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000001");
59 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000001");
62 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000001");
63 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000101");
66 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000001");
67 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000000");
69 }},{"post-++ #1", []() {
70 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000000");
72 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000001";
73 }},{"post-++ #2", []() {
74 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000001");
76 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000002";
77 }},{"post-++ #3", []() {
78 rrdata_set::instance
i("000000000000000000000000000000000000000000000000000000000000000F");
80 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000010";
81 }},{"post-++ #4", []() {
82 rrdata_set::instance
i("00000000000000000000000000000000000000000000000000000000000000FF");
84 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000100";
85 }},{"post-++ #5", []() {
86 rrdata_set::instance
i("000000000000000000000000000000000000000000000000000000000000FFFF");
88 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000010000";
89 }},{"post-++ #6", []() {
90 rrdata_set::instance
i("000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF");
92 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000010000000000000000";
93 }},{"post-++ #7", []() {
94 rrdata_set::instance
i("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
96 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000000";
97 }},{"post-++ #8", []() {
98 rrdata_set::instance
i("00000000000000000000000000000000000000000000000000000000000000FE");
100 return (stringfmt() << i
).str() == "00000000000000000000000000000000000000000000000000000000000000FF";
101 }},{"pre-++ #1", []() {
102 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000000");
104 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000001";
105 }},{"pre-++ #2", []() {
106 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000001");
108 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000002";
109 }},{"pre-++ #3", []() {
110 rrdata_set::instance
i("000000000000000000000000000000000000000000000000000000000000000F");
112 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000010";
113 }},{"pre-++ #4", []() {
114 rrdata_set::instance
i("00000000000000000000000000000000000000000000000000000000000000FF");
116 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000100";
117 }},{"pre-++ #5", []() {
118 rrdata_set::instance
i("000000000000000000000000000000000000000000000000000000000000FFFF");
120 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000010000";
121 }},{"pre-++ #6", []() {
122 rrdata_set::instance
i("000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF");
124 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000010000000000000000";
125 }},{"pre-++ #7", []() {
126 rrdata_set::instance
i("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
128 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000000";
129 }},{"pre-++ #8", []() {
130 rrdata_set::instance
i("00000000000000000000000000000000000000000000000000000000000000FE");
132 return (stringfmt() << i
).str() == "00000000000000000000000000000000000000000000000000000000000000FF";
133 }},{"Operator+ #1", []() {
134 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000000");
136 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000012";
137 }},{"Operator+ #2", []() {
138 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000000");
140 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000001234";
141 }},{"Operator+ #3", []() {
142 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000001");
144 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000000100";
145 }},{"Operator+ #4", []() {
146 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000001");
148 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000010000";
149 }},{"Operator+ #4", []() {
150 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000102");
152 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000000010001";
153 }},{"Operator+ #4", []() {
154 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000002");
156 return (stringfmt() << i
).str() == "0000000000000000000000000000000000000000000000000000000100000001";
157 }},{"Operator- #1", []() {
158 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000002");
159 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000002");
160 return (i1
- i2
) == 0;
161 }},{"Operator- #2", []() {
162 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000001");
163 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000002");
164 return (i1
- i2
) == std::numeric_limits
<unsigned>::max();
165 }},{"Operator- #3", []() {
166 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000002");
167 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000001");
168 return (i1
- i2
) == 1;
169 }},{"Operator- #4", []() {
170 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000001");
171 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000007");
172 return (i1
- i2
) == std::numeric_limits
<unsigned>::max();
173 }},{"Operator- #5", []() {
174 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000236");
175 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000123");
176 return (i1
- i2
) == 0x113;
177 }},{"Operator- #6", []() {
178 rrdata_set::instance
i1("00000000000000000000000000000000000000000000000000000000FFFFFFFE");
179 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000000");
180 return (i1
- i2
) == 0xFFFFFFFEU
;
181 }},{"Operator- #7", []() {
182 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000100000000");
183 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000002");
184 return (i1
- i2
) == 0xFFFFFFFEU
;
185 }},{"Operator- #8", []() {
186 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000001000000001");
187 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000002");
188 return (i1
- i2
) == 0xFFFFFFFFU
;
189 }},{"Operator- #9", []() {
190 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000000");
191 rrdata_set::instance
i2("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
192 return (i1
- i2
) == 1;
193 }},{"rrdata init", []() {
195 return s
.debug_dump() == "0[]";
196 }},{"rrdata add", []() {
197 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000002");
201 return s
.debug_dump() == "1[{0000000000000000000000000000000000000000000000000000000000000002,"
202 "0000000000000000000000000000000000000000000000000000000000000003}]";
203 }},{"rrdata add disjoint", []() {
204 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000002");
205 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000004");
211 return s
.debug_dump() == "2[{0000000000000000000000000000000000000000000000000000000000000002,"
212 "0000000000000000000000000000000000000000000000000000000000000003}{"
213 "0000000000000000000000000000000000000000000000000000000000000004,"
214 "0000000000000000000000000000000000000000000000000000000000000005}]";
215 }},{"rrdata add again", []() {
216 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000002");
222 return s
.debug_dump() == "1[{0000000000000000000000000000000000000000000000000000000000000002,"
223 "0000000000000000000000000000000000000000000000000000000000000003}]";
224 }},{"rrdata extend range low", []() {
225 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000000");
226 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000001");
227 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000004");
230 if(!s
.debug_add(i
)) {
231 std::cout
<< "Collides..." << std::flush
;
234 if(s
.debug_dump() == "4[{0000000000000000000000000000000000000000000000000000000000000000,"
235 "0000000000000000000000000000000000000000000000000000000000000004}]")
237 std::cout
<< s
.debug_dump() << "..." << std::flush
;
239 }},{"rrdata extend range high", []() {
240 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000004");
241 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000001");
242 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000004");
247 return s
.debug_dump() == "4[{0000000000000000000000000000000000000000000000000000000000000001,"
248 "0000000000000000000000000000000000000000000000000000000000000005}]";
249 }},{"rrdata add again (range)", []() {
250 rrdata_set::instance
i("0000000000000000000000000000000000000000000000000000000000000002");
251 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000001");
252 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000004");
257 return s
.debug_dump() == "3[{0000000000000000000000000000000000000000000000000000000000000001,"
258 "0000000000000000000000000000000000000000000000000000000000000004}]";
259 }},{"rrdata partial overlap (previous)", []() {
260 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
261 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000009");
262 rrdata_set::instance
i3("0000000000000000000000000000000000000000000000000000000000000007");
263 rrdata_set::instance
i4("000000000000000000000000000000000000000000000000000000000000000F");
267 return s
.debug_dump() == "10[{0000000000000000000000000000000000000000000000000000000000000005,"
268 "000000000000000000000000000000000000000000000000000000000000000F}]";
269 }},{"rrdata bridging add", []() {
270 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
271 rrdata_set::instance
i2("000000000000000000000000000000000000000000000000000000000000000A");
272 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000B");
273 rrdata_set::instance
i4("000000000000000000000000000000000000000000000000000000000000000F");
274 rrdata_set::instance
i5("000000000000000000000000000000000000000000000000000000000000000A");
279 return s
.debug_dump() == "10[{0000000000000000000000000000000000000000000000000000000000000005,"
280 "000000000000000000000000000000000000000000000000000000000000000F}]";
281 }},{"rrdata bridging add #2", []() {
282 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
283 rrdata_set::instance
i2("000000000000000000000000000000000000000000000000000000000000000A");
284 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000B");
285 rrdata_set::instance
i4("000000000000000000000000000000000000000000000000000000000000000F");
286 rrdata_set::instance
i5("0000000000000000000000000000000000000000000000000000000000000008");
287 rrdata_set::instance
i6("000000000000000000000000000000000000000000000000000000000000000D");
292 return s
.debug_dump() == "10[{0000000000000000000000000000000000000000000000000000000000000005,"
293 "000000000000000000000000000000000000000000000000000000000000000F}]";
294 }},{"rrdata discontinuous reverse", []() {
295 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
296 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000009");
297 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
298 rrdata_set::instance
i4("000000000000000000000000000000000000000000000000000000000000000F");
302 return s
.debug_dump() == "9[{0000000000000000000000000000000000000000000000000000000000000005,"
303 "0000000000000000000000000000000000000000000000000000000000000009}{"
304 "000000000000000000000000000000000000000000000000000000000000000A,"
305 "000000000000000000000000000000000000000000000000000000000000000F}]";
306 }},{"rrdata elide next #1", []() {
307 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
308 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000010");
309 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
310 rrdata_set::instance
i4("000000000000000000000000000000000000000000000000000000000000000F");
314 return s
.debug_dump() == "11[{0000000000000000000000000000000000000000000000000000000000000005,"
315 "0000000000000000000000000000000000000000000000000000000000000010}]";
316 }},{"rrdata elide next #2", []() {
317 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
318 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000010");
319 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
320 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000010");
324 return s
.debug_dump() == "11[{0000000000000000000000000000000000000000000000000000000000000005,"
325 "0000000000000000000000000000000000000000000000000000000000000010}]";
326 }},{"rrdata elide next multiple", []() {
327 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
328 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000050");
329 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
330 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000014");
331 rrdata_set::instance
i5("0000000000000000000000000000000000000000000000000000000000000020");
332 rrdata_set::instance
i6("000000000000000000000000000000000000000000000000000000000000002F");
337 return s
.debug_dump() == "75[{0000000000000000000000000000000000000000000000000000000000000005,"
338 "0000000000000000000000000000000000000000000000000000000000000050}]";
339 }},{"rrdata elide next multiple (OOR)", []() {
340 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
341 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000050");
342 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
343 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000014");
344 rrdata_set::instance
i5("0000000000000000000000000000000000000000000000000000000000000020");
345 rrdata_set::instance
i6("000000000000000000000000000000000000000000000000000000000000002F");
346 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000060");
347 rrdata_set::instance
i8("0000000000000000000000000000000000000000000000000000000000000070");
353 return s
.debug_dump() == "91[{0000000000000000000000000000000000000000000000000000000000000005,"
354 "0000000000000000000000000000000000000000000000000000000000000050}{"
355 "0000000000000000000000000000000000000000000000000000000000000060,"
356 "0000000000000000000000000000000000000000000000000000000000000070}]";
357 }},{"rrdata elide next onehalf", []() {
358 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
359 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000050");
360 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
361 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000014");
362 rrdata_set::instance
i5("0000000000000000000000000000000000000000000000000000000000000020");
363 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
368 return s
.debug_dump() == "80[{0000000000000000000000000000000000000000000000000000000000000005,"
369 "0000000000000000000000000000000000000000000000000000000000000055}]";
370 }},{"rrdata elide next onehalf (OOR)", []() {
371 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
372 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000050");
373 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
374 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000014");
375 rrdata_set::instance
i5("0000000000000000000000000000000000000000000000000000000000000020");
376 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
377 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000056");
378 rrdata_set::instance
i8("0000000000000000000000000000000000000000000000000000000000000057");
384 return s
.debug_dump() == "81[{0000000000000000000000000000000000000000000000000000000000000005,"
385 "0000000000000000000000000000000000000000000000000000000000000055}{"
386 "0000000000000000000000000000000000000000000000000000000000000056,"
387 "0000000000000000000000000000000000000000000000000000000000000057}]";
388 }},{"rrdata elide next onehalf and prev", []() {
389 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
390 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000050");
391 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
392 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000014");
393 rrdata_set::instance
i5("0000000000000000000000000000000000000000000000000000000000000020");
394 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
395 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000001");
396 rrdata_set::instance
i8("0000000000000000000000000000000000000000000000000000000000000006");
402 return s
.debug_dump() == "84[{0000000000000000000000000000000000000000000000000000000000000001,"
403 "0000000000000000000000000000000000000000000000000000000000000055}]";
404 }},{"rrdata elide next onehalf and prev (exact)", []() {
405 rrdata_set::instance
i1("0000000000000000000000000000000000000000000000000000000000000005");
406 rrdata_set::instance
i2("0000000000000000000000000000000000000000000000000000000000000050");
407 rrdata_set::instance
i3("000000000000000000000000000000000000000000000000000000000000000A");
408 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000014");
409 rrdata_set::instance
i5("0000000000000000000000000000000000000000000000000000000000000020");
410 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
411 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000001");
412 rrdata_set::instance
i8("0000000000000000000000000000000000000000000000000000000000000005");
418 return s
.debug_dump() == "84[{0000000000000000000000000000000000000000000000000000000000000001,"
419 "0000000000000000000000000000000000000000000000000000000000000055}]";
420 }},{"In set (empty set, empty data)", []() {
422 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
423 return s
.debug_in_set(i6
, i6
);
424 }},{"In set (non empty set, empty data)", []() {
426 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
427 return !s
.debug_in_set(i6
);
428 }},{"In set (empty set, non empty data)", []() {
430 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
431 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000058");
433 return s
.debug_in_set(i7
, i7
);
434 }},{"In set (match)", []() {
436 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
438 return s
.debug_in_set(i6
);
439 }},{"In set (adjacent low)", []() {
441 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
442 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000056");
444 return !s
.debug_in_set(i6
);
445 }},{"In set (adjacent)", []() {
447 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
448 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000056");
450 return !s
.debug_in_set(i7
);
451 }},{"In set (match to larger)", []() {
453 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
454 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000059");
455 rrdata_set::instance
i8("0000000000000000000000000000000000000000000000000000000000000056");
457 return s
.debug_in_set(i8
);
458 }},{"In set (match to larger, exact end)", []() {
460 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
461 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000059");
462 rrdata_set::instance
i8("0000000000000000000000000000000000000000000000000000000000000058");
464 return s
.debug_in_set(i8
);
465 }},{"In set (match to larger, multiple)", []() {
467 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000045");
468 rrdata_set::instance
i5("0000000000000000000000000000000000000000000000000000000000000049");
469 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000055");
470 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000059");
471 rrdata_set::instance
i8("0000000000000000000000000000000000000000000000000000000000000046");
474 return s
.debug_in_set(i8
);
475 }},{"In set (split)", []() {
477 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000045");
478 rrdata_set::instance
i5("000000000000000000000000000000000000000000000000000000000000004F");
479 rrdata_set::instance
i6("0000000000000000000000000000000000000000000000000000000000000050");
480 rrdata_set::instance
i7("0000000000000000000000000000000000000000000000000000000000000059");
481 rrdata_set::instance
i8("0000000000000000000000000000000000000000000000000000000000000046");
482 rrdata_set::instance
i9("0000000000000000000000000000000000000000000000000000000000000053");
485 return !s
.debug_in_set(i8
, i9
);
486 }},{"Set internal, add internal", []() {
488 rrdata_set::instance
i4("0000000000000000000000000000000000000000000000000000000000000045");
491 return s
.debug_dump() == "1[{0000000000000000000000000000000000000000000000000000000000000045,"
492 "0000000000000000000000000000000000000000000000000000000000000046}]";
493 }},{"Empty count", []() {
495 return s
.count() == 0;
496 }},{"count 1 node", []() {
499 return s
.count() == 0;
500 }},{"count 2 node", []() {
504 return s
.count() == 1;
505 }},{"count 3 node", []() {
510 return s
.count() == 2;
511 }},{"Count rrdata #1", []() {
513 std::vector
<char> data
;
514 return s
.count(data
) == 0;
515 }},{"Count rrdata #2", []() {
517 char _data
[] = {0x1F,0x00};
518 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
519 return s
.count(data
) == 0;
520 }},{"Count rrdata #2", []() {
522 char _data
[] = {0x1F,0x00,0x1F,0x02};
523 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
524 return s
.count(data
) == 1;
525 }},{"Count rrdata #3", []() {
527 char _data
[] = {0x3F,0x01,0x07,0x1F,0x12};
528 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
529 return s
.count(data
) == 9;
530 }},{"Count rrdata #4", []() {
532 char _data
[] = {0x5F,0x01,0x07,0x45,0x1F,-1};
533 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
534 return s
.count(data
) == 0x847;
535 }},{"Count rrdata #5", []() {
537 char _data
[] = {0x7F,0x01,0x07,0x45,0x14,0x1F,-1};
538 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
539 return s
.count(data
) == 0x84616;
540 }},{"read rrdata #1", []() {
542 char _data
[] = {0x7F,0x01,0x07,0x45,0x14,0x1F,-1,0x1F,0x00};
543 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
545 std::string ans
= "542232[{0000000000000000000000000000000000000000000000000000000000000001,"
546 "0000000000000000000000000000000000000000000000000000000000084617}{"
547 "00000000000000000000000000000000000000000000000000000000000846FF,"
548 "0000000000000000000000000000000000000000000000000000000000084701}]";
549 return s
.debug_dump() == ans
;
550 }},{"read/write rrdata #1", []() {
552 char _data
[] = {0x7F,0x01,0x07,0x45,0x14,0x1F,-1,0x1F,0x00};
553 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
555 std::vector
<char> data2
;
556 if(s
.write(data2
) != 0x84617)
558 char _data2
[] = {0x7F,0x01,0x07,0x45,0x14,0x3F,-1,0x00};
559 return sizeof(_data2
) == data2
.size() && !memcmp(_data2
, &data2
[0], min(sizeof(_data2
),
561 }},{"Write blank", []() {
563 std::vector
<char> data2
;
566 return data2
.size() == 0;
567 }},{"Write oversize rrdata run", []() {
569 rrdata_set::instance i
;
570 s
.debug_add(i
,i
+ 0x2000000);
571 std::vector
<char> data2
;
572 if(s
.write(data2
) != 0x1FFFFFF)
574 char _data2
[] = {0x7F,0x00,-1,-1,-1,0x7F,0x01,-3,-3,-3};
575 return sizeof(_data2
) == data2
.size() && !memcmp(_data2
, &data2
[0], min(sizeof(_data2
),
577 }},{"Decode split", []() {
579 char _data
[] = {0x7F,0x00,-1,-1,-1,0x7F,0x01,-3,-3,-3};
580 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
582 std::string ans
= "33554432[{0000000000000000000000000000000000000000000000000000000000000000,"
583 "0000000000000000000000000000000000000000000000000000000002000000}]";
584 return s
.debug_dump() == ans
;
585 }},{"Write 0-byte length", []() {
587 rrdata_set::instance i
;
589 std::vector
<char> data2
;
590 if(s
.write(data2
) != 0)
592 char _data2
[] = {0x1F,0x00};
593 return sizeof(_data2
) == data2
.size() && !memcmp(_data2
, &data2
[0], min(sizeof(_data2
),
595 }},{"Write 1-byte length", []() {
597 rrdata_set::instance i
;
598 s
.debug_add(i
,i
+ 0x100);
599 std::vector
<char> data2
;
600 if(s
.write(data2
) != 0xFF)
602 char _data2
[] = {0x3F,0x00,-2};
603 return sizeof(_data2
) == data2
.size() && !memcmp(_data2
, &data2
[0], min(sizeof(_data2
),
605 }},{"Write 2-byte length", []() {
607 rrdata_set::instance i
;
608 s
.debug_add(i
,i
+ 0x10000);
609 std::vector
<char> data2
;
610 if(s
.write(data2
) != 0xFFFF)
612 char _data2
[] = {0x5F,0x00,-2,-2};
613 return sizeof(_data2
) == data2
.size() && !memcmp(_data2
, &data2
[0], min(sizeof(_data2
),
615 }},{"Write 2-byte length #2", []() {
617 rrdata_set::instance i
;
618 s
.debug_add(i
+ 0x1424,i
+ 0x11425);
619 std::vector
<char> data2
;
620 if(s
.write(data2
) != 0x10000)
622 char _data2
[] = {0x5E,0x14, 0x24,-2,-1};
623 return sizeof(_data2
) == data2
.size() && !memcmp(_data2
, &data2
[0], min(sizeof(_data2
),
625 }},{"Basic rrdata with backing file", []() {
628 s
.read_base("foo.tmp", false);
629 s
.set_internal(rrdata_set::instance(
630 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD0A"));
631 if(get_file_size("foo.tmp") != 0)
634 if(get_file_size("foo.tmp") != 32)
637 if(get_file_size("foo.tmp") != 64)
640 if(get_file_size("foo.tmp") != 96)
643 if(get_file_size("foo.tmp") != 128)
646 if(get_file_size("foo.tmp") != 160)
649 }},{"Reopen backing file", []() {
652 s
.read_base("foo.tmp", false);
653 s
.set_internal(rrdata_set::instance(
654 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD0A"));
655 if(get_file_size("foo.tmp") != 0)
658 if(get_file_size("foo.tmp") != 32)
661 s
.read_base("foo.tmp", false);
663 if(get_file_size("foo.tmp") != 64)
666 }},{"Close with no project", []() {
671 }},{"Switch to self", []() {
674 s
.read_base("foo.tmp", false);
675 s
.set_internal(rrdata_set::instance(
676 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD0A"));
678 s
.read_base("foo.tmp", false);
680 return s
.count() == 1;
681 }},{"Switch to another", []() {
685 s
.read_base("foo.tmp", false);
686 s
.set_internal(rrdata_set::instance(
687 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD0A"));
689 s
.read_base("foo2.tmp", false);
692 //std::cerr << s.debug_dump() << std::endl;
693 return s
.count() == 1;
694 }},{"Lazy mode", []() {
697 s
.read_base("foo.tmp", true);
698 s
.set_internal(rrdata_set::instance(
699 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD0A"));
702 s
.read_base("foo.tmp", false);
705 if(get_file_size("foo.tmp") != 128)
707 return s
.count() == 3;
708 }},{"Lazy mode with previous file", []() {
712 s
.read_base("foo2.tmp", false);
713 s
.read_base("foo.tmp", true);
714 s
.set_internal(rrdata_set::instance(
715 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD0A"));
718 s
.read_base("foo.tmp", false);
721 if(get_file_size("foo.tmp") != 128)
723 return s
.count() == 3;
724 }},{"Reading a file", []() {
727 s
.read_base("foo.tmp", false);
728 char _data
[] = {0x3F,0x01,0x07,0x1F,0x12};
729 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
731 if(get_file_size("foo.tmp") != 320)
734 }},{"Reading a file /w existing entry", []() {
737 rrdata_set::instance i
;
740 s
.read_base("foo.tmp", false);
741 char _data
[] = {0x3F,0x01,0x07,0x1F,0x12};
742 std::vector
<char> data(_data
, _data
+ sizeof(_data
));
744 if(get_file_size("foo.tmp") != 320)
752 struct test
* t
= tests
;
754 std::cout
<< t
->name
<< "..." << std::flush
;
757 std::cout
<< "\e[32mPASS\e[0m" << std::endl
;
759 std::cout
<< "\e[31mFAILED\e[0m" << std::endl
;
762 } catch(std::exception
& e
) {
763 std::cout
<< "\e[31mEXCEPTION: " << e
.what() << "\e[0m" << std::endl
;
766 std::cout
<< "\e[31mUNKNOWN EXCEPTION\e[0m" << std::endl
;