flint-sys 0.9.0

Bindings to the FLINT C library
Documentation
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
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
/*
    Copyright (C) 2013 Fredrik Johansson

    This file is part of FLINT.

    FLINT is free software: you can redistribute it and/or modify it under
    the terms of the GNU Lesser General Public License (LGPL) as published
    by the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.  See <https://www.gnu.org/licenses/>.
*/

#include "test_helpers.h"
#include "arb.h"

#define ASSERT(cond) if (!(cond)) { flint_printf("FAIL: %d\n", __LINE__); flint_abort(); }

TEST_FUNCTION_START(arb_special, state)
{
    arb_t zero, pos, neg, pos_inf, neg_inf, pos_inf_err, neg_inf_err,
      zero_pm_inf, pos_pm_inf, neg_pm_inf,
      indet_exact, indet_pos_rad, indet_inf_rad;

    arb_init(zero);
    arb_init(pos);
    arb_init(neg);
    arb_init(pos_inf);
    arb_init(neg_inf);
    arb_init(pos_inf_err);
    arb_init(neg_inf_err);
    arb_init(zero_pm_inf);
    arb_init(pos_pm_inf);
    arb_init(neg_pm_inf);
    arb_init(indet_exact);
    arb_init(indet_pos_rad);
    arb_init(indet_inf_rad);

    arb_set_si(pos, 3); arb_div_ui(pos, pos, 5, 53);
    arb_neg(neg, pos);
    arb_pos_inf(pos_inf);
    arb_neg_inf(neg_inf);
    arb_pos_inf(pos_inf_err); arf_get_mag(arb_radref(pos_inf_err), arb_midref(pos));
    arb_neg(neg_inf_err, pos_inf_err);
    arb_zero_pm_inf(zero_pm_inf);
    arf_set_si(arb_midref(pos_pm_inf), 3); mag_inf(arb_radref(pos_pm_inf));
    arf_set_si(arb_midref(neg_pm_inf), -3); mag_inf(arb_radref(neg_pm_inf));
    arf_nan(arb_midref(indet_exact)); mag_zero(arb_radref(indet_exact));
    arf_nan(arb_midref(indet_pos_rad)); arf_get_mag(arb_radref(indet_pos_rad), arb_midref(pos));
    arf_nan(arb_midref(indet_inf_rad)); arf_get_mag(arb_radref(indet_inf_rad), arb_midref(pos));

    ASSERT(arb_is_zero(zero));
    ASSERT(!arb_is_zero(pos));
    ASSERT(!arb_is_zero(neg));
    ASSERT(!arb_is_zero(pos_inf));
    ASSERT(!arb_is_zero(neg_inf));
    ASSERT(!arb_is_zero(pos_inf_err));
    ASSERT(!arb_is_zero(neg_inf_err));
    ASSERT(!arb_is_zero(zero_pm_inf));
    ASSERT(!arb_is_zero(pos_pm_inf));
    ASSERT(!arb_is_zero(neg_pm_inf));
    ASSERT(!arb_is_zero(indet_exact));
    ASSERT(!arb_is_zero(indet_pos_rad));
    ASSERT(!arb_is_zero(indet_inf_rad));

    ASSERT(!arb_is_nonzero(zero));
    ASSERT(arb_is_nonzero(pos));
    ASSERT(arb_is_nonzero(neg));
    ASSERT(arb_is_nonzero(pos_inf));
    ASSERT(arb_is_nonzero(neg_inf));
    ASSERT(arb_is_nonzero(pos_inf_err));
    ASSERT(arb_is_nonzero(neg_inf_err));
    ASSERT(!arb_is_nonzero(zero_pm_inf));
    ASSERT(!arb_is_nonzero(pos_pm_inf));
    ASSERT(!arb_is_nonzero(neg_pm_inf));
    ASSERT(!arb_is_nonzero(indet_exact));
    ASSERT(!arb_is_nonzero(indet_pos_rad));
    ASSERT(!arb_is_nonzero(indet_inf_rad));

    ASSERT(!arb_is_positive(zero));
    ASSERT(arb_is_positive(pos));
    ASSERT(!arb_is_positive(neg));
    ASSERT(arb_is_positive(pos_inf));
    ASSERT(!arb_is_positive(neg_inf));
    ASSERT(arb_is_positive(pos_inf_err));
    ASSERT(!arb_is_positive(neg_inf_err));
    ASSERT(!arb_is_positive(zero_pm_inf));
    ASSERT(!arb_is_positive(pos_pm_inf));
    ASSERT(!arb_is_positive(neg_pm_inf));
    ASSERT(!arb_is_positive(indet_exact));
    ASSERT(!arb_is_positive(indet_pos_rad));
    ASSERT(!arb_is_positive(indet_inf_rad));

    ASSERT(!arb_is_negative(zero));
    ASSERT(!arb_is_negative(pos));
    ASSERT(arb_is_negative(neg));
    ASSERT(!arb_is_negative(pos_inf));
    ASSERT(arb_is_negative(neg_inf));
    ASSERT(!arb_is_negative(pos_inf_err));
    ASSERT(arb_is_negative(neg_inf_err));
    ASSERT(!arb_is_negative(zero_pm_inf));
    ASSERT(!arb_is_negative(pos_pm_inf));
    ASSERT(!arb_is_negative(neg_pm_inf));
    ASSERT(!arb_is_negative(indet_exact));
    ASSERT(!arb_is_negative(indet_pos_rad));
    ASSERT(!arb_is_negative(indet_inf_rad));

    ASSERT(arb_is_nonnegative(zero));
    ASSERT(arb_is_nonnegative(pos));
    ASSERT(!arb_is_nonnegative(neg));
    ASSERT(arb_is_nonnegative(pos_inf));
    ASSERT(!arb_is_nonnegative(neg_inf));
    ASSERT(arb_is_nonnegative(pos_inf_err));
    ASSERT(!arb_is_nonnegative(neg_inf_err));
    ASSERT(!arb_is_nonnegative(zero_pm_inf));
    ASSERT(!arb_is_nonnegative(pos_pm_inf));
    ASSERT(!arb_is_nonnegative(neg_pm_inf));
    ASSERT(!arb_is_nonnegative(indet_exact));
    ASSERT(!arb_is_nonnegative(indet_pos_rad));
    ASSERT(!arb_is_nonnegative(indet_inf_rad));

    ASSERT(arb_is_nonpositive(zero));
    ASSERT(!arb_is_nonpositive(pos));
    ASSERT(arb_is_nonpositive(neg));
    ASSERT(!arb_is_nonpositive(pos_inf));
    ASSERT(arb_is_nonpositive(neg_inf));
    ASSERT(!arb_is_nonpositive(pos_inf_err));
    ASSERT(arb_is_nonpositive(neg_inf_err));
    ASSERT(!arb_is_nonpositive(zero_pm_inf));
    ASSERT(!arb_is_nonpositive(pos_pm_inf));
    ASSERT(!arb_is_nonpositive(neg_pm_inf));
    ASSERT(!arb_is_nonpositive(indet_exact));
    ASSERT(!arb_is_nonpositive(indet_pos_rad));
    ASSERT(!arb_is_nonpositive(indet_inf_rad));

    ASSERT(!arb_contains_negative(zero));
    ASSERT(!arb_contains_negative(pos));
    ASSERT(arb_contains_negative(neg));
    ASSERT(!arb_contains_negative(pos_inf));
    ASSERT(arb_contains_negative(neg_inf));
    ASSERT(!arb_contains_negative(pos_inf_err));
    ASSERT(arb_contains_negative(neg_inf_err));
    ASSERT(arb_contains_negative(zero_pm_inf));
    ASSERT(arb_contains_negative(pos_pm_inf));
    ASSERT(arb_contains_negative(neg_pm_inf));
    ASSERT(arb_contains_negative(indet_exact));
    ASSERT(arb_contains_negative(indet_pos_rad));
    ASSERT(arb_contains_negative(indet_inf_rad));

    ASSERT(arb_contains_nonpositive(zero));
    ASSERT(!arb_contains_nonpositive(pos));
    ASSERT(arb_contains_nonpositive(neg));
    ASSERT(!arb_contains_nonpositive(pos_inf));
    ASSERT(arb_contains_nonpositive(neg_inf));
    ASSERT(!arb_contains_nonpositive(pos_inf_err));
    ASSERT(arb_contains_nonpositive(neg_inf_err));
    ASSERT(arb_contains_nonpositive(zero_pm_inf));
    ASSERT(arb_contains_nonpositive(pos_pm_inf));
    ASSERT(arb_contains_nonpositive(neg_pm_inf));
    ASSERT(arb_contains_nonpositive(indet_exact));
    ASSERT(arb_contains_nonpositive(indet_pos_rad));
    ASSERT(arb_contains_nonpositive(indet_inf_rad));

    ASSERT(!arb_contains_positive(zero));
    ASSERT(arb_contains_positive(pos));
    ASSERT(!arb_contains_positive(neg));
    ASSERT(arb_contains_positive(pos_inf));
    ASSERT(!arb_contains_positive(neg_inf));
    ASSERT(arb_contains_positive(pos_inf_err));
    ASSERT(!arb_contains_positive(neg_inf_err));
    ASSERT(arb_contains_positive(zero_pm_inf));
    ASSERT(arb_contains_positive(pos_pm_inf));
    ASSERT(arb_contains_positive(neg_pm_inf));
    ASSERT(arb_contains_positive(indet_exact));
    ASSERT(arb_contains_positive(indet_pos_rad));
    ASSERT(arb_contains_positive(indet_inf_rad));

    ASSERT(arb_contains_nonnegative(zero));
    ASSERT(arb_contains_nonnegative(pos));
    ASSERT(!arb_contains_nonnegative(neg));
    ASSERT(arb_contains_nonnegative(pos_inf));
    ASSERT(!arb_contains_nonnegative(neg_inf));
    ASSERT(arb_contains_nonnegative(pos_inf_err));
    ASSERT(!arb_contains_nonnegative(neg_inf_err));
    ASSERT(arb_contains_nonnegative(zero_pm_inf));
    ASSERT(arb_contains_nonnegative(pos_pm_inf));
    ASSERT(arb_contains_nonnegative(neg_pm_inf));
    ASSERT(arb_contains_nonnegative(indet_exact));
    ASSERT(arb_contains_nonnegative(indet_pos_rad));
    ASSERT(arb_contains_nonnegative(indet_inf_rad));

    ASSERT(arb_is_finite(zero));
    ASSERT(arb_is_finite(pos));
    ASSERT(arb_is_finite(neg));
    ASSERT(!arb_is_finite(pos_inf));
    ASSERT(!arb_is_finite(neg_inf));
    ASSERT(!arb_is_finite(pos_inf_err));
    ASSERT(!arb_is_finite(neg_inf_err));
    ASSERT(!arb_is_finite(zero_pm_inf));
    ASSERT(!arb_is_finite(pos_pm_inf));
    ASSERT(!arb_is_finite(neg_pm_inf));
    ASSERT(!arb_is_finite(indet_exact));
    ASSERT(!arb_is_finite(indet_pos_rad));
    ASSERT(!arb_is_finite(indet_inf_rad));

    ASSERT(arb_contains(zero, zero));
    ASSERT(!arb_contains(zero, pos));
    ASSERT(!arb_contains(zero, neg));
    ASSERT(!arb_contains(zero, pos_inf));
    ASSERT(!arb_contains(zero, neg_inf));
    ASSERT(!arb_contains(zero, pos_inf_err));
    ASSERT(!arb_contains(zero, neg_inf_err));
    ASSERT(!arb_contains(zero, zero_pm_inf));
    ASSERT(!arb_contains(zero, pos_pm_inf));
    ASSERT(!arb_contains(zero, neg_pm_inf));
    ASSERT(!arb_contains(zero, indet_exact));
    ASSERT(!arb_contains(zero, indet_pos_rad));
    ASSERT(!arb_contains(zero, indet_inf_rad));
    ASSERT(!arb_contains(pos, zero));
    ASSERT(arb_contains(pos, pos));
    ASSERT(!arb_contains(pos, neg));
    ASSERT(!arb_contains(pos, pos_inf));
    ASSERT(!arb_contains(pos, neg_inf));
    ASSERT(!arb_contains(pos, pos_inf_err));
    ASSERT(!arb_contains(pos, neg_inf_err));
    ASSERT(!arb_contains(pos, zero_pm_inf));
    ASSERT(!arb_contains(pos, pos_pm_inf));
    ASSERT(!arb_contains(pos, neg_pm_inf));
    ASSERT(!arb_contains(pos, indet_exact));
    ASSERT(!arb_contains(pos, indet_pos_rad));
    ASSERT(!arb_contains(pos, indet_inf_rad));
    ASSERT(!arb_contains(neg, zero));
    ASSERT(!arb_contains(neg, pos));
    ASSERT(arb_contains(neg, neg));
    ASSERT(!arb_contains(neg, pos_inf));
    ASSERT(!arb_contains(neg, neg_inf));
    ASSERT(!arb_contains(neg, pos_inf_err));
    ASSERT(!arb_contains(neg, neg_inf_err));
    ASSERT(!arb_contains(neg, zero_pm_inf));
    ASSERT(!arb_contains(neg, pos_pm_inf));
    ASSERT(!arb_contains(neg, neg_pm_inf));
    ASSERT(!arb_contains(neg, indet_exact));
    ASSERT(!arb_contains(neg, indet_pos_rad));
    ASSERT(!arb_contains(neg, indet_inf_rad));
    ASSERT(!arb_contains(pos_inf, zero));
    ASSERT(!arb_contains(pos_inf, pos));
    ASSERT(!arb_contains(pos_inf, neg));
    ASSERT(arb_contains(pos_inf, pos_inf));
    ASSERT(!arb_contains(pos_inf, neg_inf));
    ASSERT(arb_contains(pos_inf, pos_inf_err));
    ASSERT(!arb_contains(pos_inf, neg_inf_err));
    ASSERT(!arb_contains(pos_inf, zero_pm_inf));
    ASSERT(!arb_contains(pos_inf, pos_pm_inf));
    ASSERT(!arb_contains(pos_inf, neg_pm_inf));
    ASSERT(!arb_contains(pos_inf, indet_exact));
    ASSERT(!arb_contains(pos_inf, indet_pos_rad));
    ASSERT(!arb_contains(pos_inf, indet_inf_rad));
    ASSERT(!arb_contains(neg_inf, zero));
    ASSERT(!arb_contains(neg_inf, pos));
    ASSERT(!arb_contains(neg_inf, neg));
    ASSERT(!arb_contains(neg_inf, pos_inf));
    ASSERT(arb_contains(neg_inf, neg_inf));
    ASSERT(!arb_contains(neg_inf, pos_inf_err));
    ASSERT(arb_contains(neg_inf, neg_inf_err));
    ASSERT(!arb_contains(neg_inf, zero_pm_inf));
    ASSERT(!arb_contains(neg_inf, pos_pm_inf));
    ASSERT(!arb_contains(neg_inf, neg_pm_inf));
    ASSERT(!arb_contains(neg_inf, indet_exact));
    ASSERT(!arb_contains(neg_inf, indet_pos_rad));
    ASSERT(!arb_contains(neg_inf, indet_inf_rad));
    ASSERT(!arb_contains(pos_inf_err, zero));
    ASSERT(!arb_contains(pos_inf_err, pos));
    ASSERT(!arb_contains(pos_inf_err, neg));
    ASSERT(arb_contains(pos_inf_err, pos_inf));
    ASSERT(!arb_contains(pos_inf_err, neg_inf));
    ASSERT(arb_contains(pos_inf_err, pos_inf_err));
    ASSERT(!arb_contains(pos_inf_err, neg_inf_err));
    ASSERT(!arb_contains(pos_inf_err, zero_pm_inf));
    ASSERT(!arb_contains(pos_inf_err, pos_pm_inf));
    ASSERT(!arb_contains(pos_inf_err, neg_pm_inf));
    ASSERT(!arb_contains(pos_inf_err, indet_exact));
    ASSERT(!arb_contains(pos_inf_err, indet_pos_rad));
    ASSERT(!arb_contains(pos_inf_err, indet_inf_rad));
    ASSERT(!arb_contains(neg_inf_err, zero));
    ASSERT(!arb_contains(neg_inf_err, pos));
    ASSERT(!arb_contains(neg_inf_err, neg));
    ASSERT(!arb_contains(neg_inf_err, pos_inf));
    ASSERT(arb_contains(neg_inf_err, neg_inf));
    ASSERT(!arb_contains(neg_inf_err, pos_inf_err));
    ASSERT(arb_contains(neg_inf_err, neg_inf_err));
    ASSERT(!arb_contains(neg_inf_err, zero_pm_inf));
    ASSERT(!arb_contains(neg_inf_err, pos_pm_inf));
    ASSERT(!arb_contains(neg_inf_err, neg_pm_inf));
    ASSERT(!arb_contains(neg_inf_err, indet_exact));
    ASSERT(!arb_contains(neg_inf_err, indet_pos_rad));
    ASSERT(!arb_contains(neg_inf_err, indet_inf_rad));
    ASSERT(arb_contains(zero_pm_inf, zero));
    ASSERT(arb_contains(zero_pm_inf, pos));
    ASSERT(arb_contains(zero_pm_inf, neg));
    ASSERT(arb_contains(zero_pm_inf, pos_inf));
    ASSERT(arb_contains(zero_pm_inf, neg_inf));
    ASSERT(arb_contains(zero_pm_inf, pos_inf_err));
    ASSERT(arb_contains(zero_pm_inf, neg_inf_err));
    ASSERT(arb_contains(zero_pm_inf, zero_pm_inf));
    ASSERT(arb_contains(zero_pm_inf, pos_pm_inf));
    ASSERT(arb_contains(zero_pm_inf, neg_pm_inf));
    ASSERT(!arb_contains(zero_pm_inf, indet_exact));
    ASSERT(!arb_contains(zero_pm_inf, indet_pos_rad));
    ASSERT(!arb_contains(zero_pm_inf, indet_inf_rad));
    ASSERT(arb_contains(pos_pm_inf, zero));
    ASSERT(arb_contains(pos_pm_inf, pos));
    ASSERT(arb_contains(pos_pm_inf, neg));
    ASSERT(arb_contains(pos_pm_inf, pos_inf));
    ASSERT(arb_contains(pos_pm_inf, neg_inf));
    ASSERT(arb_contains(pos_pm_inf, pos_inf_err));
    ASSERT(arb_contains(pos_pm_inf, neg_inf_err));
    ASSERT(arb_contains(pos_pm_inf, zero_pm_inf));
    ASSERT(arb_contains(pos_pm_inf, pos_pm_inf));
    ASSERT(arb_contains(pos_pm_inf, neg_pm_inf));
    ASSERT(!arb_contains(pos_pm_inf, indet_exact));
    ASSERT(!arb_contains(pos_pm_inf, indet_pos_rad));
    ASSERT(!arb_contains(pos_pm_inf, indet_inf_rad));
    ASSERT(arb_contains(neg_pm_inf, zero));
    ASSERT(arb_contains(neg_pm_inf, pos));
    ASSERT(arb_contains(neg_pm_inf, neg));
    ASSERT(arb_contains(neg_pm_inf, pos_inf));
    ASSERT(arb_contains(neg_pm_inf, neg_inf));
    ASSERT(arb_contains(neg_pm_inf, pos_inf_err));
    ASSERT(arb_contains(neg_pm_inf, neg_inf_err));
    ASSERT(arb_contains(neg_pm_inf, zero_pm_inf));
    ASSERT(arb_contains(neg_pm_inf, pos_pm_inf));
    ASSERT(arb_contains(neg_pm_inf, neg_pm_inf));
    ASSERT(!arb_contains(neg_pm_inf, indet_exact));
    ASSERT(!arb_contains(neg_pm_inf, indet_pos_rad));
    ASSERT(!arb_contains(neg_pm_inf, indet_inf_rad));
    ASSERT(arb_contains(indet_exact, zero));
    ASSERT(arb_contains(indet_exact, pos));
    ASSERT(arb_contains(indet_exact, neg));
    ASSERT(arb_contains(indet_exact, pos_inf));
    ASSERT(arb_contains(indet_exact, neg_inf));
    ASSERT(arb_contains(indet_exact, pos_inf_err));
    ASSERT(arb_contains(indet_exact, neg_inf_err));
    ASSERT(arb_contains(indet_exact, zero_pm_inf));
    ASSERT(arb_contains(indet_exact, pos_pm_inf));
    ASSERT(arb_contains(indet_exact, neg_pm_inf));
    ASSERT(arb_contains(indet_exact, indet_exact));
    ASSERT(arb_contains(indet_exact, indet_pos_rad));
    ASSERT(arb_contains(indet_exact, indet_inf_rad));
    ASSERT(arb_contains(indet_pos_rad, zero));
    ASSERT(arb_contains(indet_pos_rad, pos));
    ASSERT(arb_contains(indet_pos_rad, neg));
    ASSERT(arb_contains(indet_pos_rad, pos_inf));
    ASSERT(arb_contains(indet_pos_rad, neg_inf));
    ASSERT(arb_contains(indet_pos_rad, pos_inf_err));
    ASSERT(arb_contains(indet_pos_rad, neg_inf_err));
    ASSERT(arb_contains(indet_pos_rad, zero_pm_inf));
    ASSERT(arb_contains(indet_pos_rad, pos_pm_inf));
    ASSERT(arb_contains(indet_pos_rad, neg_pm_inf));
    ASSERT(arb_contains(indet_pos_rad, indet_exact));
    ASSERT(arb_contains(indet_pos_rad, indet_pos_rad));
    ASSERT(arb_contains(indet_pos_rad, indet_inf_rad));
    ASSERT(arb_contains(indet_inf_rad, zero));
    ASSERT(arb_contains(indet_inf_rad, pos));
    ASSERT(arb_contains(indet_inf_rad, neg));
    ASSERT(arb_contains(indet_inf_rad, pos_inf));
    ASSERT(arb_contains(indet_inf_rad, neg_inf));
    ASSERT(arb_contains(indet_inf_rad, pos_inf_err));
    ASSERT(arb_contains(indet_inf_rad, neg_inf_err));
    ASSERT(arb_contains(indet_inf_rad, zero_pm_inf));
    ASSERT(arb_contains(indet_inf_rad, pos_pm_inf));
    ASSERT(arb_contains(indet_inf_rad, neg_pm_inf));
    ASSERT(arb_contains(indet_inf_rad, indet_exact));
    ASSERT(arb_contains(indet_inf_rad, indet_pos_rad));
    ASSERT(arb_contains(indet_inf_rad, indet_inf_rad));

    ASSERT(arb_overlaps(zero, zero));
    ASSERT(!arb_overlaps(zero, pos));
    ASSERT(!arb_overlaps(zero, neg));
    ASSERT(!arb_overlaps(zero, pos_inf));
    ASSERT(!arb_overlaps(zero, neg_inf));
    ASSERT(!arb_overlaps(zero, pos_inf_err));
    ASSERT(!arb_overlaps(zero, neg_inf_err));
    ASSERT(arb_overlaps(zero, zero_pm_inf));
    ASSERT(arb_overlaps(zero, pos_pm_inf));
    ASSERT(arb_overlaps(zero, neg_pm_inf));
    ASSERT(arb_overlaps(zero, indet_exact));
    ASSERT(arb_overlaps(zero, indet_pos_rad));
    ASSERT(arb_overlaps(zero, indet_inf_rad));
    ASSERT(!arb_overlaps(pos, zero));
    ASSERT(arb_overlaps(pos, pos));
    ASSERT(!arb_overlaps(pos, neg));
    ASSERT(!arb_overlaps(pos, pos_inf));
    ASSERT(!arb_overlaps(pos, neg_inf));
    ASSERT(!arb_overlaps(pos, pos_inf_err));
    ASSERT(!arb_overlaps(pos, neg_inf_err));
    ASSERT(arb_overlaps(pos, zero_pm_inf));
    ASSERT(arb_overlaps(pos, pos_pm_inf));
    ASSERT(arb_overlaps(pos, neg_pm_inf));
    ASSERT(arb_overlaps(pos, indet_exact));
    ASSERT(arb_overlaps(pos, indet_pos_rad));
    ASSERT(arb_overlaps(pos, indet_inf_rad));
    ASSERT(!arb_overlaps(neg, zero));
    ASSERT(!arb_overlaps(neg, pos));
    ASSERT(arb_overlaps(neg, neg));
    ASSERT(!arb_overlaps(neg, pos_inf));
    ASSERT(!arb_overlaps(neg, neg_inf));
    ASSERT(!arb_overlaps(neg, pos_inf_err));
    ASSERT(!arb_overlaps(neg, neg_inf_err));
    ASSERT(arb_overlaps(neg, zero_pm_inf));
    ASSERT(arb_overlaps(neg, pos_pm_inf));
    ASSERT(arb_overlaps(neg, neg_pm_inf));
    ASSERT(arb_overlaps(neg, indet_exact));
    ASSERT(arb_overlaps(neg, indet_pos_rad));
    ASSERT(arb_overlaps(neg, indet_inf_rad));
    ASSERT(!arb_overlaps(pos_inf, zero));
    ASSERT(!arb_overlaps(pos_inf, pos));
    ASSERT(!arb_overlaps(pos_inf, neg));
    ASSERT(arb_overlaps(pos_inf, pos_inf));
    ASSERT(!arb_overlaps(pos_inf, neg_inf));
    ASSERT(arb_overlaps(pos_inf, pos_inf_err));
    ASSERT(!arb_overlaps(pos_inf, neg_inf_err));
    ASSERT(arb_overlaps(pos_inf, zero_pm_inf));
    ASSERT(arb_overlaps(pos_inf, pos_pm_inf));
    ASSERT(arb_overlaps(pos_inf, neg_pm_inf));
    ASSERT(arb_overlaps(pos_inf, indet_exact));
    ASSERT(arb_overlaps(pos_inf, indet_pos_rad));
    ASSERT(arb_overlaps(pos_inf, indet_inf_rad));
    ASSERT(!arb_overlaps(neg_inf, zero));
    ASSERT(!arb_overlaps(neg_inf, pos));
    ASSERT(!arb_overlaps(neg_inf, neg));
    ASSERT(!arb_overlaps(neg_inf, pos_inf));
    ASSERT(arb_overlaps(neg_inf, neg_inf));
    ASSERT(!arb_overlaps(neg_inf, pos_inf_err));
    ASSERT(arb_overlaps(neg_inf, neg_inf_err));
    ASSERT(arb_overlaps(neg_inf, zero_pm_inf));
    ASSERT(arb_overlaps(neg_inf, pos_pm_inf));
    ASSERT(arb_overlaps(neg_inf, neg_pm_inf));
    ASSERT(arb_overlaps(neg_inf, indet_exact));
    ASSERT(arb_overlaps(neg_inf, indet_pos_rad));
    ASSERT(arb_overlaps(neg_inf, indet_inf_rad));
    ASSERT(!arb_overlaps(pos_inf_err, zero));
    ASSERT(!arb_overlaps(pos_inf_err, pos));
    ASSERT(!arb_overlaps(pos_inf_err, neg));
    ASSERT(arb_overlaps(pos_inf_err, pos_inf));
    ASSERT(!arb_overlaps(pos_inf_err, neg_inf));
    ASSERT(arb_overlaps(pos_inf_err, pos_inf_err));
    ASSERT(!arb_overlaps(pos_inf_err, neg_inf_err));
    ASSERT(arb_overlaps(pos_inf_err, zero_pm_inf));
    ASSERT(arb_overlaps(pos_inf_err, pos_pm_inf));
    ASSERT(arb_overlaps(pos_inf_err, neg_pm_inf));
    ASSERT(arb_overlaps(pos_inf_err, indet_exact));
    ASSERT(arb_overlaps(pos_inf_err, indet_pos_rad));
    ASSERT(arb_overlaps(pos_inf_err, indet_inf_rad));
    ASSERT(!arb_overlaps(neg_inf_err, zero));
    ASSERT(!arb_overlaps(neg_inf_err, pos));
    ASSERT(!arb_overlaps(neg_inf_err, neg));
    ASSERT(!arb_overlaps(neg_inf_err, pos_inf));
    ASSERT(arb_overlaps(neg_inf_err, neg_inf));
    ASSERT(!arb_overlaps(neg_inf_err, pos_inf_err));
    ASSERT(arb_overlaps(neg_inf_err, neg_inf_err));
    ASSERT(arb_overlaps(neg_inf_err, zero_pm_inf));
    ASSERT(arb_overlaps(neg_inf_err, pos_pm_inf));
    ASSERT(arb_overlaps(neg_inf_err, neg_pm_inf));
    ASSERT(arb_overlaps(neg_inf_err, indet_exact));
    ASSERT(arb_overlaps(neg_inf_err, indet_pos_rad));
    ASSERT(arb_overlaps(neg_inf_err, indet_inf_rad));
    ASSERT(arb_overlaps(zero_pm_inf, zero));
    ASSERT(arb_overlaps(zero_pm_inf, pos));
    ASSERT(arb_overlaps(zero_pm_inf, neg));
    ASSERT(arb_overlaps(zero_pm_inf, pos_inf));
    ASSERT(arb_overlaps(zero_pm_inf, neg_inf));
    ASSERT(arb_overlaps(zero_pm_inf, pos_inf_err));
    ASSERT(arb_overlaps(zero_pm_inf, neg_inf_err));
    ASSERT(arb_overlaps(zero_pm_inf, zero_pm_inf));
    ASSERT(arb_overlaps(zero_pm_inf, pos_pm_inf));
    ASSERT(arb_overlaps(zero_pm_inf, neg_pm_inf));
    ASSERT(arb_overlaps(zero_pm_inf, indet_exact));
    ASSERT(arb_overlaps(zero_pm_inf, indet_pos_rad));
    ASSERT(arb_overlaps(zero_pm_inf, indet_inf_rad));
    ASSERT(arb_overlaps(pos_pm_inf, zero));
    ASSERT(arb_overlaps(pos_pm_inf, pos));
    ASSERT(arb_overlaps(pos_pm_inf, neg));
    ASSERT(arb_overlaps(pos_pm_inf, pos_inf));
    ASSERT(arb_overlaps(pos_pm_inf, neg_inf));
    ASSERT(arb_overlaps(pos_pm_inf, pos_inf_err));
    ASSERT(arb_overlaps(pos_pm_inf, neg_inf_err));
    ASSERT(arb_overlaps(pos_pm_inf, zero_pm_inf));
    ASSERT(arb_overlaps(pos_pm_inf, pos_pm_inf));
    ASSERT(arb_overlaps(pos_pm_inf, neg_pm_inf));
    ASSERT(arb_overlaps(pos_pm_inf, indet_exact));
    ASSERT(arb_overlaps(pos_pm_inf, indet_pos_rad));
    ASSERT(arb_overlaps(pos_pm_inf, indet_inf_rad));
    ASSERT(arb_overlaps(neg_pm_inf, zero));
    ASSERT(arb_overlaps(neg_pm_inf, pos));
    ASSERT(arb_overlaps(neg_pm_inf, neg));
    ASSERT(arb_overlaps(neg_pm_inf, pos_inf));
    ASSERT(arb_overlaps(neg_pm_inf, neg_inf));
    ASSERT(arb_overlaps(neg_pm_inf, pos_inf_err));
    ASSERT(arb_overlaps(neg_pm_inf, neg_inf_err));
    ASSERT(arb_overlaps(neg_pm_inf, zero_pm_inf));
    ASSERT(arb_overlaps(neg_pm_inf, pos_pm_inf));
    ASSERT(arb_overlaps(neg_pm_inf, neg_pm_inf));
    ASSERT(arb_overlaps(neg_pm_inf, indet_exact));
    ASSERT(arb_overlaps(neg_pm_inf, indet_pos_rad));
    ASSERT(arb_overlaps(neg_pm_inf, indet_inf_rad));
    ASSERT(arb_overlaps(indet_exact, zero));
    ASSERT(arb_overlaps(indet_exact, pos));
    ASSERT(arb_overlaps(indet_exact, neg));
    ASSERT(arb_overlaps(indet_exact, pos_inf));
    ASSERT(arb_overlaps(indet_exact, neg_inf));
    ASSERT(arb_overlaps(indet_exact, pos_inf_err));
    ASSERT(arb_overlaps(indet_exact, neg_inf_err));
    ASSERT(arb_overlaps(indet_exact, zero_pm_inf));
    ASSERT(arb_overlaps(indet_exact, pos_pm_inf));
    ASSERT(arb_overlaps(indet_exact, neg_pm_inf));
    ASSERT(arb_overlaps(indet_exact, indet_exact));
    ASSERT(arb_overlaps(indet_exact, indet_pos_rad));
    ASSERT(arb_overlaps(indet_exact, indet_inf_rad));
    ASSERT(arb_overlaps(indet_pos_rad, zero));
    ASSERT(arb_overlaps(indet_pos_rad, pos));
    ASSERT(arb_overlaps(indet_pos_rad, neg));
    ASSERT(arb_overlaps(indet_pos_rad, pos_inf));
    ASSERT(arb_overlaps(indet_pos_rad, neg_inf));
    ASSERT(arb_overlaps(indet_pos_rad, pos_inf_err));
    ASSERT(arb_overlaps(indet_pos_rad, neg_inf_err));
    ASSERT(arb_overlaps(indet_pos_rad, zero_pm_inf));
    ASSERT(arb_overlaps(indet_pos_rad, pos_pm_inf));
    ASSERT(arb_overlaps(indet_pos_rad, neg_pm_inf));
    ASSERT(arb_overlaps(indet_pos_rad, indet_exact));
    ASSERT(arb_overlaps(indet_pos_rad, indet_pos_rad));
    ASSERT(arb_overlaps(indet_pos_rad, indet_inf_rad));
    ASSERT(arb_overlaps(indet_inf_rad, zero));
    ASSERT(arb_overlaps(indet_inf_rad, pos));
    ASSERT(arb_overlaps(indet_inf_rad, neg));
    ASSERT(arb_overlaps(indet_inf_rad, pos_inf));
    ASSERT(arb_overlaps(indet_inf_rad, neg_inf));
    ASSERT(arb_overlaps(indet_inf_rad, pos_inf_err));
    ASSERT(arb_overlaps(indet_inf_rad, neg_inf_err));
    ASSERT(arb_overlaps(indet_inf_rad, zero_pm_inf));
    ASSERT(arb_overlaps(indet_inf_rad, pos_pm_inf));
    ASSERT(arb_overlaps(indet_inf_rad, neg_pm_inf));
    ASSERT(arb_overlaps(indet_inf_rad, indet_exact));
    ASSERT(arb_overlaps(indet_inf_rad, indet_pos_rad));
    ASSERT(arb_overlaps(indet_inf_rad, indet_inf_rad));

    {
        fmpz_t t;
        fmpz_init(t);

        ASSERT(arb_get_unique_fmpz(t, zero));
        ASSERT(!arb_get_unique_fmpz(t, pos_inf));
        ASSERT(!arb_get_unique_fmpz(t, neg_inf));
        ASSERT(!arb_get_unique_fmpz(t, pos_inf_err));
        ASSERT(!arb_get_unique_fmpz(t, neg_inf_err));
        ASSERT(!arb_get_unique_fmpz(t, zero_pm_inf));
        ASSERT(!arb_get_unique_fmpz(t, pos_pm_inf));
        ASSERT(!arb_get_unique_fmpz(t, neg_pm_inf));
        ASSERT(!arb_get_unique_fmpz(t, indet_exact));
        ASSERT(!arb_get_unique_fmpz(t, indet_pos_rad));
        ASSERT(!arb_get_unique_fmpz(t, indet_inf_rad));

        fmpz_clear(t);
    }

    {
        arf_t b;
        slong wp = 30;

        arf_init(b);

        arb_get_abs_ubound_arf(b, zero, wp); ASSERT(arf_is_zero(b));
        arb_get_abs_ubound_arf(b, pos, wp); ASSERT(arf_sgn(b) > 0);
        arb_get_abs_ubound_arf(b, neg, wp); ASSERT(arf_sgn(b) > 0);
        arb_get_abs_ubound_arf(b, pos_inf, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_ubound_arf(b, neg_inf, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_ubound_arf(b, pos_inf_err, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_ubound_arf(b, neg_inf_err, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_ubound_arf(b, zero_pm_inf, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_ubound_arf(b, indet_exact, wp); ASSERT(arf_is_nan(b));
        arb_get_abs_ubound_arf(b, indet_pos_rad, wp); ASSERT(arf_is_nan(b));
        arb_get_abs_ubound_arf(b, indet_inf_rad, wp); ASSERT(arf_is_nan(b));

        arb_get_abs_lbound_arf(b, zero, wp); ASSERT(arf_is_zero(b));
        arb_get_abs_lbound_arf(b, pos, wp); ASSERT(arf_sgn(b) > 0);
        arb_get_abs_lbound_arf(b, neg, wp); ASSERT(arf_sgn(b) > 0);
        arb_get_abs_lbound_arf(b, pos_inf, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_lbound_arf(b, neg_inf, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_lbound_arf(b, pos_inf_err, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_lbound_arf(b, neg_inf_err, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_abs_lbound_arf(b, zero_pm_inf, wp); ASSERT(arf_is_zero(b));
        arb_get_abs_lbound_arf(b, indet_exact, wp); ASSERT(arf_is_nan(b));
        arb_get_abs_lbound_arf(b, indet_pos_rad, wp); ASSERT(arf_is_nan(b));
        arb_get_abs_lbound_arf(b, indet_inf_rad, wp); ASSERT(arf_is_nan(b));

        arb_get_ubound_arf(b, zero, wp); ASSERT(arf_is_zero(b));
        arb_get_ubound_arf(b, pos, wp); ASSERT(arf_sgn(b) > 0);
        arb_get_ubound_arf(b, pos_inf, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_ubound_arf(b, neg_inf, wp); ASSERT(arf_is_neg_inf(b));
        arb_get_ubound_arf(b, pos_inf_err, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_ubound_arf(b, neg_inf_err, wp); ASSERT(arf_is_neg_inf(b));
        arb_get_ubound_arf(b, zero_pm_inf, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_ubound_arf(b, indet_exact, wp); ASSERT(arf_is_nan(b));
        arb_get_ubound_arf(b, indet_pos_rad, wp); ASSERT(arf_is_nan(b));
        arb_get_ubound_arf(b, indet_inf_rad, wp); ASSERT(arf_is_nan(b));

        arb_get_lbound_arf(b, zero, wp); ASSERT(arf_is_zero(b));
        arb_get_lbound_arf(b, neg, wp); ASSERT(arf_sgn(b) < 0);
        arb_get_lbound_arf(b, pos_inf, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_lbound_arf(b, neg_inf, wp); ASSERT(arf_is_neg_inf(b));
        arb_get_lbound_arf(b, pos_inf_err, wp); ASSERT(arf_is_pos_inf(b));
        arb_get_lbound_arf(b, neg_inf_err, wp); ASSERT(arf_is_neg_inf(b));
        arb_get_lbound_arf(b, zero_pm_inf, wp); ASSERT(arf_is_neg_inf(b));
        arb_get_lbound_arf(b, indet_exact, wp); ASSERT(arf_is_nan(b));
        arb_get_lbound_arf(b, indet_pos_rad, wp); ASSERT(arf_is_nan(b));
        arb_get_lbound_arf(b, indet_inf_rad, wp); ASSERT(arf_is_nan(b));

        arf_clear(b);
    }

    arb_clear(zero);
    arb_clear(pos);
    arb_clear(neg);
    arb_clear(pos_inf);
    arb_clear(neg_inf);
    arb_clear(pos_inf_err);
    arb_clear(neg_inf_err);
    arb_clear(zero_pm_inf);
    arb_clear(pos_pm_inf);
    arb_clear(neg_pm_inf);
    arb_clear(indet_exact);
    arb_clear(indet_pos_rad);
    arb_clear(indet_inf_rad);

    TEST_FUNCTION_END(state);
}