nonany 0.3.0

Integer types with customizable niche values
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
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
use core::{fmt::Write, str};
use impls::impls;

struct FormatBuffer {
    buffer: [u8;4096],
    offset: usize
}

impl FormatBuffer {
    pub fn as_str(&self) -> &str {
        str::from_utf8(&self.buffer[0..self.offset]).unwrap()
    }
}

impl Default for FormatBuffer {
    fn default() -> Self {
        Self {
            buffer:[(); 4096].map(|_| 0u8),
            offset: Default::default()
        }
    }
}

impl Write for FormatBuffer {
    fn write_str(&mut self, s: &str) -> core::fmt::Result {
        let bytes = s.as_bytes();
        let end = self.offset + bytes.len();
        if end > self.buffer.len() {
            return Err(core::fmt::Error);
        }

        self.buffer[self.offset..end].copy_from_slice(bytes);

        Ok(())
    }
}

macro_rules! test_size {
    (crate::$name:ident, $base:ident) => {
        const _:() = assert!(core::mem::size_of::<Option<crate::$name>>() == core::mem::size_of::<$base>());
    };
    ($name:ident, $base:ident) => {
        const _:() = assert!(core::mem::size_of::<Option<$name>>() == core::mem::size_of::<$base>());
    };
}

macro_rules! test_nonany {
    (i8, $niche:expr, $test:ident) => {
        test_nonany!(NonAnyI8, i8, $niche, $test, true);
    };

    (u8, $niche:expr, $test:ident) => {
        test_nonany!(NonAnyU8, u8, $niche, $test, false);
    };

    ($nonany:ident, $int:ident, $niche:expr, $test:ident, $signed:ident) => {
        #[test]
        fn $test() {
            const NICHE: $int = $niche;
            type NonAny = crate::$nonany::<{ NICHE }>;

            assert_eq!(NonAny::try_from(256), Err($crate::CheckedError::Overflow));
            assert_eq!(NonAny::try_from(-256), Err($crate::CheckedError::Overflow));

            for i in $int::MIN..=$int::MAX {
                if i == NICHE {
                    assert_eq!(NonAny::try_from(i), Err($crate::CheckedError::Niche));
                    continue
                }

                let non = NonAny::new(i).unwrap();
                assert_eq!(NonAny::try_from(i).unwrap(), non);

                assert!(PartialEq::eq(&non, &non));
                assert!(!PartialEq::ne(&non, &non));

                assert_eq!(PartialOrd::partial_cmp(&non, &non), Some(core::cmp::Ordering::Equal));
                assert!(!PartialOrd::lt(&non, &non));
                assert!(PartialOrd::le(&non, &non));
                assert!(!PartialOrd::gt(&non, &non));
                assert!(PartialOrd::ge(&non, &non));
                
                assert_eq!(Ord::cmp(&non, &non), core::cmp::Ordering::Equal);
                assert_eq!(Ord::min(non, non), non);
                assert_eq!(Ord::max(non, non), non);
                assert_eq!(Ord::clamp(non, non, non), non);

                if i != $int::MAX && i + 1 != NICHE {
                    let non_plus_1 = NonAny::new(i + 1).unwrap();

                    assert!(!PartialEq::eq(&non, &non_plus_1));
                    assert!(!PartialEq::eq(&non_plus_1, &non));
                    assert!(PartialEq::ne(&non, &non_plus_1));
                    assert!(PartialEq::ne(&non_plus_1, &non));

                    assert_eq!(PartialOrd::partial_cmp(&non, &non_plus_1), Some(core::cmp::Ordering::Less));
                    assert_eq!(PartialOrd::partial_cmp(&non_plus_1, &non), Some(core::cmp::Ordering::Greater));

                    assert!(PartialOrd::lt(&non, &non_plus_1));
                    assert!(!PartialOrd::lt(&non_plus_1, &non));
                    assert!(PartialOrd::le(&non, &non_plus_1));
                    assert!(!PartialOrd::le(&non_plus_1, &non));
                    assert!(!PartialOrd::gt(&non, &non_plus_1));
                    assert!(PartialOrd::gt(&non_plus_1, &non));
                    assert!(!PartialOrd::ge(&non, &non_plus_1));
                    assert!(PartialOrd::ge(&non_plus_1, &non));
                
                    assert_eq!(Ord::cmp(&non, &non_plus_1), core::cmp::Ordering::Less);
                    assert_eq!(Ord::cmp(&non_plus_1, &non), core::cmp::Ordering::Greater);
                    assert_eq!(Ord::min(non, non_plus_1), non);
                    assert_eq!(Ord::min(non_plus_1, non), non);
                    assert_eq!(Ord::max(non, non_plus_1), non_plus_1);
                    assert_eq!(Ord::max(non_plus_1, non), non_plus_1);
                    assert_eq!(Ord::clamp(non, non, non_plus_1), non);
                    assert_eq!(Ord::clamp(non_plus_1, non, non_plus_1), non_plus_1);
                    assert_eq!(Ord::clamp(non, non_plus_1, non_plus_1), non_plus_1);
                    assert_eq!(Ord::clamp(non_plus_1, non, non), non);
                }

                let mut non_buffer = FormatBuffer::default();
                let mut i_buffer = FormatBuffer::default();

                macro_rules! format_str { () => { "{0}, {0:?}, {0:x}, {0:X}, {0:#x}, {0:#X}, {0:o}, {0:b}, {0:e}, {0:E}" } }

                core::write!(non_buffer, format_str!(), non).unwrap();
                core::write!(i_buffer, format_str!(), i).unwrap();

                assert_eq!(non_buffer.as_str(), i_buffer.as_str());
            }
        }
        
        const _: () = {
            const NICHE: $int = $niche;
            type NonAny = crate::$nonany::<{ NICHE }>;
            test_size!(NonAny, $int);

            let mut i = $int::MIN;
            let mut first = true;
            loop {
                if first {
                    first = false;
                } else {
                    if i == $int::MAX {
                        break;
                    }
                    i += 1;
                }

                let non = NonAny::new(i);

                let non = match non {
                    Some(non) => non,
                    None => {
                        assert!(i == NICHE);
                        continue;
                    }
                };

                assert!(non.get() == i);
                assert!(non.0.get() == i ^ NICHE);
                
                assert!(unsafe { NonAny::new_unchecked(i).get() } == non.get());

                test_nonany!(@signed, $signed, $int, NICHE, non, i);
            };
        };
    };

    (@signed, true, $int:ident, $niche:ident, $non:ident, $i:ident) => {
        assert!($non.is_positive() == $i.is_positive());
        assert!($non.is_negative() == $i.is_negative());

        if $i == $int::MIN {
             match $non.checked_abs() {
                Ok(_) => panic!(),
                Err(err) => match err {
                    crate::CheckedError::Overflow => (),
                    crate::CheckedError::Niche => panic!()
                }
            };
        } else if $i < 0 && $i.abs() == $niche {
            match $non.checked_abs() {
                Ok(_) => panic!(),
                Err(err) => match err {
                    crate::CheckedError::Overflow => panic!(),
                    crate::CheckedError::Niche => ()
                }
            };
        } else {
            let abs = match $non.checked_abs() {
                Ok(abs) => abs,
                Err(err) => match err {
                    crate::CheckedError::Overflow => panic!(),
                    crate::CheckedError::Niche => panic!()
                }
            };
            assert!(abs.get() == $i.abs())
        };
    };

    (@signed, false, $non:ident, $int:ident, $i:ident, $niche:ident) => {};
}

