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

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