fastnum2/decimal/macros/
dec.rs

1macro_rules! macro_impl {
2    ($d:tt, $DEC: ident, $bits: literal, $sign: ident, $name: ident) => {
3        #[macro_export]
4        #[doc = concat!("A macro to construct ", $bits, "-bit ", stringify!($sign), " [`", stringify!($DEC), "`](crate::", stringify!($DEC), ") decimal from literals in compile time.")]
5        ///
6        /// Const-evaluated in compile time macro-helper can be used for definitions of constants or variables whose value is known in compile time.
7        ///
8        /// # Examples:
9        ///
10        /// Basic usage:
11        ///
12        /// ```
13        /// use fastnum::*;
14        ///
15        #[doc = concat!("const N: ", stringify!($DEC), " = ", stringify!($name), "!(1.23456789);")]
16        /// assert!(!N.is_zero());
17        ///
18        #[doc = concat!("let num = ", stringify!($name), "!(0);")]
19        /// assert!(num.is_zero());
20        ///
21        #[doc = concat!("const A: ", stringify!($DEC), " = ", stringify!($name), "!(5);")]
22        #[doc = concat!("const B: ", stringify!($DEC), " = ", stringify!($name), "!(1_000);")]
23        #[doc = concat!("const C: ", stringify!($DEC), " = A.div(B);")]
24        ///
25        #[doc = concat!("assert_eq!(C, ", stringify!($name), "!(0.005));")]
26        ///
27        /// ```
28        ///
29        /// ## Static assertions:
30        ///
31        /// ```compile_fail
32        /// // The below example will fail to compile, as the function will panic at compile time:
33        #[doc = concat!("use fastnum::{", stringify!($name), ", ", stringify!($DEC), "};")]
34        ///
35        /// // Gives a compile error of "error[E0080]: evaluation of constant value failed...
36        /// // the evaluated program panicked at 'attempt to parse decimal from string containing invalid digit'",
37        #[doc = concat!("const N: ", stringify!($DEC), " = ", stringify!($name), "!(A1.23456789);")]
38        /// ```
39        ///
40        /// This allows you to perform all the necessary checks such as potentialy overflow or calculation accuracy loss and others at the compile time.
41        /// Protect from unexpected errors in runtime.
42        ///
43        macro_rules! $name {
44            ($d($d body:tt)*) => {{
45                const __CTX: $crate::decimal::Context = $crate::decimal::Context::default();
46                const __DECIMAL: $crate::$DEC = $crate::$DEC::parse_str(concat!($d(stringify!($d body)),*), __CTX);
47                __DECIMAL
48            }};
49        }
50    };
51}
52
53macro_impl!($, UD64,   64,   unsigned,   udec64);
54macro_impl!($,  D64,   64,     signed,    dec64);
55
56macro_impl!($, UD128,  128,  unsigned,  udec128);
57macro_impl!($,  D128,  128,    signed,   dec128);
58
59macro_impl!($, UD256,  256,  unsigned,  udec256);
60macro_impl!($,  D256,  256,    signed,   dec256);
61
62macro_impl!($, UD512,  512,  unsigned,  udec512);
63macro_impl!($,  D512,  512,    signed,   dec512);
64
65macro_impl!($, UD1024, 1024, unsigned, udec1024);
66macro_impl!($,  D1024, 1024,   signed,  dec1024);
67
68macro_impl!($, UD2048, 2048, unsigned, udec2048);
69macro_impl!($,  D2048, 2048,   signed,  dec2048);
70
71macro_impl!($, UD4096, 4096, unsigned, udec4096);
72macro_impl!($,  D4096, 4096,   signed,  dec4096);
73
74macro_impl!($, UD8192, 8192, unsigned, udec8192);
75macro_impl!($,  D8192, 8192,   signed,  dec8192);
76
77#[cfg(feature="more-types")]
78mod extras {
79    macro_impl!($,  UD192,  192, unsigned, udec192);
80    macro_impl!($,   D192,  192,   signed,  dec192);
81
82    macro_impl!($,  UD320,  320, unsigned, udec320);
83    macro_impl!($,   D320,  320,   signed,  dec320);
84
85    macro_impl!($,  UD384,  384, unsigned, udec384);
86    macro_impl!($,   D384,  384,   signed,  dec384);
87
88    macro_impl!($,  UD448,  448, unsigned, udec448);
89    macro_impl!($,   D448,  448,   signed,  dec448);
90
91    macro_impl!($,  UD576,  576, unsigned, udec576);
92    macro_impl!($,   D576,  576,   signed,  dec576);
93
94    macro_impl!($,  UD640,  640, unsigned, udec640);
95    macro_impl!($,   D640,  640,   signed,  dec640);
96
97    macro_impl!($,  UD704,  704, unsigned, udec704);
98    macro_impl!($,   D704,  704,   signed,  dec704);
99
100    macro_impl!($,  UD768,  768, unsigned, udec768);
101    macro_impl!($,   D768,  768,   signed,  dec768);
102
103    macro_impl!($,  UD832,  832, unsigned, udec832);
104    macro_impl!($,   D832,  832,   signed,  dec832);
105
106    macro_impl!($,  UD896,  896, unsigned, udec896);
107    macro_impl!($,   D896,  896,   signed,  dec896);
108
109    macro_impl!($,  UD960,  960, unsigned, udec960);
110    macro_impl!($,   D960,  960,   signed,  dec960);
111
112    macro_impl!($, UD1088, 1088, unsigned, udec1088);
113    macro_impl!($,  D1088, 1088,   signed,  dec1088);
114
115    macro_impl!($, UD1152, 1152, unsigned, udec1152);
116    macro_impl!($,  D1152, 1152,   signed,  dec1152);
117
118    macro_impl!($, UD1216, 1216, unsigned, udec1216);
119    macro_impl!($,  D1216, 1216,   signed,  dec1216);
120
121    macro_impl!($, UD1280, 1280, unsigned, udec1280);
122    macro_impl!($,  D1280, 1280,   signed,  dec1280);
123
124    macro_impl!($, UD1344, 1344, unsigned, udec1344);
125    macro_impl!($,  D1344, 1344,   signed,  dec1344);
126
127    macro_impl!($, UD1408, 1408, unsigned, udec1408);
128    macro_impl!($,  D1408, 1408,   signed,  dec1408);
129
130    macro_impl!($, UD1472, 1472, unsigned, udec1472);
131    macro_impl!($,  D1472, 1472,   signed,  dec1472);
132
133    macro_impl!($, UD1536, 1536, unsigned, udec1536);
134    macro_impl!($,  D1536, 1536,   signed,  dec1536);
135
136    macro_impl!($, UD1600, 1600, unsigned, udec1600);
137    macro_impl!($,  D1600, 1600,   signed,  dec1600);
138
139    macro_impl!($, UD1664, 1664, unsigned, udec1664);
140    macro_impl!($,  D1664, 1664,   signed,  dec1664);
141
142    macro_impl!($, UD1728, 1728, unsigned, udec1728);
143    macro_impl!($,  D1728, 1728,   signed,  dec1728);
144
145    macro_impl!($, UD1792, 1792, unsigned, udec1792);
146    macro_impl!($,  D1792, 1792,   signed,  dec1792);
147
148    macro_impl!($, UD1856, 1856, unsigned, udec1856);
149    macro_impl!($,  D1856, 1856,   signed,  dec1856);
150
151    macro_impl!($, UD1920, 1920, unsigned, udec1920);
152    macro_impl!($,  D1920, 1920,   signed,  dec1920);
153
154    macro_impl!($, UD1984, 1984, unsigned, udec1984);
155    macro_impl!($,  D1984, 1984,   signed,  dec1984);
156
157    macro_impl!($, UD2112, 2112, unsigned, udec2112);
158    macro_impl!($,  D2112, 2112,   signed,  dec2112);
159
160    macro_impl!($, UD2176, 2176, unsigned, udec2176);
161    macro_impl!($,  D2176, 2176,   signed,  dec2176);
162
163    macro_impl!($, UD2240, 2240, unsigned, udec2240);
164    macro_impl!($,  D2240, 2240,   signed,  dec2240);
165
166    macro_impl!($, UD2304, 2304, unsigned, udec2304);
167    macro_impl!($,  D2304, 2304,   signed,  dec2304);
168
169    macro_impl!($, UD2368, 2368, unsigned, udec2368);
170    macro_impl!($,  D2368, 2368,   signed,  dec2368);
171
172    macro_impl!($, UD2432, 2432, unsigned, udec2432);
173    macro_impl!($,  D2432, 2432,   signed,  dec2432);
174
175    macro_impl!($, UD2496, 2496, unsigned, udec2496);
176    macro_impl!($,  D2496, 2496,   signed,  dec2496);
177
178    macro_impl!($, UD2560, 2560, unsigned, udec2560);
179    macro_impl!($,  D2560, 2560,   signed,  dec2560);
180
181    macro_impl!($, UD2624, 2624, unsigned, udec2624);
182    macro_impl!($,  D2624, 2624,   signed,  dec2624);
183
184    macro_impl!($, UD2688, 2688, unsigned, udec2688);
185    macro_impl!($,  D2688, 2688,   signed,  dec2688);
186
187    macro_impl!($, UD2752, 2752, unsigned, udec2752);
188    macro_impl!($,  D2752, 2752,   signed,  dec2752);
189
190    macro_impl!($, UD2816, 2816, unsigned, udec2816);
191    macro_impl!($,  D2816, 2816,   signed,  dec2816);
192
193    macro_impl!($, UD2880, 2880, unsigned, udec2880);
194    macro_impl!($,  D2880, 2880,   signed,  dec2880);
195
196    macro_impl!($, UD2944, 2944, unsigned, udec2944);
197    macro_impl!($,  D2944, 2944,   signed,  dec2944);
198
199    macro_impl!($, UD3008, 3008, unsigned, udec3008);
200    macro_impl!($,  D3008, 3008,   signed,  dec3008);
201
202    macro_impl!($, UD3072, 3072, unsigned, udec3072);
203    macro_impl!($,  D3072, 3072,   signed,  dec3072);
204
205    macro_impl!($, UD3136, 3136, unsigned, udec3136);
206    macro_impl!($,  D3136, 3136,   signed,  dec3136);
207
208    macro_impl!($, UD3200, 3200, unsigned, udec3200);
209    macro_impl!($,  D3200, 3200,   signed,  dec3200);
210
211    macro_impl!($, UD3264, 3264, unsigned, udec3264);
212    macro_impl!($,  D3264, 3264,   signed,  dec3264);
213
214    macro_impl!($, UD3328, 3328, unsigned, udec3328);
215    macro_impl!($,  D3328, 3328,   signed,  dec3328);
216
217    macro_impl!($, UD3392, 3392, unsigned, udec3392);
218    macro_impl!($,  D3392, 3392,   signed,  dec3392);
219
220    macro_impl!($, UD3456, 3456, unsigned, udec3456);
221    macro_impl!($,  D3456, 3456,   signed,  dec3456);
222
223    macro_impl!($, UD3520, 3520, unsigned, udec3520);
224    macro_impl!($,  D3520, 3520,   signed,  dec3520);
225
226    macro_impl!($, UD3584, 3584, unsigned, udec3584);
227    macro_impl!($,  D3584, 3584,   signed,  dec3584);
228
229    macro_impl!($, UD3648, 3648, unsigned, udec3648);
230    macro_impl!($,  D3648, 3648,   signed,  dec3648);
231
232    macro_impl!($, UD3712, 3712, unsigned, udec3712);
233    macro_impl!($,  D3712, 3712,   signed,  dec3712);
234
235    macro_impl!($, UD3776, 3776, unsigned, udec3776);
236    macro_impl!($,  D3776, 3776,   signed,  dec3776);
237
238    macro_impl!($, UD3840, 3840, unsigned, udec3840);
239    macro_impl!($,  D3840, 3840,   signed,  dec3840);
240
241    macro_impl!($, UD3904, 3904, unsigned, udec3904);
242    macro_impl!($,  D3904, 3904,   signed,  dec3904);
243
244    macro_impl!($, UD3968, 3968, unsigned, udec3968);
245    macro_impl!($,  D3968, 3968,   signed,  dec3968);
246
247    macro_impl!($, UD4032, 4032, unsigned, udec4032);
248    macro_impl!($,  D4032, 4032,   signed,  dec4032);
249
250    macro_impl!($, UD4160, 4160, unsigned, udec4160);
251    macro_impl!($,  D4160, 4160,   signed,  dec4160);
252
253    macro_impl!($, UD4224, 4224, unsigned, udec4224);
254    macro_impl!($,  D4224, 4224,   signed,  dec4224);
255
256    macro_impl!($, UD4288, 4288, unsigned, udec4288);
257    macro_impl!($,  D4288, 4288,   signed,  dec4288);
258
259    macro_impl!($, UD4352, 4352, unsigned, udec4352);
260    macro_impl!($,  D4352, 4352,   signed,  dec4352);
261
262    macro_impl!($, UD4416, 4416, unsigned, udec4416);
263    macro_impl!($,  D4416, 4416,   signed,  dec4416);
264
265    macro_impl!($, UD4480, 4480, unsigned, udec4480);
266    macro_impl!($,  D4480, 4480,   signed,  dec4480);
267
268    macro_impl!($, UD4544, 4544, unsigned, udec4544);
269    macro_impl!($,  D4544, 4544,   signed,  dec4544);
270
271    macro_impl!($, UD4608, 4608, unsigned, udec4608);
272    macro_impl!($,  D4608, 4608,   signed,  dec4608);
273
274    macro_impl!($, UD4672, 4672, unsigned, udec4672);
275    macro_impl!($,  D4672, 4672,   signed,  dec4672);
276
277    macro_impl!($, UD4736, 4736, unsigned, udec4736);
278    macro_impl!($,  D4736, 4736,   signed,  dec4736);
279
280    macro_impl!($, UD4800, 4800, unsigned, udec4800);
281    macro_impl!($,  D4800, 4800,   signed,  dec4800);
282
283    macro_impl!($, UD4864, 4864, unsigned, udec4864);
284    macro_impl!($,  D4864, 4864,   signed,  dec4864);
285
286    macro_impl!($, UD4928, 4928, unsigned, udec4928);
287    macro_impl!($,  D4928, 4928,   signed,  dec4928);
288
289    macro_impl!($, UD4992, 4992, unsigned, udec4992);
290    macro_impl!($,  D4992, 4992,   signed,  dec4992);
291
292    macro_impl!($, UD5056, 5056, unsigned, udec5056);
293    macro_impl!($,  D5056, 5056,   signed,  dec5056);
294
295    macro_impl!($, UD5120, 5120, unsigned, udec5120);
296    macro_impl!($,  D5120, 5120,   signed,  dec5120);
297
298    macro_impl!($, UD5184, 5184, unsigned, udec5184);
299    macro_impl!($,  D5184, 5184,   signed,  dec5184);
300
301    macro_impl!($, UD5248, 5248, unsigned, udec5248);
302    macro_impl!($,  D5248, 5248,   signed,  dec5248);
303
304    macro_impl!($, UD5312, 5312, unsigned, udec5312);
305    macro_impl!($,  D5312, 5312,   signed,  dec5312);
306
307    macro_impl!($, UD5376, 5376, unsigned, udec5376);
308    macro_impl!($,  D5376, 5376,   signed,  dec5376);
309
310    macro_impl!($, UD5440, 5440, unsigned, udec5440);
311    macro_impl!($,  D5440, 5440,   signed,  dec5440);
312
313    macro_impl!($, UD5504, 5504, unsigned, udec5504);
314    macro_impl!($,  D5504, 5504,   signed,  dec5504);
315
316    macro_impl!($, UD5568, 5568, unsigned, udec5568);
317    macro_impl!($,  D5568, 5568,   signed,  dec5568);
318
319    macro_impl!($, UD5632, 5632, unsigned, udec5632);
320    macro_impl!($,  D5632, 5632,   signed,  dec5632);
321
322    macro_impl!($, UD5696, 5696, unsigned, udec5696);
323    macro_impl!($,  D5696, 5696,   signed,  dec5696);
324
325    macro_impl!($, UD5760, 5760, unsigned, udec5760);
326    macro_impl!($,  D5760, 5760,   signed,  dec5760);
327
328    macro_impl!($, UD5824, 5824, unsigned, udec5824);
329    macro_impl!($,  D5824, 5824,   signed,  dec5824);
330
331    macro_impl!($, UD5888, 5888, unsigned, udec5888);
332    macro_impl!($,  D5888, 5888,   signed,  dec5888);
333
334    macro_impl!($, UD5952, 5952, unsigned, udec5952);
335    macro_impl!($,  D5952, 5952,   signed,  dec5952);
336
337    macro_impl!($, UD6016, 6016, unsigned, udec6016);
338    macro_impl!($,  D6016, 6016,   signed,  dec6016);
339
340    macro_impl!($, UD6080, 6080, unsigned, udec6080);
341    macro_impl!($,  D6080, 6080,   signed,  dec6080);
342
343    macro_impl!($, UD6144, 6144, unsigned, udec6144);
344    macro_impl!($,  D6144, 6144,   signed,  dec6144);
345
346    macro_impl!($, UD6208, 6208, unsigned, udec6208);
347    macro_impl!($,  D6208, 6208,   signed,  dec6208);
348
349    macro_impl!($, UD6272, 6272, unsigned, udec6272);
350    macro_impl!($,  D6272, 6272,   signed,  dec6272);
351
352    macro_impl!($, UD6336, 6336, unsigned, udec6336);
353    macro_impl!($,  D6336, 6336,   signed,  dec6336);
354
355    macro_impl!($, UD6400, 6400, unsigned, udec6400);
356    macro_impl!($,  D6400, 6400,   signed,  dec6400);
357
358    macro_impl!($, UD6464, 6464, unsigned, udec6464);
359    macro_impl!($,  D6464, 6464,   signed,  dec6464);
360
361    macro_impl!($, UD6528, 6528, unsigned, udec6528);
362    macro_impl!($,  D6528, 6528,   signed,  dec6528);
363
364    macro_impl!($, UD6592, 6592, unsigned, udec6592);
365    macro_impl!($,  D6592, 6592,   signed,  dec6592);
366
367    macro_impl!($, UD6656, 6656, unsigned, udec6656);
368    macro_impl!($,  D6656, 6656,   signed,  dec6656);
369
370    macro_impl!($, UD6720, 6720, unsigned, udec6720);
371    macro_impl!($,  D6720, 6720,   signed,  dec6720);
372
373    macro_impl!($, UD6784, 6784, unsigned, udec6784);
374    macro_impl!($,  D6784, 6784,   signed,  dec6784);
375
376    macro_impl!($, UD6848, 6848, unsigned, udec6848);
377    macro_impl!($,  D6848, 6848,   signed,  dec6848);
378
379    macro_impl!($, UD6912, 6912, unsigned, udec6912);
380    macro_impl!($,  D6912, 6912,   signed,  dec6912);
381
382    macro_impl!($, UD6976, 6976, unsigned, udec6976);
383    macro_impl!($,  D6976, 6976,   signed,  dec6976);
384
385    macro_impl!($, UD7040, 7040, unsigned, udec7040);
386    macro_impl!($,  D7040, 7040,   signed,  dec7040);
387
388    macro_impl!($, UD7104, 7104, unsigned, udec7104);
389    macro_impl!($,  D7104, 7104,   signed,  dec7104);
390
391    macro_impl!($, UD7168, 7168, unsigned, udec7168);
392    macro_impl!($,  D7168, 7168,   signed,  dec7168);
393
394    macro_impl!($, UD7232, 7232, unsigned, udec7232);
395    macro_impl!($,  D7232, 7232,   signed,  dec7232);
396
397    macro_impl!($, UD7296, 7296, unsigned, udec7296);
398    macro_impl!($,  D7296, 7296,   signed,  dec7296);
399
400    macro_impl!($, UD7360, 7360, unsigned, udec7360);
401    macro_impl!($,  D7360, 7360,   signed,  dec7360);
402
403    macro_impl!($, UD7424, 7424, unsigned, udec7424);
404    macro_impl!($,  D7424, 7424,   signed,  dec7424);
405
406    macro_impl!($, UD7488, 7488, unsigned, udec7488);
407    macro_impl!($,  D7488, 7488,   signed,  dec7488);
408
409    macro_impl!($, UD7552, 7552, unsigned, udec7552);
410    macro_impl!($,  D7552, 7552,   signed,  dec7552);
411
412    macro_impl!($, UD7616, 7616, unsigned, udec7616);
413    macro_impl!($,  D7616, 7616,   signed,  dec7616);
414
415    macro_impl!($, UD7680, 7680, unsigned, udec7680);
416    macro_impl!($,  D7680, 7680,   signed,  dec7680);
417
418    macro_impl!($, UD7744, 7744, unsigned, udec7744);
419    macro_impl!($,  D7744, 7744,   signed,  dec7744);
420
421    macro_impl!($, UD7808, 7808, unsigned, udec7808);
422    macro_impl!($,  D7808, 7808,   signed,  dec7808);
423
424    macro_impl!($, UD7872, 7872, unsigned, udec7872);
425    macro_impl!($,  D7872, 7872,   signed,  dec7872);
426
427    macro_impl!($, UD7936, 7936, unsigned, udec7936);
428    macro_impl!($,  D7936, 7936,   signed,  dec7936);
429
430    macro_impl!($, UD8000, 8000, unsigned, udec8000);
431    macro_impl!($,  D8000, 8000,   signed,  dec8000);
432
433    macro_impl!($, UD8064, 8064, unsigned, udec8064);
434    macro_impl!($,  D8064, 8064,   signed,  dec8064);
435
436    macro_impl!($, UD8128, 8128, unsigned, udec8128);
437    macro_impl!($,  D8128, 8128,   signed,  dec8128);
438}
439