test_size!(crate::NonZeroI8, i8);
test_size!(crate::NonZeroI16, i16);
test_size!(crate::NonZeroI32, i32);
test_size!(crate::NonZeroI64, i64);
test_size!(crate::NonZeroI128, i128);
test_size!(crate::NonZeroIsize, isize);

test_size!(crate::NonMinI8, i8);
test_size!(crate::NonMinI16, i16);
test_size!(crate::NonMinI32, i32);
test_size!(crate::NonMinI64, i64);
test_size!(crate::NonMinI128, i128);
test_size!(crate::NonMinIsize, isize);

test_size!(crate::NonMaxI8, i8);
test_size!(crate::NonMaxI16, i16);
test_size!(crate::NonMaxI32, i32);
test_size!(crate::NonMaxI64, i64);
test_size!(crate::NonMaxI128, i128);
test_size!(crate::NonMaxIsize, isize);

test_size!(crate::NonZeroU8, u8);
test_size!(crate::NonZeroU16, u16);
test_size!(crate::NonZeroU32, u32);
test_size!(crate::NonZeroU64, u64);
test_size!(crate::NonZeroU128, u128);
test_size!(crate::NonZeroUsize, usize);

test_size!(crate::NonMinU8, u8);
test_size!(crate::NonMinU16, u16);
test_size!(crate::NonMinU32, u32);
test_size!(crate::NonMinU64, u64);
test_size!(crate::NonMinU128, u128);
test_size!(crate::NonMinUsize, usize);

test_size!(crate::NonMaxU8, u8);
test_size!(crate::NonMaxU16, u16);
test_size!(crate::NonMaxU32, u32);
test_size!(crate::NonMaxU64, u64);
test_size!(crate::NonMaxU128, u128);
test_size!(crate::NonMaxUsize, usize);

macro_rules! test_from_int {
    ($nonany:ident) => {
        const _: () = assert!(impls!($crate::$nonany: !From<i8> & !From<i16> & !From<i32> & !From<i64> & !From<i128> & !From<isize>));
        const _: () = assert!(impls!($crate::$nonany: !From<u8> & !From<u16> & !From<u32> & !From<u64> & !From<u128> & !From<usize>));
        const _: () = assert!(impls!($crate::$nonany: TryFrom<i8> & TryFrom<i16> & TryFrom<i32> & TryFrom<i64> & TryFrom<i128> & TryFrom<isize>));
        const _: () = assert!(impls!($crate::$nonany: TryFrom<u8> & TryFrom<u16> & TryFrom<u32> & TryFrom<u64> & TryFrom<u128> & TryFrom<usize>));
        const _: () = assert!(impls!($crate::$nonany: TryFrom<$crate::NonZeroI8> & TryFrom<$crate::NonZeroI16> & TryFrom<$crate::NonZeroI32> & TryFrom<$crate::NonZeroI64> & TryFrom<$crate::NonZeroI128> & TryFrom<$crate::NonZeroIsize>));
        const _: () = assert!(impls!($crate::$nonany: TryFrom<$crate::NonZeroU8> & TryFrom<$crate::NonZeroU16> & TryFrom<$crate::NonZeroU32> & TryFrom<$crate::NonZeroU64> & TryFrom<$crate::NonZeroU128> & TryFrom<$crate::NonZeroUsize>));
        const _: () = assert!(impls!($crate::$nonany: TryFrom<core::num::NonZeroI8> & TryFrom<core::num::NonZeroI16> & TryFrom<core::num::NonZeroI32> & TryFrom<core::num::NonZeroI64> & TryFrom<core::num::NonZeroI128> & TryFrom<core::num::NonZeroIsize>));
        const _: () = assert!(impls!($crate::$nonany: TryFrom<core::num::NonZeroU8> & TryFrom<core::num::NonZeroU16> & TryFrom<core::num::NonZeroU32> & TryFrom<core::num::NonZeroU64> & TryFrom<core::num::NonZeroU128> & TryFrom<core::num::NonZeroUsize>));
    };
}

