oint/
lib.rs

1#![cfg_attr(not(test), no_std)]
2
3#[macro_use]
4mod int_macros;
5#[macro_use]
6mod uint_macros;
7#[macro_use]
8mod test_macros;
9
10macro_rules! oint_decl {
11    ($SelfT:ident, $ActualT:ident) => {
12        #[allow(non_camel_case_types)]
13        #[derive(Debug, Copy, Clone)]
14        pub struct $SelfT(pub(crate) Option<$ActualT>);
15    };
16}
17
18oint_decl! {oi8, i8}
19oint_decl! {oi16, i16}
20oint_decl! {oi32, i32}
21oint_decl! {oi64, i64}
22oint_decl! {oi128, i128}
23oint_decl! {oisize, isize}
24
25oint_decl! {ou8, u8}
26oint_decl! {ou16, u16}
27oint_decl! {ou32, u32}
28oint_decl! {ou64, u64}
29oint_decl! {ou128, u128}
30oint_decl! {ousize, usize}
31
32oint_impl! {oi8, i8, mod_oi8}
33oint_impl! {oi16, i16, mod_oi16}
34oint_impl! {oi32, i32, mod_oi32}
35oint_impl! {oi64, i64, mod_oi64}
36oint_impl! {oi128, i128, mod_oi128}
37oint_impl! {oisize, isize, mod_oisize}
38
39ouint_impl! {ou8, u8, mod_ou8}
40ouint_impl! {ou16, u16, mod_ou16}
41ouint_impl! {ou32, u32, mod_ou32}
42ouint_impl! {ou64, u64, mod_ou64}
43ouint_impl! {ou128, u128, mod_ou128}
44ouint_impl! {ousize, usize, mod_ousize}
45
46#[cfg(test)]
47mod total_operations {
48    use crate::*;
49
50    oint_test_binop! {test_oi8_add, test_i8_add, +}
51    oint_test_binop! {test_oi8_sub, test_i8_sub, -}
52    oint_test_binop! {test_oi8_mul, test_i8_mul, *}
53    oint_test_binop! {test_oi8_div, test_i8_div, /}
54    oint_test_binop! {test_oi8_rem, test_i8_rem, %}
55    oint_test_binop! {test_oi8_shl, test_i8_shl, <<}
56    oint_test_binop! {test_oi8_shr, test_i8_shr, >>}
57
58    oint_test_binfun! {test_oi8_div_euclid, test_i8_div_eucvlid, div_euclid}
59}
60
61#[macro_export]
62macro_rules! structural_eq {
63    ($lhs:expr, $rhs:expr) => {
64        $lhs.structural_eq($rhs)
65    };
66}
67
68#[macro_export]
69macro_rules! structural_ne {
70    ($lhs:expr, $rhs:expr) => {
71        $lhs.structural_ne($rhs)
72    };
73}
74
75#[macro_export]
76macro_rules! indeterminate_eq {
77    ($lhs:expr, $rhs:expr) => {
78        $lhs.indeterminate_eq($rhs)
79    };
80}
81
82#[macro_export]
83macro_rules! indeterminate_ne {
84    ($lhs:expr, $rhs:expr) => {
85        $lhs.indeterminate_ne($rhs)
86    };
87}