ruint/
aliases.rs

1//! Type aliases for common bit sizes of [`Uint`] and [`Bits`].
2use crate::{Bits, Uint};
3
4/// [`Uint`] for `0` bits. Always zero. Similar to `()`.
5pub type U0 = Uint<0, 0>;
6
7/// [`Uint`] for `1` bit. Similar to [`bool`].
8pub type U1 = Uint<1, 1>;
9
10/// [`Uint`] for `8` bits. Similar to [`u8`].
11pub type U8 = Uint<8, 1>;
12
13/// [`Uint`] for `16` bits. Similar to [`u16`].
14pub type U16 = Uint<16, 1>;
15
16/// [`Uint`] for `32` bits. Similar to [`u32`].
17pub type U32 = Uint<32, 1>;
18
19/// [`Uint`] for `64` bits. Similar to [`u64`].
20pub type U64 = Uint<64, 1>;
21
22/// [`Uint`] for `128` bits. Similar to [`u128`].
23pub type U128 = Uint<128, 2>;
24
25macro_rules! bit_alias {
26    ($($name:ident($bits:expr, $limbs:expr);)*) => {$(
27        #[doc = concat!("[`Bits`] for `", stringify!($bits),"` bits.")]
28        pub type $name = Bits<$bits, $limbs>;
29    )*};
30}
31
32bit_alias! {
33    B0(0, 0);
34    B1(1, 1);
35    B8(8, 1);
36    B16(16, 1);
37    B32(32, 1);
38    B64(64, 1);
39    B128(128, 2);
40}
41
42macro_rules! alias {
43    ($($uname:ident $bname:ident ($bits:expr, $limbs:expr);)*) => {$(
44        #[doc = concat!("[`Uint`] for `", stringify!($bits),"` bits.")]
45        pub type $uname = Uint<$bits, $limbs>;
46        #[doc = concat!("[`Bits`] for `", stringify!($bits),"` bits.")]
47        pub type $bname = Bits<$bits, $limbs>;
48    )*};
49}
50
51alias! {
52    U160 B160 (160, 3);
53    U192 B192 (192, 3);
54    U256 B256 (256, 4);
55    U320 B320 (320, 5);
56    U384 B384 (384, 6);
57    U448 B448 (448, 7);
58    U512 B512 (512, 8);
59    U768 B768 (768, 12);
60    U1024 B1024 (1024, 16);
61    U2048 B2048 (2048, 32);
62    U4096 B4096 (4096, 64);
63}
64
65// TODO: I0, I1, I8, ... I4096
66
67#[cfg(test)]
68mod tests {
69    use super::*;
70
71    #[test]
72    const fn instantiate_consts() {
73        let _ = (U0::ZERO, U0::MAX, B0::ZERO);
74        let _ = (U1::ZERO, U1::MAX, B1::ZERO);
75        let _ = (U8::ZERO, U8::MAX, B8::ZERO);
76        let _ = (U16::ZERO, U16::MAX, B16::ZERO);
77        let _ = (U32::ZERO, U32::MAX, B32::ZERO);
78        let _ = (U64::ZERO, U64::MAX, B64::ZERO);
79        let _ = (U128::ZERO, U128::MAX, B128::ZERO);
80        let _ = (U160::ZERO, U160::MAX, B160::ZERO);
81        let _ = (U192::ZERO, U192::MAX, B192::ZERO);
82        let _ = (U256::ZERO, U256::MAX, B256::ZERO);
83        let _ = (U320::ZERO, U320::MAX, B320::ZERO);
84        let _ = (U384::ZERO, U384::MAX, B384::ZERO);
85        let _ = (U448::ZERO, U448::MAX, B448::ZERO);
86        let _ = (U512::ZERO, U512::MAX, B512::ZERO);
87        let _ = (U768::ZERO, U768::MAX, B768::ZERO);
88        let _ = (U1024::ZERO, U1024::MAX, B1024::ZERO);
89        let _ = (U2048::ZERO, U2048::MAX, B2048::ZERO);
90        let _ = (U4096::ZERO, U4096::MAX, B4096::ZERO);
91    }
92}