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

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