test_from_int!(NonZeroI8);
test_from_int!(NonZeroI16);
test_from_int!(NonZeroI32);
test_from_int!(NonZeroI64);
test_from_int!(NonZeroI128);
test_from_int!(NonZeroIsize);

test_from_int!(NonZeroU8);
test_from_int!(NonZeroU16);
test_from_int!(NonZeroU32);
test_from_int!(NonZeroU64);
test_from_int!(NonZeroU128);
test_from_int!(NonZeroUsize);

test_nonany!(i8, -128i8, test_nonanyi_0);
test_nonany!(i8, -127i8, test_nonanyi_1);
test_nonany!(i8, -126i8, test_nonanyi_2);
test_nonany!(i8, -125i8, test_nonanyi_3);
test_nonany!(i8, -124i8, test_nonanyi_4);
test_nonany!(i8, -123i8, test_nonanyi_5);
test_nonany!(i8, -122i8, test_nonanyi_6);
test_nonany!(i8, -121i8, test_nonanyi_7);
test_nonany!(i8, -120i8, test_nonanyi_8);
test_nonany!(i8, -119i8, test_nonanyi_9);
test_nonany!(i8, -118i8, test_nonanyi_10);
test_nonany!(i8, -117i8, test_nonanyi_11);
test_nonany!(i8, -116i8, test_nonanyi_12);
test_nonany!(i8, -115i8, test_nonanyi_13);
test_nonany!(i8, -114i8, test_nonanyi_14);
test_nonany!(i8, -113i8, test_nonanyi_15);
test_nonany!(i8, -112i8, test_nonanyi_16);
test_nonany!(i8, -111i8, test_nonanyi_17);
test_nonany!(i8, -110i8, test_nonanyi_18);
test_nonany!(i8, -109i8, test_nonanyi_19);
test_nonany!(i8, -108i8, test_nonanyi_20);
test_nonany!(i8, -107i8, test_nonanyi_21);
test_nonany!(i8, -106i8, test_nonanyi_22);
test_nonany!(i8, -105i8, test_nonanyi_23);
test_nonany!(i8, -104i8, test_nonanyi_24);
test_nonany!(i8, -103i8, test_nonanyi_25);
test_nonany!(i8, -102i8, test_nonanyi_26);
test_nonany!(i8, -101i8, test_nonanyi_27);
test_nonany!(i8, -100i8, test_nonanyi_28);
test_nonany!(i8, -99i8, test_nonanyi_29);
test_nonany!(i8, -98i8, test_nonanyi_30);
test_nonany!(i8, -97i8, test_nonanyi_31);
test_nonany!(i8, -96i8, test_nonanyi_32);
test_nonany!(i8, -95i8, test_nonanyi_33);
test_nonany!(i8, -94i8, test_nonanyi_34);
test_nonany!(i8, -93i8, test_nonanyi_35);
test_nonany!(i8, -92i8, test_nonanyi_36);
test_nonany!(i8, -91i8, test_nonanyi_37);
test_nonany!(i8, -90i8, test_nonanyi_38);
test_nonany!(i8, -89i8, test_nonanyi_39);
test_nonany!(i8, -88i8, test_nonanyi_40);
test_nonany!(i8, -87i8, test_nonanyi_41);
test_nonany!(i8, -86i8, test_nonanyi_42);
test_nonany!(i8, -85i8, test_nonanyi_43);
test_nonany!(i8, -84i8, test_nonanyi_44);
test_nonany!(i8, -83i8, test_nonanyi_45);
test_nonany!(i8, -82i8, test_nonanyi_46);
test_nonany!(i8, -81i8, test_nonanyi_47);
test_nonany!(i8, -80i8, test_nonanyi_48);
test_nonany!(i8, -79i8, test_nonanyi_49);
test_nonany!(i8, -78i8, test_nonanyi_50);
test_nonany!(i8, -77i8, test_nonanyi_51);
test_nonany!(i8, -76i8, test_nonanyi_52);
test_nonany!(i8, -75i8, test_nonanyi_53);
test_nonany!(i8, -74i8, test_nonanyi_54);
test_nonany!(i8, -73i8, test_nonanyi_55);
test_nonany!(i8, -72i8, test_nonanyi_56);
test_nonany!(i8, -71i8, test_nonanyi_57);
test_nonany!(i8, -70i8, test_nonanyi_58);
test_nonany!(i8, -69i8, test_nonanyi_59);
test_nonany!(i8, -68i8, test_nonanyi_60);
test_nonany!(i8, -67i8, test_nonanyi_61);
test_nonany!(i8, -66i8, test_nonanyi_62);
test_nonany!(i8, -65i8, test_nonanyi_63);
test_nonany!(i8, -64i8, test_nonanyi_64);
test_nonany!(i8, -63i8, test_nonanyi_65);
test_nonany!(i8, -62i8, test_nonanyi_66);
test_nonany!(i8, -61i8, test_nonanyi_67);
test_nonany!(i8, -60i8, test_nonanyi_68);
test_nonany!(i8, -59i8, test_nonanyi_69);
test_nonany!(i8, -58i8, test_nonanyi_70);
test_nonany!(i8, -57i8, test_nonanyi_71);
test_nonany!(i8, -56i8, test_nonanyi_72);
test_nonany!(i8, -55i8, test_nonanyi_73);
test_nonany!(i8, -54i8, test_nonanyi_74);
test_nonany!(i8, -53i8, test_nonanyi_75);
test_nonany!(i8, -52i8, test_nonanyi_76);
test_nonany!(i8, -51i8, test_nonanyi_77);
test_nonany!(i8, -50i8, test_nonanyi_78);
test_nonany!(i8, -49i8, test_nonanyi_79);
test_nonany!(i8, -48i8, test_nonanyi_80);
test_nonany!(i8, -47i8, test_nonanyi_81);
test_nonany!(i8, -46i8, test_nonanyi_82);
test_nonany!(i8, -45i8, test_nonanyi_83);
test_nonany!(i8, -44i8, test_nonanyi_84);
test_nonany!(i8, -43i8, test_nonanyi_85);
test_nonany!(i8, -42i8, test_nonanyi_86);
test_nonany!(i8, -41i8, test_nonanyi_87);
test_nonany!(i8, -40i8, test_nonanyi_88);
test_nonany!(i8, -39i8, test_nonanyi_89);
test_nonany!(i8, -38i8, test_nonanyi_90);
test_nonany!(i8, -37i8, test_nonanyi_91);
test_nonany!(i8, -36i8, test_nonanyi_92);
test_nonany!(i8, -35i8, test_nonanyi_93);
test_nonany!(i8, -34i8, test_nonanyi_94);
test_nonany!(i8, -33i8, test_nonanyi_95);
test_nonany!(i8, -32i8, test_nonanyi_96);
test_nonany!(i8, -31i8, test_nonanyi_97);
test_nonany!(i8, -30i8, test_nonanyi_98);
test_nonany!(i8, -29i8, test_nonanyi_99);
test_nonany!(i8, -28i8, test_nonanyi_100);
test_nonany!(i8, -27i8, test_nonanyi_101);
test_nonany!(i8, -26i8, test_nonanyi_102);
test_nonany!(i8, -25i8, test_nonanyi_103);
test_nonany!(i8, -24i8, test_nonanyi_104);
test_nonany!(i8, -23i8, test_nonanyi_105);
test_nonany!(i8, -22i8, test_nonanyi_106);
test_nonany!(i8, -21i8, test_nonanyi_107);
test_nonany!(i8, -20i8, test_nonanyi_108);
test_nonany!(i8, -19i8, test_nonanyi_109);
test_nonany!(i8, -18i8, test_nonanyi_110);
test_nonany!(i8, -17i8, test_nonanyi_111);
test_nonany!(i8, -16i8, test_nonanyi_112);
test_nonany!(i8, -15i8, test_nonanyi_113);
test_nonany!(i8, -14i8, test_nonanyi_114);
test_nonany!(i8, -13i8, test_nonanyi_115);
test_nonany!(i8, -12i8, test_nonanyi_116);
test_nonany!(i8, -11i8, test_nonanyi_117);
test_nonany!(i8, -10i8, test_nonanyi_118);
test_nonany!(i8, -9i8, test_nonanyi_119);
test_nonany!(i8, -8i8, test_nonanyi_120);
test_nonany!(i8, -7i8, test_nonanyi_121);
test_nonany!(i8, -6i8, test_nonanyi_122);
test_nonany!(i8, -5i8, test_nonanyi_123);
test_nonany!(i8, -4i8, test_nonanyi_124);
test_nonany!(i8, -3i8, test_nonanyi_125);
test_nonany!(i8, -2i8, test_nonanyi_126);
test_nonany!(i8, -1i8, test_nonanyi_127);
test_nonany!(i8, 0i8, test_nonanyi_128);
test_nonany!(i8, 1i8, test_nonanyi_129);
test_nonany!(i8, 2i8, test_nonanyi_130);
test_nonany!(i8, 3i8, test_nonanyi_131);
test_nonany!(i8, 4i8, test_nonanyi_132);
test_nonany!(i8, 5i8, test_nonanyi_133);
test_nonany!(i8, 6i8, test_nonanyi_134);
test_nonany!(i8, 7i8, test_nonanyi_135);
test_nonany!(i8, 8i8, test_nonanyi_136);
test_nonany!(i8, 9i8, test_nonanyi_137);
test_nonany!(i8, 10i8, test_nonanyi_138);
test_nonany!(i8, 11i8, test_nonanyi_139);
test_nonany!(i8, 12i8, test_nonanyi_140);
test_nonany!(i8, 13i8, test_nonanyi_141);
test_nonany!(i8, 14i8, test_nonanyi_142);
test_nonany!(i8, 15i8, test_nonanyi_143);
test_nonany!(i8, 16i8, test_nonanyi_144);
test_nonany!(i8, 17i8, test_nonanyi_145);
test_nonany!(i8, 18i8, test_nonanyi_146);
test_nonany!(i8, 19i8, test_nonanyi_147);
test_nonany!(i8, 20i8, test_nonanyi_148);
test_nonany!(i8, 21i8, test_nonanyi_149);
test_nonany!(i8, 22i8, test_nonanyi_150);
test_nonany!(i8, 23i8, test_nonanyi_151);
test_nonany!(i8, 24i8, test_nonanyi_152);
test_nonany!(i8, 25i8, test_nonanyi_153);
test_nonany!(i8, 26i8, test_nonanyi_154);
test_nonany!(i8, 27i8, test_nonanyi_155);
test_nonany!(i8, 28i8, test_nonanyi_156);
test_nonany!(i8, 29i8, test_nonanyi_157);
test_nonany!(i8, 30i8, test_nonanyi_158);
test_nonany!(i8, 31i8, test_nonanyi_159);
test_nonany!(i8, 32i8, test_nonanyi_160);
test_nonany!(i8, 33i8, test_nonanyi_161);
test_nonany!(i8, 34i8, test_nonanyi_162);
test_nonany!(i8, 35i8, test_nonanyi_163);
test_nonany!(i8, 36i8, test_nonanyi_164);
test_nonany!(i8, 37i8, test_nonanyi_165);
test_nonany!(i8, 38i8, test_nonanyi_166);
test_nonany!(i8, 39i8, test_nonanyi_167);
test_nonany!(i8, 40i8, test_nonanyi_168);
test_nonany!(i8, 41i8, test_nonanyi_169);
test_nonany!(i8, 42i8, test_nonanyi_170);
test_nonany!(i8, 43i8, test_nonanyi_171);
test_nonany!(i8, 44i8, test_nonanyi_172);
test_nonany!(i8, 45i8, test_nonanyi_173);
test_nonany!(i8, 46i8, test_nonanyi_174);
test_nonany!(i8, 47i8, test_nonanyi_175);
test_nonany!(i8, 48i8, test_nonanyi_176);
test_nonany!(i8, 49i8, test_nonanyi_177);
test_nonany!(i8, 50i8, test_nonanyi_178);
test_nonany!(i8, 51i8, test_nonanyi_179);
test_nonany!(i8, 52i8, test_nonanyi_180);
test_nonany!(i8, 53i8, test_nonanyi_181);
test_nonany!(i8, 54i8, test_nonanyi_182);
test_nonany!(i8, 55i8, test_nonanyi_183);
test_nonany!(i8, 56i8, test_nonanyi_184);
test_nonany!(i8, 57i8, test_nonanyi_185);
test_nonany!(i8, 58i8, test_nonanyi_186);
test_nonany!(i8, 59i8, test_nonanyi_187);
test_nonany!(i8, 60i8, test_nonanyi_188);
test_nonany!(i8, 61i8, test_nonanyi_189);
test_nonany!(i8, 62i8, test_nonanyi_190);
test_nonany!(i8, 63i8, test_nonanyi_191);
test_nonany!(i8, 64i8, test_nonanyi_192);
test_nonany!(i8, 65i8, test_nonanyi_193);
test_nonany!(i8, 66i8, test_nonanyi_194);
test_nonany!(i8, 67i8, test_nonanyi_195);
test_nonany!(i8, 68i8, test_nonanyi_196);
test_nonany!(i8, 69i8, test_nonanyi_197);
test_nonany!(i8, 70i8, test_nonanyi_198);
test_nonany!(i8, 71i8, test_nonanyi_199);
test_nonany!(i8, 72i8, test_nonanyi_200);
test_nonany!(i8, 73i8, test_nonanyi_201);
test_nonany!(i8, 74i8, test_nonanyi_202);
test_nonany!(i8, 75i8, test_nonanyi_203);
test_nonany!(i8, 76i8, test_nonanyi_204);
test_nonany!(i8, 77i8, test_nonanyi_205);
test_nonany!(i8, 78i8, test_nonanyi_206);
test_nonany!(i8, 79i8, test_nonanyi_207);
test_nonany!(i8, 80i8, test_nonanyi_208);
test_nonany!(i8, 81i8, test_nonanyi_209);
test_nonany!(i8, 82i8, test_nonanyi_210);
test_nonany!(i8, 83i8, test_nonanyi_211);
test_nonany!(i8, 84i8, test_nonanyi_212);
test_nonany!(i8, 85i8, test_nonanyi_213);
test_nonany!(i8, 86i8, test_nonanyi_214);
test_nonany!(i8, 87i8, test_nonanyi_215);
test_nonany!(i8, 88i8, test_nonanyi_216);
test_nonany!(i8, 89i8, test_nonanyi_217);
test_nonany!(i8, 90i8, test_nonanyi_218);
test_nonany!(i8, 91i8, test_nonanyi_219);
test_nonany!(i8, 92i8, test_nonanyi_220);
test_nonany!(i8, 93i8, test_nonanyi_221);
test_nonany!(i8, 94i8, test_nonanyi_222);
test_nonany!(i8, 95i8, test_nonanyi_223);
test_nonany!(i8, 96i8, test_nonanyi_224);
test_nonany!(i8, 97i8, test_nonanyi_225);
test_nonany!(i8, 98i8, test_nonanyi_226);
test_nonany!(i8, 99i8, test_nonanyi_227);
test_nonany!(i8, 100i8, test_nonanyi_228);
test_nonany!(i8, 101i8, test_nonanyi_229);
test_nonany!(i8, 102i8, test_nonanyi_230);
test_nonany!(i8, 103i8, test_nonanyi_231);
test_nonany!(i8, 104i8, test_nonanyi_232);
test_nonany!(i8, 105i8, test_nonanyi_233);
test_nonany!(i8, 106i8, test_nonanyi_234);
test_nonany!(i8, 107i8, test_nonanyi_235);
test_nonany!(i8, 108i8, test_nonanyi_236);
test_nonany!(i8, 109i8, test_nonanyi_237);
test_nonany!(i8, 110i8, test_nonanyi_238);
test_nonany!(i8, 111i8, test_nonanyi_239);
test_nonany!(i8, 112i8, test_nonanyi_240);
test_nonany!(i8, 113i8, test_nonanyi_241);
test_nonany!(i8, 114i8, test_nonanyi_242);
test_nonany!(i8, 115i8, test_nonanyi_243);
test_nonany!(i8, 116i8, test_nonanyi_244);
test_nonany!(i8, 117i8, test_nonanyi_245);
test_nonany!(i8, 118i8, test_nonanyi_246);
test_nonany!(i8, 119i8, test_nonanyi_247);
test_nonany!(i8, 120i8, test_nonanyi_248);
test_nonany!(i8, 121i8, test_nonanyi_249);
test_nonany!(i8, 122i8, test_nonanyi_250);
test_nonany!(i8, 123i8, test_nonanyi_251);
test_nonany!(i8, 124i8, test_nonanyi_252);
test_nonany!(i8, 125i8, test_nonanyi_253);
test_nonany!(i8, 126i8, test_nonanyi_254);
test_nonany!(i8, 127i8, test_nonanyi_255);
test_nonany!(u8, 0u8, test_nonanyu_0);
test_nonany!(u8, 1u8, test_nonanyu_1);
test_nonany!(u8, 2u8, test_nonanyu_2);
test_nonany!(u8, 3u8, test_nonanyu_3);
test_nonany!(u8, 4u8, test_nonanyu_4);
test_nonany!(u8, 5u8, test_nonanyu_5);
test_nonany!(u8, 6u8, test_nonanyu_6);
test_nonany!(u8, 7u8, test_nonanyu_7);
test_nonany!(u8, 8u8, test_nonanyu_8);
test_nonany!(u8, 9u8, test_nonanyu_9);
test_nonany!(u8, 10u8, test_nonanyu_10);
test_nonany!(u8, 11u8, test_nonanyu_11);
test_nonany!(u8, 12u8, test_nonanyu_12);
test_nonany!(u8, 13u8, test_nonanyu_13);
test_nonany!(u8, 14u8, test_nonanyu_14);
test_nonany!(u8, 15u8, test_nonanyu_15);
test_nonany!(u8, 16u8, test_nonanyu_16);
test_nonany!(u8, 17u8, test_nonanyu_17);
test_nonany!(u8, 18u8, test_nonanyu_18);
test_nonany!(u8, 19u8, test_nonanyu_19);
test_nonany!(u8, 20u8, test_nonanyu_20);
test_nonany!(u8, 21u8, test_nonanyu_21);
test_nonany!(u8, 22u8, test_nonanyu_22);
test_nonany!(u8, 23u8, test_nonanyu_23);
test_nonany!(u8, 24u8, test_nonanyu_24);
test_nonany!(u8, 25u8, test_nonanyu_25);
test_nonany!(u8, 26u8, test_nonanyu_26);
test_nonany!(u8, 27u8, test_nonanyu_27);
test_nonany!(u8, 28u8, test_nonanyu_28);
test_nonany!(u8, 29u8, test_nonanyu_29);
test_nonany!(u8, 30u8, test_nonanyu_30);
test_nonany!(u8, 31u8, test_nonanyu_31);
test_nonany!(u8, 32u8, test_nonanyu_32);
test_nonany!(u8, 33u8, test_nonanyu_33);
test_nonany!(u8, 34u8, test_nonanyu_34);
test_nonany!(u8, 35u8, test_nonanyu_35);
test_nonany!(u8, 36u8, test_nonanyu_36);
test_nonany!(u8, 37u8, test_nonanyu_37);
test_nonany!(u8, 38u8, test_nonanyu_38);
test_nonany!(u8, 39u8, test_nonanyu_39);
test_nonany!(u8, 40u8, test_nonanyu_40);
test_nonany!(u8, 41u8, test_nonanyu_41);
test_nonany!(u8, 42u8, test_nonanyu_42);
test_nonany!(u8, 43u8, test_nonanyu_43);
test_nonany!(u8, 44u8, test_nonanyu_44);
test_nonany!(u8, 45u8, test_nonanyu_45);
test_nonany!(u8, 46u8, test_nonanyu_46);
test_nonany!(u8, 47u8, test_nonanyu_47);
test_nonany!(u8, 48u8, test_nonanyu_48);
test_nonany!(u8, 49u8, test_nonanyu_49);
test_nonany!(u8, 50u8, test_nonanyu_50);
test_nonany!(u8, 51u8, test_nonanyu_51);
test_nonany!(u8, 52u8, test_nonanyu_52);
test_nonany!(u8, 53u8, test_nonanyu_53);
test_nonany!(u8, 54u8, test_nonanyu_54);
test_nonany!(u8, 55u8, test_nonanyu_55);
test_nonany!(u8, 56u8, test_nonanyu_56);
test_nonany!(u8, 57u8, test_nonanyu_57);
test_nonany!(u8, 58u8, test_nonanyu_58);
test_nonany!(u8, 59u8, test_nonanyu_59);
test_nonany!(u8, 60u8, test_nonanyu_60);
test_nonany!(u8, 61u8, test_nonanyu_61);
test_nonany!(u8, 62u8, test_nonanyu_62);
test_nonany!(u8, 63u8, test_nonanyu_63);
test_nonany!(u8, 64u8, test_nonanyu_64);
test_nonany!(u8, 65u8, test_nonanyu_65);
test_nonany!(u8, 66u8, test_nonanyu_66);
test_nonany!(u8, 67u8, test_nonanyu_67);
test_nonany!(u8, 68u8, test_nonanyu_68);
test_nonany!(u8, 69u8, test_nonanyu_69);
test_nonany!(u8, 70u8, test_nonanyu_70);
test_nonany!(u8, 71u8, test_nonanyu_71);
test_nonany!(u8, 72u8, test_nonanyu_72);
test_nonany!(u8, 73u8, test_nonanyu_73);
test_nonany!(u8, 74u8, test_nonanyu_74);
test_nonany!(u8, 75u8, test_nonanyu_75);
test_nonany!(u8, 76u8, test_nonanyu_76);
test_nonany!(u8, 77u8, test_nonanyu_77);
test_nonany!(u8, 78u8, test_nonanyu_78);
test_nonany!(u8, 79u8, test_nonanyu_79);
test_nonany!(u8, 80u8, test_nonanyu_80);
test_nonany!(u8, 81u8, test_nonanyu_81);
test_nonany!(u8, 82u8, test_nonanyu_82);
test_nonany!(u8, 83u8, test_nonanyu_83);
test_nonany!(u8, 84u8, test_nonanyu_84);
test_nonany!(u8, 85u8, test_nonanyu_85);
test_nonany!(u8, 86u8, test_nonanyu_86);
test_nonany!(u8, 87u8, test_nonanyu_87);
test_nonany!(u8, 88u8, test_nonanyu_88);
test_nonany!(u8, 89u8, test_nonanyu_89);
test_nonany!(u8, 90u8, test_nonanyu_90);
test_nonany!(u8, 91u8, test_nonanyu_91);
test_nonany!(u8, 92u8, test_nonanyu_92);
test_nonany!(u8, 93u8, test_nonanyu_93);
test_nonany!(u8, 94u8, test_nonanyu_94);
test_nonany!(u8, 95u8, test_nonanyu_95);
test_nonany!(u8, 96u8, test_nonanyu_96);
test_nonany!(u8, 97u8, test_nonanyu_97);
test_nonany!(u8, 98u8, test_nonanyu_98);
test_nonany!(u8, 99u8, test_nonanyu_99);
test_nonany!(u8, 100u8, test_nonanyu_100);
test_nonany!(u8, 101u8, test_nonanyu_101);
test_nonany!(u8, 102u8, test_nonanyu_102);
test_nonany!(u8, 103u8, test_nonanyu_103);
test_nonany!(u8, 104u8, test_nonanyu_104);
test_nonany!(u8, 105u8, test_nonanyu_105);
test_nonany!(u8, 106u8, test_nonanyu_106);
test_nonany!(u8, 107u8, test_nonanyu_107);
test_nonany!(u8, 108u8, test_nonanyu_108);
test_nonany!(u8, 109u8, test_nonanyu_109);
test_nonany!(u8, 110u8, test_nonanyu_110);
test_nonany!(u8, 111u8, test_nonanyu_111);
test_nonany!(u8, 112u8, test_nonanyu_112);
test_nonany!(u8, 113u8, test_nonanyu_113);
test_nonany!(u8, 114u8, test_nonanyu_114);
test_nonany!(u8, 115u8, test_nonanyu_115);
test_nonany!(u8, 116u8, test_nonanyu_116);
test_nonany!(u8, 117u8, test_nonanyu_117);
test_nonany!(u8, 118u8, test_nonanyu_118);
test_nonany!(u8, 119u8, test_nonanyu_119);
test_nonany!(u8, 120u8, test_nonanyu_120);
test_nonany!(u8, 121u8, test_nonanyu_121);
test_nonany!(u8, 122u8, test_nonanyu_122);
test_nonany!(u8, 123u8, test_nonanyu_123);
test_nonany!(u8, 124u8, test_nonanyu_124);
test_nonany!(u8, 125u8, test_nonanyu_125);
test_nonany!(u8, 126u8, test_nonanyu_126);
test_nonany!(u8, 127u8, test_nonanyu_127);
test_nonany!(u8, 128u8, test_nonanyu_128);
test_nonany!(u8, 129u8, test_nonanyu_129);
test_nonany!(u8, 130u8, test_nonanyu_130);
test_nonany!(u8, 131u8, test_nonanyu_131);
test_nonany!(u8, 132u8, test_nonanyu_132);
test_nonany!(u8, 133u8, test_nonanyu_133);
test_nonany!(u8, 134u8, test_nonanyu_134);
test_nonany!(u8, 135u8, test_nonanyu_135);
test_nonany!(u8, 136u8, test_nonanyu_136);
test_nonany!(u8, 137u8, test_nonanyu_137);
test_nonany!(u8, 138u8, test_nonanyu_138);
test_nonany!(u8, 139u8, test_nonanyu_139);
test_nonany!(u8, 140u8, test_nonanyu_140);
test_nonany!(u8, 141u8, test_nonanyu_141);
test_nonany!(u8, 142u8, test_nonanyu_142);
test_nonany!(u8, 143u8, test_nonanyu_143);
test_nonany!(u8, 144u8, test_nonanyu_144);
test_nonany!(u8, 145u8, test_nonanyu_145);
test_nonany!(u8, 146u8, test_nonanyu_146);
test_nonany!(u8, 147u8, test_nonanyu_147);
test_nonany!(u8, 148u8, test_nonanyu_148);
test_nonany!(u8, 149u8, test_nonanyu_149);
test_nonany!(u8, 150u8, test_nonanyu_150);
test_nonany!(u8, 151u8, test_nonanyu_151);
test_nonany!(u8, 152u8, test_nonanyu_152);
test_nonany!(u8, 153u8, test_nonanyu_153);
test_nonany!(u8, 154u8, test_nonanyu_154);
test_nonany!(u8, 155u8, test_nonanyu_155);
test_nonany!(u8, 156u8, test_nonanyu_156);
test_nonany!(u8, 157u8, test_nonanyu_157);
test_nonany!(u8, 158u8, test_nonanyu_158);
test_nonany!(u8, 159u8, test_nonanyu_159);
test_nonany!(u8, 160u8, test_nonanyu_160);
test_nonany!(u8, 161u8, test_nonanyu_161);
test_nonany!(u8, 162u8, test_nonanyu_162);
test_nonany!(u8, 163u8, test_nonanyu_163);
test_nonany!(u8, 164u8, test_nonanyu_164);
test_nonany!(u8, 165u8, test_nonanyu_165);
test_nonany!(u8, 166u8, test_nonanyu_166);
test_nonany!(u8, 167u8, test_nonanyu_167);
test_nonany!(u8, 168u8, test_nonanyu_168);
test_nonany!(u8, 169u8, test_nonanyu_169);
test_nonany!(u8, 170u8, test_nonanyu_170);
test_nonany!(u8, 171u8, test_nonanyu_171);
test_nonany!(u8, 172u8, test_nonanyu_172);
test_nonany!(u8, 173u8, test_nonanyu_173);
test_nonany!(u8, 174u8, test_nonanyu_174);
test_nonany!(u8, 175u8, test_nonanyu_175);
test_nonany!(u8, 176u8, test_nonanyu_176);
test_nonany!(u8, 177u8, test_nonanyu_177);
test_nonany!(u8, 178u8, test_nonanyu_178);
test_nonany!(u8, 179u8, test_nonanyu_179);
test_nonany!(u8, 180u8, test_nonanyu_180);
test_nonany!(u8, 181u8, test_nonanyu_181);
test_nonany!(u8, 182u8, test_nonanyu_182);
test_nonany!(u8, 183u8, test_nonanyu_183);
test_nonany!(u8, 184u8, test_nonanyu_184);
test_nonany!(u8, 185u8, test_nonanyu_185);
test_nonany!(u8, 186u8, test_nonanyu_186);
test_nonany!(u8, 187u8, test_nonanyu_187);
test_nonany!(u8, 188u8, test_nonanyu_188);
test_nonany!(u8, 189u8, test_nonanyu_189);
test_nonany!(u8, 190u8, test_nonanyu_190);
test_nonany!(u8, 191u8, test_nonanyu_191);
test_nonany!(u8, 192u8, test_nonanyu_192);
test_nonany!(u8, 193u8, test_nonanyu_193);
test_nonany!(u8, 194u8, test_nonanyu_194);
test_nonany!(u8, 195u8, test_nonanyu_195);
test_nonany!(u8, 196u8, test_nonanyu_196);
test_nonany!(u8, 197u8, test_nonanyu_197);
test_nonany!(u8, 198u8, test_nonanyu_198);
test_nonany!(u8, 199u8, test_nonanyu_199);
test_nonany!(u8, 200u8, test_nonanyu_200);
test_nonany!(u8, 201u8, test_nonanyu_201);
test_nonany!(u8, 202u8, test_nonanyu_202);
test_nonany!(u8, 203u8, test_nonanyu_203);
test_nonany!(u8, 204u8, test_nonanyu_204);
test_nonany!(u8, 205u8, test_nonanyu_205);
test_nonany!(u8, 206u8, test_nonanyu_206);
test_nonany!(u8, 207u8, test_nonanyu_207);
test_nonany!(u8, 208u8, test_nonanyu_208);
test_nonany!(u8, 209u8, test_nonanyu_209);
test_nonany!(u8, 210u8, test_nonanyu_210);
test_nonany!(u8, 211u8, test_nonanyu_211);
test_nonany!(u8, 212u8, test_nonanyu_212);
test_nonany!(u8, 213u8, test_nonanyu_213);
test_nonany!(u8, 214u8, test_nonanyu_214);
test_nonany!(u8, 215u8, test_nonanyu_215);
test_nonany!(u8, 216u8, test_nonanyu_216);
test_nonany!(u8, 217u8, test_nonanyu_217);
test_nonany!(u8, 218u8, test_nonanyu_218);
test_nonany!(u8, 219u8, test_nonanyu_219);
test_nonany!(u8, 220u8, test_nonanyu_220);
test_nonany!(u8, 221u8, test_nonanyu_221);
test_nonany!(u8, 222u8, test_nonanyu_222);
test_nonany!(u8, 223u8, test_nonanyu_223);
test_nonany!(u8, 224u8, test_nonanyu_224);
test_nonany!(u8, 225u8, test_nonanyu_225);
test_nonany!(u8, 226u8, test_nonanyu_226);
test_nonany!(u8, 227u8, test_nonanyu_227);
test_nonany!(u8, 228u8, test_nonanyu_228);
test_nonany!(u8, 229u8, test_nonanyu_229);
test_nonany!(u8, 230u8, test_nonanyu_230);
test_nonany!(u8, 231u8, test_nonanyu_231);
test_nonany!(u8, 232u8, test_nonanyu_232);
test_nonany!(u8, 233u8, test_nonanyu_233);
test_nonany!(u8, 234u8, test_nonanyu_234);
test_nonany!(u8, 235u8, test_nonanyu_235);
test_nonany!(u8, 236u8, test_nonanyu_236);
test_nonany!(u8, 237u8, test_nonanyu_237);
test_nonany!(u8, 238u8, test_nonanyu_238);
test_nonany!(u8, 239u8, test_nonanyu_239);
test_nonany!(u8, 240u8, test_nonanyu_240);
test_nonany!(u8, 241u8, test_nonanyu_241);
test_nonany!(u8, 242u8, test_nonanyu_242);
test_nonany!(u8, 243u8, test_nonanyu_243);
test_nonany!(u8, 244u8, test_nonanyu_244);
test_nonany!(u8, 245u8, test_nonanyu_245);
test_nonany!(u8, 246u8, test_nonanyu_246);
test_nonany!(u8, 247u8, test_nonanyu_247);
test_nonany!(u8, 248u8, test_nonanyu_248);
test_nonany!(u8, 249u8, test_nonanyu_249);
test_nonany!(u8, 250u8, test_nonanyu_250);
test_nonany!(u8, 251u8, test_nonanyu_251);
test_nonany!(u8, 252u8, test_nonanyu_252);
test_nonany!(u8, 253u8, test_nonanyu_253);
test_nonany!(u8, 254u8, test_nonanyu_254);
test_nonany!(u8, 255u8, test_nonanyu_255);