-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.cpp
More file actions
599 lines (563 loc) · 45.7 KB
/
Copy pathtest.cpp
File metadata and controls
599 lines (563 loc) · 45.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
#include "chunk_sampler.hpp"
#include <cstdint>
#include <cstdio>
#include <cstring>
// Returns number of failures in the chunk heightmap
// chunkX/chunkZ are chunk coordinates (world coords = chunk * 16)
static int checkChunk(std::uint64_t seed, int chunkX, int chunkZ, const int expected[256], const char* testName) {
mc::ChunkSampler cs(seed);
int failures = 0;
for (int z = 0; z < 16; z++) {
for (int x = 0; x < 16; x++) {
int got = cs.getHeight(chunkX * 16 + x, chunkZ * 16 + z);
int exp = expected[z * 16 + x];
if (got != exp) {
std::printf(" FAIL [%s] x=%d z=%d: expected=%d got=%d\n", testName, x, z, exp, got);
failures++;
}
}
}
return failures;
}
#define RUN_TEST(name, seed, cx, cz, ...) \
do { \
static const int expected_##name[256] = { __VA_ARGS__ }; \
int f = checkChunk((std::uint64_t)(std::int64_t)(seed), (cx), (cz), expected_##name, #name); \
if (f == 0) std::printf("PASS %s\n", #name); \
total_failures += f; \
total_tests++; \
} while (0)
int main() {
int total_failures = 0;
int total_tests = 0;
// --- Test seeds ---
RUN_TEST(test1, 8693031014262097603LL, -69, -154,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 65,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63);
RUN_TEST(test2, -9185553736290763633LL, 878, 524,
93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94,
94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94,
94, 94, 94, 94, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94,
95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95,
95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95,
95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95,
95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 95, 95, 95,
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95,
97, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95,
97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95,
98, 98, 97, 97, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95,
99, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95);
RUN_TEST(test3, 2647305855517557242LL, -223, 153,
66, 66, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69,
66, 66, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69,
65, 66, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69,
65, 66, 66, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69,
65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69,
65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69,
65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69,
65, 66, 66, 66, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69,
65, 65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 69, 69, 69, 69, 69,
65, 65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69,
65, 65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69,
64, 65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69,
64, 65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69,
64, 65, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69,
64, 65, 66, 66, 67, 67, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69,
64, 65, 65, 66, 67, 67, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69);
RUN_TEST(test4, -3816701789025343310LL, 540, -339,
68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69,
69, 69, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69,
69, 69, 69, 69, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69,
69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69);
RUN_TEST(test5, 1380839404558537125LL, 414, 21,
77, 77, 77, 76, 76, 75, 74, 73, 72, 72, 71, 69, 67, 67, 67, 67,
78, 77, 77, 77, 77, 76, 75, 74, 73, 72, 72, 71, 69, 69, 69, 69,
78, 78, 77, 77, 77, 77, 76, 75, 74, 73, 72, 72, 71, 71, 70, 70,
78, 78, 78, 78, 78, 77, 77, 76, 75, 74, 73, 72, 72, 72, 71, 71,
78, 78, 78, 78, 79, 78, 78, 77, 76, 75, 74, 73, 72, 72, 72, 72,
78, 78, 78, 78, 79, 78, 78, 78, 77, 76, 75, 74, 73, 73, 72, 72,
78, 78, 78, 78, 79, 78, 78, 78, 78, 77, 76, 75, 74, 73, 73, 72,
79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 77, 76, 75, 74, 73, 73,
79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 77, 75, 75, 74, 73,
79, 79, 79, 79, 79, 79, 79, 79, 80, 79, 78, 77, 76, 75, 75, 74,
79, 79, 79, 79, 79, 79, 80, 80, 80, 79, 79, 78, 77, 76, 75, 75,
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 78, 78, 77, 76, 75,
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 78, 77, 77, 76,
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 78, 77, 76,
80, 80, 80, 80, 80, 80, 80, 80, 81, 80, 80, 80, 79, 78, 78, 77,
80, 80, 80, 80, 80, 81, 81, 81, 81, 80, 80, 80, 79, 79, 78, 77);
RUN_TEST(test6, -4151016389759215178LL, 817, 718,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63);
RUN_TEST(test7, 510259959830093229LL, -184, -399,
63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65,
63, 63, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65,
63, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65,
64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66);
RUN_TEST(test8, 7993327974856984942LL, -171, 351,
69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 69, 69,
69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70,
69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70,
69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 71, 70, 70, 70,
69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71,
69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71,
69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71,
69, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71,
69, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71,
69, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71,
69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71,
70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71,
70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71,
69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70);
RUN_TEST(test9, -4423870871323318675LL, -536, -582,
73, 72, 72, 72, 71, 71, 71, 71, 71, 70, 69, 69, 68, 68, 68, 68,
72, 72, 72, 71, 71, 71, 71, 71, 70, 70, 69, 69, 68, 68, 68, 68,
72, 72, 71, 71, 71, 71, 71, 70, 70, 70, 69, 69, 68, 68, 68, 68,
72, 71, 71, 71, 71, 70, 70, 70, 70, 69, 69, 69, 68, 68, 68, 68,
71, 71, 71, 71, 70, 70, 70, 70, 70, 69, 69, 69, 68, 68, 68, 68,
71, 71, 71, 71, 70, 70, 70, 70, 69, 69, 69, 68, 68, 68, 68, 68,
71, 71, 71, 70, 70, 70, 70, 69, 69, 69, 69, 68, 68, 68, 68, 68,
71, 71, 70, 70, 70, 70, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68,
71, 70, 70, 70, 70, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68, 68,
71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68, 68,
70, 70, 70, 70, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68, 68, 67,
70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68, 67, 67,
70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 67, 67, 67,
70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68, 67, 67, 67,
70, 69, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68, 67, 67, 67,
69, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68, 68, 67, 67, 67);
RUN_TEST(test10, -3486656379864326815LL, -542, 205,
72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74,
72, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 75, 75,
73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75,
73, 73, 73, 73, 74, 74, 74, 74, 74, 75, 75, 76, 76, 76, 76, 76,
73, 73, 73, 74, 74, 74, 74, 74, 75, 75, 76, 76, 77, 77, 76, 76,
73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 76, 76, 77, 77, 77, 77,
73, 73, 74, 74, 74, 74, 74, 74, 74, 75, 76, 76, 77, 77, 77, 77,
73, 73, 74, 74, 74, 74, 74, 74, 74, 75, 76, 77, 77, 77, 77, 77,
73, 74, 74, 74, 74, 74, 74, 74, 74, 75, 76, 77, 78, 78, 78, 78,
73, 74, 74, 74, 74, 74, 75, 75, 75, 76, 76, 77, 78, 78, 78, 78,
74, 74, 74, 74, 74, 75, 75, 75, 76, 76, 77, 78, 78, 78, 78, 78,
74, 74, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 78, 78, 78, 78,
74, 74, 74, 75, 75, 75, 76, 77, 78, 78, 78, 78, 78, 78, 78, 78,
74, 74, 74, 75, 75, 76, 76, 77, 78, 78, 78, 78, 78, 78, 78, 78,
74, 74, 75, 75, 75, 76, 76, 77, 78, 78, 78, 78, 78, 78, 78, 78,
74, 74, 75, 75, 75, 76, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78);
RUN_TEST(test11, -3913439760712245449LL, -248, 921,
66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
66, 66, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
66, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
66, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63,
65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64);
RUN_TEST(test12, 8070195728176851273LL, -878, -98,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63);
RUN_TEST(test13, -8359134629325743921LL, 131, -382,
117, 117, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122,
117, 117, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122,
117, 117, 118, 118, 118, 119, 119, 120, 120, 120, 121, 121, 122, 122, 122, 122,
117, 117, 118, 118, 118, 119, 119, 120, 120, 121, 121, 121, 122, 122, 122, 122,
117, 117, 118, 118, 118, 119, 119, 120, 120, 121, 121, 121, 122, 122, 122, 122,
117, 117, 117, 118, 118, 119, 119, 120, 120, 121, 121, 121, 122, 122, 122, 122,
116, 117, 117, 117, 118, 118, 119, 119, 120, 120, 121, 121, 121, 122, 122, 122,
116, 116, 117, 117, 117, 118, 119, 119, 120, 120, 121, 121, 121, 121, 122, 122,
116, 116, 117, 117, 117, 118, 118, 119, 120, 120, 120, 121, 121, 121, 121, 121,
115, 116, 116, 117, 117, 117, 118, 118, 119, 119, 120, 120, 121, 121, 121, 121,
115, 115, 116, 116, 117, 117, 118, 118, 118, 119, 119, 120, 120, 121, 121, 121,
114, 115, 115, 116, 116, 117, 117, 118, 118, 118, 119, 120, 120, 120, 120, 121,
113, 114, 115, 116, 116, 117, 117, 117, 117, 118, 119, 119, 120, 120, 120, 120,
113, 114, 115, 115, 116, 116, 117, 117, 117, 118, 118, 119, 119, 119, 120, 120,
112, 113, 114, 115, 116, 116, 116, 117, 117, 117, 118, 118, 119, 119, 119, 119,
112, 113, 114, 115, 115, 116, 116, 117, 117, 117, 118, 118, 118, 118, 119, 119);
RUN_TEST(test14, 2644305944829444501LL, 67, -895,
68, 68, 68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66,
68, 68, 68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66,
68, 68, 68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66,
68, 68, 68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66,
68, 68, 68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 66, 66, 66,
68, 68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66, 66,
68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66,
68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66,
68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66,
68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66,
68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
68, 67, 67, 67, 67, 67, 67, 67, 66, 67, 67, 67, 67, 67, 67, 67,
67, 67, 67, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 67, 67,
67, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66);
RUN_TEST(test15, 8425827876139367406LL, 551, 993,
66, 66, 66, 66, 66, 66, 66, 67, 67, 69, 70, 72, 76, 76, 76, 76,
66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 70, 72, 76, 76, 75, 75,
66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 70, 72, 75, 75, 75, 75,
65, 65, 66, 66, 66, 66, 66, 66, 66, 68, 70, 72, 75, 75, 75, 75,
65, 65, 65, 65, 65, 65, 65, 65, 65, 68, 70, 72, 75, 75, 75, 75,
65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 70, 72, 75, 75, 75, 75,
65, 65, 65, 65, 65, 65, 65, 65, 65, 67, 69, 72, 75, 75, 75, 75,
65, 65, 64, 64, 64, 64, 64, 64, 64, 67, 69, 72, 75, 75, 75, 75,
64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 69, 71, 75, 75, 74, 74,
64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 68, 70, 73, 73, 73, 74,
64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 67, 69, 71, 72, 72, 73,
64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 67, 68, 70, 71, 71, 73,
64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 67, 68, 69, 70, 71, 72,
64, 64, 64, 64, 64, 64, 64, 64, 65, 66, 67, 68, 69, 70, 71, 72,
64, 64, 64, 64, 64, 64, 64, 65, 65, 66, 68, 69, 70, 71, 72, 72,
64, 64, 64, 64, 64, 64, 65, 65, 66, 67, 68, 70, 72, 72, 72, 72);
RUN_TEST(test16, 4808973035195391464LL, -334, -400,
68, 68, 68, 68, 68, 68, 67, 67, 66, 66, 65, 64, 63, 63, 63, 63,
68, 68, 68, 68, 68, 67, 67, 66, 66, 65, 64, 64, 63, 63, 63, 63,
68, 68, 68, 68, 68, 67, 66, 66, 66, 65, 64, 63, 63, 63, 63, 63,
68, 68, 68, 67, 67, 67, 66, 66, 65, 64, 64, 63, 63, 63, 63, 63,
68, 68, 67, 67, 67, 66, 66, 65, 65, 64, 63, 63, 63, 63, 63, 63,
67, 67, 67, 67, 67, 66, 66, 65, 65, 64, 64, 63, 63, 63, 63, 63,
67, 67, 67, 67, 66, 66, 65, 65, 65, 64, 64, 63, 63, 63, 63, 63,
67, 66, 66, 66, 66, 66, 65, 65, 65, 64, 64, 63, 63, 63, 63, 63,
66, 66, 66, 66, 66, 66, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63,
66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64,
66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 64, 65, 65, 65,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
67, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67,
67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
67, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69);
RUN_TEST(test17, 6148894707937760192LL, -411, -436,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63);
RUN_TEST(test18, 3338078885538188184LL, -317, 863,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63,
64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 64, 64,
65, 65, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65);
RUN_TEST(test19, -2996648425520322458LL, -640, -363,
111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113,
111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113,
111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113,
110, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113,
110, 110, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113,
110, 110, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 113, 113,
110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113,
109, 110, 110, 110, 110, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112,
109, 109, 110, 110, 110, 110, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112,
109, 109, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 112, 112, 112, 112,
109, 109, 109, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 112, 112, 112,
109, 109, 109, 109, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112,
109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111,
108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 111, 111, 111, 111,
108, 108, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 111, 111, 111,
108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 110, 110, 110, 110, 111, 111);
RUN_TEST(test20, -152787585208061905LL, 375, 716,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63);
RUN_TEST(test21, 3063576870581798099LL, 0, 0,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 49, 52, 55, 58,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 50, 52, 55, 58,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 51, 53, 56, 58,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 49, 52, 54, 56, 58,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 50, 53, 55, 57, 58,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 49, 52, 54, 56, 57,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 52, 53, 56, 57,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 51, 53, 55, 57,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 50, 52, 54, 57,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 51, 54, 57,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 53, 57,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -52, -54, 51, 56,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -51, -47, -52, 49, 56,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -51, -54, -54, 57,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 57,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 57);
RUN_TEST(test22, -1257485222092482996LL, -518, -792,
66, 67, 67, 68, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71,
65, 66, 66, 66, 67, 68, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70,
61, 60, 59, 48, 48, 66, 67, 69, 70, 70, 70, 70, 70, 70, 70, 70,
42, 42, 42, 42, 42, 46, 48, 67, 69, 69, 70, 70, 70, 70, 70, 70,
31, 33, 35, 36, 36, 38, 41, 45, 47, 69, 70, 70, 70, 70, 70, 70,
25, 27, 29, 30, 31, 34, 36, 38, 41, 45, 66, 68, 70, 70, 70, 70,
66, 22, 23, 24, 25, 27, 29, 32, 34, 37, 40, 60, 68, 68, 69, 69,
68, 66, 18, 19, 20, 21, 22, 24, 26, 29, 32, 36, 40, 66, 67, 68,
69, 67, 65, 14, 15, 16, 17, 18, 19, 21, 23, 25, 29, 34, 65, 67,
67, 65, 63, 61, 59, 57, 57, 13, 13, 14, 15, 17, 18, 21, 24, 65,
64, 64, 63, 62, 61, 59, 58, 57, 7, 8, 8, 8, 9, 9, 11, 12,
63, 63, 63, 62, 62, 61, 59, 58, 3, 3, 4, 4, 4, 4, 4, 4,
62, 63, 63, 63, 63, 62, 61, 59, 57, -1, -1, 0, 0, 0, 0, 0,
62, 62, 63, 63, 63, 62, 61, 60, 59, 57, -3, -2, -2, -2, -1, -1,
63, 62, 62, 62, 62, 62, 61, 61, 60, 59, 57, -5, -4, -3, -3, -2,
63, 62, 62, 62, 62, 62, 61, 61, 60, 59, 58, 57, -6, -5, -4, -3);
RUN_TEST(test23, -1257485222092482996LL, -866, 955,
33, -7, -8, -8, -8, 65, 68, 71, 73, 73, 74, 74, 74, 75, 75, 75,
-8, -8, -8, -8, -8, -7, 68, 72, 73, 73, 74, 74, 74, 75, 75, 75,
-9, -9, -9, -8, -8, -7, 69, 73, 73, 74, 74, 74, 75, 75, 75, 75,
-9, -9, -9, -9, -9, -7, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75,
-10, -10, -10, -9, -9, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75,
-11, -10, -9, -8, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, 75,
-11, -10, -9, -7, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75,
-12, -10, -9, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75,
-13, -11, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75,
-12, 73, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75,
-10, 73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75,
-9, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75,
73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75,
73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 74, 74, 73,
73, 73, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 74, 72, 71,
74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 73, 70, 69);
RUN_TEST(test24, -1257485222092482996LL, -855, -874,
89, 89, 89, 89, 89, 84, 78, 75, 70, 67, 66, 66, 66, 68, 70, 72,
89, 89, 87, 83, 79, 76, 65, -14, -15, -16, 55, 65, 65, 68, 70, 72,
88, 80, 77, 75, 73, -10, -11, -11, -11, -12, 43, 59, 65, 67, 69, 71,
75, 72, -6, -7, -7, -7, -8, -8, -8, -8, -8, 53, 64, 66, 68, 71,
-4, -4, -5, -5, -6, -6, -6, -5, -5, -5, -5, 46, 62, 66, 68, 70,
-3, -3, -4, -4, -4, -4, -3, -3, -3, -2, -2, 44, 59, 65, 67, 69,
-2, -2, -2, -2, -2, -1, -1, 0, 1, 1, 2, 41, 57, 64, 67, 69,
89, -1, 0, 0, 1, 1, 2, 3, 4, 4, 5, 7, 55, 63, 66, 68,
89, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 54, 61, 65, 67,
89, 4, 4, 4, 5, 6, 6, 7, 8, 9, 11, 13, 52, 60, 64, 67,
91, 6, 6, 7, 7, 8, 9, 10, 11, 12, 14, 15, 51, 58, 63, 66,
97, 8, 8, 9, 9, 11, 12, 13, 14, 15, 16, 18, 50, 57, 62, 65,
97, 97, 11, 12, 12, 13, 14, 15, 16, 17, 19, 20, 49, 56, 60, 64,
98, 97, 14, 14, 15, 16, 17, 18, 19, 20, 22, 23, 49, 54, 59, 63,
98, 97, 17, 17, 18, 19, 20, 21, 22, 23, 25, 32, 48, 53, 58, 62,
98, 19, 20, 20, 21, 22, 23, 24, 25, 28, 32, 40, 47, 52, 56, 60);
RUN_TEST(test25, -1257485222092482996LL, -132, -295,
70, 69, 69, 67, -21, 66, 69, 70, 71, 72, 72, 73, 73, 73, 73, 74,
70, 70, 69, 68, 66, 69, 70, 70, 71, 72, 72, 72, 73, 73, 73, 74,
70, 70, 70, 69, 68, 70, 70, 71, 71, 72, 72, 72, 72, 73, 73, 73,
70, 70, 70, 70, 69, 70, 71, 71, 71, 72, 72, 72, 72, 72, 73, 73,
70, 70, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 73,
71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75,
71, 71, 71, 72, 72, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 76,
71, 71, 72, 72, 73, 74, 75, 75, 76, 76, 76, 76, 77, 77, 77, 77,
71, 72, 72, 73, 74, 75, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78,
72, 72, 73, 74, 75, 75, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78,
73, 74, 74, 75, 75, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78, 78,
74, 74, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 79,
75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78, 79, 79,
74, 75, 75, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 79, 79, 79,
74, 75, 75, 75, 76, 76, 77, 77, 77, 78, 78, 78, 78, 79, 79, 79,
74, 74, 75, 75, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 79);
RUN_TEST(test26, -1257485222092482996LL, -446, -658,
23, 23, 23, 23, 23, 22, 22, 21, 19, 49, 59, 65, 66, 66, 67, 67,
23, 22, 21, 20, 18, 17, 0, -1, -2, -3, 57, 65, 66, 66, 67, 67,
22, 21, 19, 17, 6, 4, 1, 0, -2, -3, 49, 65, 65, 66, 66, 67,
65, 65, 18, 11, 6, 5, 2, 0, -1, -2, -3, 57, 65, 65, 66, 67,
65, 65, 65, 10, 6, 5, 3, 0, -1, -2, -3, 51, 58, 65, 66, 66,
66, 65, 65, 65, 8, 6, 4, 2, 0, -1, -3, -4, 56, 65, 65, 66,
66, 65, 65, 65, 65, 7, 5, 3, 1, -1, -2, -3, 50, 58, 65, 66,
66, 66, 65, 65, 65, 65, 6, 4, 2, 0, -1, -2, 43, 55, 65, 65,
66, 66, 66, 66, 65, 65, 65, 4, 2, 1, -1, -2, -3, 50, 58, 65,
66, 66, 66, 66, 66, 65, 65, 65, 3, 2, 0, -1, -2, 46, 57, 61,
66, 66, 66, 66, 66, 65, 65, 65, 65, 2, 1, -1, -2, -3, 57, 58,
66, 66, 66, 66, 66, 66, 65, 65, 65, 65, 1, 0, -1, -3, 46, 57,
66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 2, 0, -1, -2, 34, 54,
66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 1, 0, -2, -3, 45,
66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 57, 57, 57, 57,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 59, 57, 57);
RUN_TEST(test27, -70825677414438171LL, 464, 82,
203, 203, 204, 205, 206, 206, 206, 206, 206, 206, 205, 205, 205, 206, 207, 207,
203, 203, 204, 205, 206, 206, 206, 206, 206, 206, 206, 205, 205, 206, 206, 207,
203, 203, 204, 205, 206, 206, 206, 206, 206, 206, 206, 205, 205, 206, 206, 206,
203, 203, 204, 205, 205, 206, 206, 206, 206, 206, 206, 206, 205, 206, 206, 206,
203, 203, 204, 204, 205, 205, 206, 206, 206, 206, 206, 206, 206, 205, 205, 205,
203, 203, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
203, 203, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
203, 203, 203, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205,
203, 203, 203, 204, 204, 204, 203, 203, 203, 203, 203, 204, 204, 204, 205, 205,
203, 203, 203, 203, 204, 203, 203, 203, 203, 203, 203, 203, 203, 204, 205, 205,
203, 203, 203, 203, 204, 203, 203, 203, 203, 203, 203, 203, 203, 204, 205, 205,
202, 203, 203, 203, 203, 203, 203, 203, 202, 202, 202, 202, 202, 204, 205, 205,
202, 203, 203, 203, 203, 203, 203, 203, 202, 202, 202, 202, 202, 203, 204, 205,
202, 202, 202, 203, 203, 203, 202, 202, 202, 202, 202, 202, 201, 203, 204, 205,
202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 201, 201, 201, 203, 204, 205,
202, 202, 202, 202, 202, 202, 202, 202, 202, 201, 201, 201, 201, 203, 204, 205);
RUN_TEST(test28, -70825677414438171LL, 53, 518,
240, 240, 239, 239, 238, 238, 238, 238, 238, 238, 238, 238, 237, 236, 234, 232,
240, 239, 239, 239, 238, 238, 238, 238, 237, 237, 237, 237, 236, 235, 233, 232,
239, 239, 239, 238, 237, 237, 237, 237, 236, 236, 236, 236, 235, 234, 232, 232,
239, 239, 238, 237, 236, 236, 236, 235, 235, 235, 234, 234, 234, 233, 232, 231,
239, 238, 238, 237, 235, 235, 234, 233, 232, 232, 232, 232, 232, 232, 232, 231,
238, 238, 237, 236, 234, 234, 233, 232, 232, 232, 232, 232, 232, 231, 231, 231,
238, 237, 236, 235, 233, 232, 232, 232, 232, 232, 231, 231, 231, 231, 231, 230,
237, 236, 235, 233, 232, 232, 232, 231, 231, 231, 231, 231, 230, 230, 230, 230,
236, 235, 233, 232, 232, 231, 231, 231, 231, 230, 230, 229, 229, 229, 229, 229,
235, 234, 233, 232, 232, 231, 231, 231, 230, 230, 230, 229, 229, 228, 228, 228,
235, 234, 233, 232, 232, 231, 231, 231, 230, 230, 229, 229, 228, 228, 228, 227,
234, 233, 232, 232, 232, 231, 231, 231, 230, 230, 229, 228, 228, 227, 227, 226,
233, 233, 232, 232, 232, 232, 231, 230, 230, 229, 229, 228, 227, 226, 226, 225,
232, 232, 232, 232, 232, 231, 231, 230, 229, 229, 228, 228, 227, 226, 225, 224,
232, 232, 232, 232, 232, 231, 231, 230, 229, 229, 228, 227, 226, 225, 224, 224,
232, 232, 232, 232, 232, 231, 231, 230, 229, 228, 227, 226, 225, 224, 224, 224);
RUN_TEST(test29, -70825677414438171LL, 477, -700,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 214, 214,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 214,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 214,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 214,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 214,
215, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
215, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
215, 215, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
215, 215, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
215, 215, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
215, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215,
215, 216, 216, 216, 216, 216, 216, 216, 216, 216, 215, 215, 215, 215, 215, 215);
RUN_TEST(test30, -70825677414438171LL, 58, -37,
213, 213, 213, 213, 213, 214, 214, 214, 215, 215, 216, 216, 216, 216, 216, 215,
214, 214, 214, 214, 214, 215, 215, 215, 216, 216, 216, 217, 218, 217, 216, 215,
215, 215, 215, 215, 215, 215, 216, 216, 216, 217, 218, 219, 219, 218, 216, 216,
215, 215, 215, 215, 215, 216, 216, 217, 217, 218, 219, 220, 220, 219, 217, 216,
216, 216, 216, 216, 216, 216, 217, 218, 219, 220, 220, 221, 221, 220, 218, 216,
216, 216, 216, 216, 216, 217, 218, 219, 220, 221, 221, 221, 221, 220, 219, 217,
216, 216, 216, 216, 216, 218, 219, 220, 221, 221, 221, 222, 222, 221, 219, 217,
216, 216, 216, 216, 217, 219, 220, 221, 222, 222, 222, 222, 222, 221, 220, 218,
216, 216, 216, 217, 218, 220, 221, 222, 223, 223, 222, 222, 222, 221, 220, 218,
216, 216, 216, 216, 217, 219, 220, 221, 222, 222, 222, 222, 222, 221, 220, 219,
216, 216, 216, 216, 216, 218, 219, 220, 221, 221, 222, 222, 222, 221, 220, 219,
216, 216, 216, 216, 216, 216, 218, 219, 220, 220, 221, 221, 221, 221, 220, 219,
216, 216, 216, 216, 216, 216, 216, 217, 218, 219, 220, 221, 221, 221, 220, 220,
216, 216, 216, 216, 216, 216, 216, 217, 218, 219, 220, 220, 221, 220, 220, 220,
216, 216, 216, 216, 216, 216, 216, 217, 218, 219, 220, 220, 221, 220, 220, 220,
216, 216, 216, 216, 216, 216, 217, 218, 219, 219, 220, 220, 220, 220, 220, 220);
RUN_TEST(test31, -70825677414438171LL, -222, 16,
213, 212, 212, 212, 211, 211, 211, 211, 212, 212, 212, 212, 212, 211, 211, 210,
212, 212, 212, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 210, 209, 209,
212, 212, 211, 211, 211, 211, 211, 211, 210, 210, 210, 210, 210, 209, 208, 207,
212, 211, 211, 211, 211, 210, 210, 210, 210, 210, 209, 209, 209, 208, 207, 206,
211, 211, 211, 211, 210, 210, 210, 210, 209, 209, 208, 208, 207, 206, 205, 204,
211, 211, 210, 210, 210, 209, 209, 208, 207, 206, 206, 205, 205, 204, 203, 202,
210, 210, 210, 210, 210, 209, 207, 206, 204, 204, 204, 204, 203, 202, 201, 200,
210, 210, 210, 210, 210, 208, 206, 203, 201, 202, 202, 202, 202, 201, 200, 199,
209, 210, 210, 210, 210, 207, 203, 200, 200, 200, 200, 201, 201, 200, 199, 197,
206, 206, 207, 207, 207, 204, 202, 200, 200, 200, 200, 200, 200, 199, 198, 196,
203, 204, 204, 204, 204, 202, 201, 200, 199, 199, 199, 199, 199, 198, 197, 195,
201, 201, 202, 202, 202, 201, 200, 200, 199, 199, 199, 199, 199, 198, 196, 194,
200, 200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 198, 198, 197, 196, 194,
200, 200, 200, 200, 200, 200, 200, 199, 199, 199, 198, 198, 197, 196, 195, 193,
200, 200, 200, 200, 200, 200, 200, 199, 199, 198, 198, 197, 197, 196, 194, 192,
200, 200, 200, 200, 200, 200, 199, 199, 198, 198, 197, 197, 196, 195, 193, 192);
std::printf("\n%d/%d tests passed\n", total_tests - total_failures, total_tests);
return total_failures > 0 ? 1 : 0;
}