1#![cfg_attr(not(test), no_std)]
2#![cfg_attr(feature = "nightly", feature(try_trait_v2))]
3
4mod panic;
5#[macro_use]
6mod anxious_int;
7#[macro_use]
8mod anxious_bitwise_int;
9#[macro_use]
10mod nominal_int;
11#[macro_use]
12mod test;
13
14use panic::Panic;
15
16macro_rules! anxious_int_decl {
17 ($SelfT:ident, $ActualT:ident) => {
18 #[derive(Copy, Clone)]
19 pub struct $SelfT(pub(crate) Result<$ActualT, Panic>);
20 };
21}
22
23anxious_int_decl! {I8, i8}
24anxious_int_decl! {I16, i16}
25anxious_int_decl! {I32, i32}
26anxious_int_decl! {I64, i64}
27anxious_int_decl! {I128, i128}
28anxious_int_decl! {ISize, isize}
29
30anxious_int_impl! {I8, i8, anxious_i8, INom8}
31anxious_int_impl! {I16, i16, anxious_i16, INom16}
32anxious_int_impl! {I32, i32, anxious_i32, INom32}
33anxious_int_impl! {I64, i64, anxious_i64, INom64}
34anxious_int_impl! {I128, i128, anxious_i128, INom128}
35anxious_int_impl! {ISize, isize, anxious_isize, INomSize}
36
37macro_rules! nominal_int_decl {
38 ($SelfT:ident, $ActualT:ident) => {
39 #[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Copy, Clone)]
40 pub struct $SelfT(pub(crate) $ActualT);
41 };
42}
43
44nominal_int_decl! {INom8, i8}
45nominal_int_decl! {INom16, i16}
46nominal_int_decl! {INom32, i32}
47nominal_int_decl! {INom64, i64}
48nominal_int_decl! {INom128, i128}
49nominal_int_decl! {INomSize, isize}
50
51nominal_int_impl! {INom8, i8, nominal_i8}
52nominal_int_impl! {INom16, i16, nominal_i16}
53nominal_int_impl! {INom32, i32, nominal_i32}
54nominal_int_impl! {INom64, i64, nominal_i64}
55nominal_int_impl! {INom128, i128, nominal_i128}
56nominal_int_impl! {INomSize, isize, nominal_isize}
57
58anxious_int_decl! {IBit8, i8}
59anxious_int_decl! {IBit16, i16}
60anxious_int_decl! {IBit32, i32}
61anxious_int_decl! {IBit64, i64}
62anxious_int_decl! {IBit128, i128}
63anxious_int_decl! {IBitSize, isize}
64
65anxious_bitwise_int_impl! {IBit8, i8, anxious_bitwise_i8}
66anxious_bitwise_int_impl! {IBit16, i16, anxious_bitwise_i16}
67anxious_bitwise_int_impl! {IBit32, i32, anxious_bitwise_i32}
68anxious_bitwise_int_impl! {IBit64, i64, anxious_bitwise_i64}
69anxious_bitwise_int_impl! {IBit128, i128, anxious_bitwise_i128}
70anxious_bitwise_int_impl! {IBitSize, isize, anxious_bitwise_isize}
71
72#[cfg(test)]
73mod total_operations {
74 use crate::*;
75 use std::ops::Neg;
76
77 anxious_test_binop! {test_anxious_i8_add, test_i8_add, +}
78 anxious_test_binop! {test_anxious_i8_sub, test_i8_sub, -}
79 anxious_test_binop! {test_anxious_i8_mul, test_i8_mul, *}
80 anxious_test_binop! {test_anxious_i8_div, test_i8_div, /}
81 anxious_test_binop! {test_anxious_i8_rem, test_i8_rem, %}
82
83 anxious_test_binfun! {test_anxious_i8_div_euclid, test_i8_div_eucvlid, div_euclid}
84
85 anxious_test_unaryfun! {test_anxious_i8_neg, test_i8_neg, neg}
86 anxious_test_unaryfun! {test_anxious_i8_abs, test_i8_abs, abs}
87}