numera/number/integer/npz/convert/
mod.rs

1// numera::number::integer::npz::convert
2
3#[cfg(test)]
4mod tests;
5
6#[cfg(feature = "try_from")]
7use crate::number::traits::{ConstZero, Ident};
8use crate::number::{
9    integer::{
10        macros::{
11            from_integer, try_for_primitive, try_from_any, try_from_integer, try_from_primitive,
12        },
13        *,
14    },
15    traits::Number,
16};
17#[cfg(feature = "try_from")]
18use core::{
19    num::{
20        NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroU128, NonZeroU16,
21        NonZeroU32, NonZeroU64, NonZeroU8,
22    },
23    ops::Neg,
24};
25
26/* for NonPositive Integer */
27
28/* fallible primitive conversions */
29
30// try_from i (only the non-positive values)
31try_from_primitive![neg_int for: NonPositiveInteger+8, from: i+8,16,32,64,128];
32try_from_primitive![neg_int for: NonPositiveInteger+16, from: i+8,16,32,64,128];
33try_from_primitive![neg_int for: NonPositiveInteger+32, from: i+8,16,32,64,128];
34try_from_primitive![neg_int for: NonPositiveInteger+64, from: i+8,16,32,64,128];
35try_from_primitive![neg_int for: NonPositiveInteger+128, from: i+8,16,32,64,128];
36
37// try_from u (only the 0)
38try_from_any![zero for: NonPositiveInteger+8, from: u+8,16,32,64,128];
39try_from_any![zero for: NonPositiveInteger+16, from: u+8,16,32,64,128];
40try_from_any![zero for: NonPositiveInteger+32, from: u+8,16,32,64,128];
41try_from_any![zero for: NonPositiveInteger+64, from: u+8,16,32,64,128];
42try_from_any![zero for: NonPositiveInteger+128, from: u+8,16,32,64,128];
43
44// try_from NonZeroI (only the negative values)
45try_from_primitive![non0_pos for: NonPositiveInteger+8, from: NonZeroI+8,16,32,64,128];
46try_from_primitive![non0_pos for: NonPositiveInteger+16, from: NonZeroI+8,16,32,64,128];
47try_from_primitive![non0_pos for: NonPositiveInteger+32, from: NonZeroI+8,16,32,64,128];
48try_from_primitive![non0_pos for: NonPositiveInteger+64, from: NonZeroI+8,16,32,64,128];
49try_from_primitive![non0_pos for: NonPositiveInteger+128, from: NonZeroI+8,16,32,64,128];
50
51/* impossible primitive conversions */
52
53// try_from NonZeroU (no valid values)
54try_from_any![error for: NonPositiveInteger+8, from: NonZeroU+8,16,32,64,128];
55try_from_any![error for: NonPositiveInteger+16, from: NonZeroU+8,16,32,64,128];
56try_from_any![error for: NonPositiveInteger+32, from: NonZeroU+8,16,32,64,128];
57try_from_any![error for: NonPositiveInteger+64, from: NonZeroU+8,16,32,64,128];
58try_from_any![error for: NonPositiveInteger+128, from: NonZeroU+8,16,32,64,128];
59
60/* complementary Integer conversions */
61
62// from smaller NonPositiveInteger (Self)
63from_integer![int for: NonPositiveInteger+16, from: NonPositiveInteger+8];
64from_integer![int for: NonPositiveInteger+32, from: NonPositiveInteger+8,16];
65from_integer![int for: NonPositiveInteger+64, from: NonPositiveInteger+8,16,32];
66from_integer![int for: NonPositiveInteger+128, from: NonPositiveInteger+8,16,32,64];
67// try_from bigger NonPositiveInteger (Self)
68try_from_integer![int for: NonPositiveInteger+8, from: NonPositiveInteger+16,32,64,128];
69try_from_integer![int for: NonPositiveInteger+16, from: NonPositiveInteger+32,64,128];
70try_from_integer![int for: NonPositiveInteger+32, from: NonPositiveInteger+64,128];
71try_from_integer![int for: NonPositiveInteger+64, from: NonPositiveInteger+128];
72
73// from smaller or equal sized NegativeInteger
74from_integer![non0 for: NonPositiveInteger+8, from: NegativeInteger+8];
75from_integer![non0 for: NonPositiveInteger+16, from: NegativeInteger+8,16];
76from_integer![non0 for: NonPositiveInteger+32, from: NegativeInteger+8,16,32];
77from_integer![non0 for: NonPositiveInteger+64, from: NegativeInteger+8,16,32,64];
78from_integer![non0 for: NonPositiveInteger+128, from: NegativeInteger+8,16,32,64,128];
79// try_from bigger NegativeInteger
80try_from_integer![non0 for: NonPositiveInteger+8, from: NegativeInteger+16,32,64,128];
81try_from_integer![non0 for: NonPositiveInteger+16, from: NegativeInteger+32,64,128];
82try_from_integer![non0 for: NonPositiveInteger+32, from: NegativeInteger+64,128];
83try_from_integer![non0 for: NonPositiveInteger+64, from: NegativeInteger+128];
84
85/* fallible Integer conversions */
86
87// try_from Integer (only the non-positive values)
88try_from_integer![neg_int for: NonPositiveInteger+8, from: Integer+8,16,32,64,128];
89try_from_integer![neg_int for: NonPositiveInteger+16, from: Integer+8,16,32,64,128];
90try_from_integer![neg_int for: NonPositiveInteger+32, from: Integer+8,16,32,64,128];
91try_from_integer![neg_int for: NonPositiveInteger+64, from: Integer+8,16,32,64,128];
92try_from_integer![neg_int for: NonPositiveInteger+128, from: Integer+8,16,32,64,128];
93
94// try_from NonZeroInteger (only the negative values)
95try_from_integer![non0_pos for: NonPositiveInteger+8, from: NonZeroInteger+8,16,32,64,128];
96try_from_integer![non0_pos for: NonPositiveInteger+16, from: NonZeroInteger+8,16,32,64,128];
97try_from_integer![non0_pos for: NonPositiveInteger+32, from: NonZeroInteger+8,16,32,64,128];
98try_from_integer![non0_pos for: NonPositiveInteger+64, from: NonZeroInteger+8,16,32,64,128];
99try_from_integer![non0_pos for: NonPositiveInteger+128, from: NonZeroInteger+8,16,32,64,128];
100
101// try_from NonNegativeInteger (only the 0)
102try_from_any![zero for: NonPositiveInteger+8, from: NonNegativeInteger+8,16,32,64,128];
103try_from_any![zero for: NonPositiveInteger+16, from: NonNegativeInteger+8,16,32,64,128];
104try_from_any![zero for: NonPositiveInteger+32, from: NonNegativeInteger+8,16,32,64,128];
105try_from_any![zero for: NonPositiveInteger+64, from: NonNegativeInteger+8,16,32,64,128];
106try_from_any![zero for: NonPositiveInteger+128, from: NonNegativeInteger+8,16,32,64,128];
107
108/* impossible Integer conversions */
109
110// try_from PositiveInteger (no valid values)
111try_from_any![error for: NonPositiveInteger+8, from: PositiveInteger+8,16,32,64,128];
112try_from_any![error for: NonPositiveInteger+16, from: PositiveInteger+8,16,32,64,128];
113try_from_any![error for: NonPositiveInteger+32, from: PositiveInteger+8,16,32,64,128];
114try_from_any![error for: NonPositiveInteger+64, from: PositiveInteger+8,16,32,64,128];
115try_from_any![error for: NonPositiveInteger+128, from: PositiveInteger+8,16,32,64,128];
116
117// try_from Prime (no valid values)
118try_from_any![error for: NonPositiveInteger+8, from: Prime+8,16,32,64,128];
119try_from_any![error for: NonPositiveInteger+16, from: Prime+8,16,32,64,128];
120try_from_any![error for: NonPositiveInteger+32, from: Prime+8,16,32,64,128];
121try_from_any![error for: NonPositiveInteger+64, from: Prime+8,16,32,64,128];
122try_from_any![error for: NonPositiveInteger+128, from: Prime+8,16,32,64,128];
123
124/* from NonPositive Integer */
125
126try_for_primitive![neg for: i+8, from: NonPositiveInteger+8,16,32,64,128];
127try_for_primitive![neg for: i+16, from: NonPositiveInteger+8,16,32,64,128];
128try_for_primitive![neg for: i+32, from: NonPositiveInteger+8,16,32,64,128];
129try_for_primitive![neg for: i+64, from: NonPositiveInteger+8,16,32,64,128];
130try_for_primitive![neg for: i+128, from: NonPositiveInteger+8,16,32,64,128];
131
132// (only the 0)
133try_from_any![zero for: u+8, from: NonPositiveInteger+8,16,32,64,128];
134try_from_any![zero for: u+16, from: NonPositiveInteger+8,16,32,64,128];
135try_from_any![zero for: u+32, from: NonPositiveInteger+8,16,32,64,128];
136try_from_any![zero for: u+64, from: NonPositiveInteger+8,16,32,64,128];
137try_from_any![zero for: u+128, from: NonPositiveInteger+8,16,32,64,128];
138
139try_for_primitive![neg_non0 for: NonZeroI+8, from: NonPositiveInteger+8,16,32,64,128];
140try_for_primitive![neg_non0 for: NonZeroI+16, from: NonPositiveInteger+8,16,32,64,128];
141try_for_primitive![neg_non0 for: NonZeroI+32, from: NonPositiveInteger+8,16,32,64,128];
142try_for_primitive![neg_non0 for: NonZeroI+64, from: NonPositiveInteger+8,16,32,64,128];
143try_for_primitive![neg_non0 for: NonZeroI+128, from: NonPositiveInteger+8,16,32,64,128];
144
145try_from_any![error for: NonZeroU+8, from: NonPositiveInteger+8,16,32,64,128];
146try_from_any![error for: NonZeroU+16, from: NonPositiveInteger+8,16,32,64,128];
147try_from_any![error for: NonZeroU+32, from: NonPositiveInteger+8,16,32,64,128];
148try_from_any![error for: NonZeroU+64, from: NonPositiveInteger+8,16,32,64,128];
149try_from_any![error for: NonZeroU+128, from: NonPositiveInteger+8,16,32,64,128];