1pub type D38<const SCALE: u32> = crate::D<i128, SCALE>;
56
57impl<const SCALE: u32> Default for crate::D<i128, SCALE> {
70 #[inline]
71 fn default() -> Self {
72 Self::ZERO
73 }
74}
75
76pub type D38s0 = D38<0>;
97
98pub type D38s1 = D38<1>;
105
106pub type D38s2 = D38<2>;
112
113pub type D38s3 = D38<3>;
120
121pub type D38s4 = D38<4>;
127
128pub type D38s5 = D38<5>;
134
135pub type D38s6 = D38<6>;
142
143pub type D38s7 = D38<7>;
149
150pub type D38s8 = D38<8>;
156
157pub type D38s9 = D38<9>;
164
165pub type D38s10 = D38<10>;
171
172pub type D38s11 = D38<11>;
178
179pub type D38s12 = D38<12>;
192
193pub type D38s13 = D38<13>;
199
200pub type D38s14 = D38<14>;
206
207pub type D38s15 = D38<15>;
213
214pub type D38s16 = D38<16>;
220
221pub type D38s17 = D38<17>;
227
228pub type D38s18 = D38<18>;
235
236pub type D38s19 = D38<19>;
242
243pub type D38s20 = D38<20>;
249
250pub type D38s21 = D38<21>;
256
257pub type D38s22 = D38<22>;
263
264pub type D38s23 = D38<23>;
270
271pub type D38s24 = D38<24>;
277
278pub type D38s25 = D38<25>;
284
285pub type D38s26 = D38<26>;
291
292pub type D38s27 = D38<27>;
298
299pub type D38s28 = D38<28>;
305
306pub type D38s29 = D38<29>;
312
313pub type D38s30 = D38<30>;
319
320pub type D38s31 = D38<31>;
326
327pub type D38s32 = D38<32>;
333
334pub type D38s33 = D38<33>;
340
341pub type D38s34 = D38<34>;
347
348pub type D38s35 = D38<35>;
358
359pub type D38s36 = D38<36>;
370
371pub type D38s37 = D38<37>;
384
385pub use crate::support::error::ParseError;
388
389crate::macros::basics::decl_decimal_basics!(D38, i128, 37);
393crate::macros::display::decl_decimal_display!(D38);
394crate::macros::from_str::decl_decimal_from_str!(D38, i128);
399crate::macros::storage_formatters::decl_decimal_storage_formatters!(D38);
400crate::macros::bitwise::decl_decimal_bitwise!(D38, i128);
405crate::macros::int_methods::decl_decimal_int_methods!(D38, i128);
408crate::macros::num_traits::decl_decimal_num_traits_conversions!(D38, i128);
410crate::macros::float_bridge::decl_decimal_float_bridge!(D38, i128);
411crate::macros::conversions::decl_from_primitive!(D38, i128, i8);
412crate::macros::conversions::decl_from_primitive!(D38, i128, i16);
413crate::macros::conversions::decl_from_primitive!(D38, i128, i32);
414crate::macros::conversions::decl_from_primitive!(D38, i128, i64);
415crate::macros::conversions::decl_from_primitive!(D38, i128, u8);
416crate::macros::conversions::decl_from_primitive!(D38, i128, u16);
417crate::macros::conversions::decl_from_primitive!(D38, i128, u32);
418crate::macros::conversions::decl_from_primitive!(D38, i128, u64);
419crate::macros::conversions::decl_try_from_i128!(D38, i128);
420crate::macros::conversions::decl_try_from_u128!(D38, i128);
421crate::macros::conversions::decl_try_from_i128!(D18, i64);
422crate::macros::conversions::decl_try_from_u128!(D18, i64);
423crate::macros::conversions::decl_try_from_i128!(D9, i32);
424crate::macros::conversions::decl_try_from_u128!(D9, i32);
425crate::macros::conversions::decl_try_from_f64!(D38, i128);
426crate::macros::conversions::decl_try_from_f32!(D38, i128);
427crate::macros::conversions::decl_try_from_f64!(D18, i64);
428crate::macros::conversions::decl_try_from_f32!(D18, i64);
429crate::macros::conversions::decl_try_from_f64!(D9, i32);
430crate::macros::conversions::decl_try_from_f32!(D9, i32);
431crate::macros::conversions::decl_decimal_int_conversion_methods!(D38, i128, i64);
432crate::macros::sign::decl_decimal_sign_methods!(D38, i128);
437crate::macros::helpers::decl_decimal_helpers!(D38);
438crate::macros::rounding_methods::decl_decimal_rounding_methods!(D38);
439crate::macros::overflow::decl_decimal_overflow_variants!(@common D38, i128);
444crate::macros::arithmetic::decl_decimal_arithmetic!(@common D38, i128);
448crate::macros::num_traits::decl_decimal_num_traits_basics!(D38);
453crate::macros::transcendental_trait::decl_decimal_transcendental_impl!(D38);
454
455crate::macros::conversions::decl_decimal_int_conversion_methods!(D18, i64, i64);
482crate::macros::conversions::decl_decimal_int_conversion_methods!(D9, i32, i32);
483
484impl<const SCALE: u32> D38<SCALE> {
489 #[inline]
500 pub fn narrow(self) -> Result<D18<SCALE>, crate::support::error::ConvertError> {
501 self.try_into()
502 }
503}
504
505pub type D9<const SCALE: u32> = crate::D<i32, SCALE>;
522
523impl<const SCALE: u32> Default for crate::D<i32, SCALE> {
529 #[inline]
530 fn default() -> Self {
531 Self::ZERO
532 }
533}
534
535crate::macros::basics::decl_decimal_basics!(D9, i32, 8);
536crate::macros::arithmetic::decl_decimal_arithmetic!(D9, i32, i64);
537crate::macros::conversions::decl_from_primitive!(D9, i32, i8);
538crate::macros::conversions::decl_from_primitive!(D9, i32, i16);
539crate::macros::conversions::decl_from_primitive!(D9, i32, u8);
540crate::macros::conversions::decl_from_primitive!(D9, i32, u16);
541crate::macros::display::decl_decimal_display!(D9);
542crate::macros::overflow::decl_decimal_overflow_variants!(D9, i32, i64);
543crate::macros::num_traits::decl_decimal_num_traits_basics!(D9);
544crate::macros::sign::decl_decimal_sign_methods!(D9, i32);
545crate::macros::consts::decl_decimal_consts!(D9, i32);
546crate::macros::from_str::decl_decimal_from_str!(D9, i32);
547crate::macros::float_bridge::decl_decimal_float_bridge!(D9, i32);
548crate::macros::storage_formatters::decl_decimal_storage_formatters!(D9);
549crate::macros::strict_transcendentals::decl_strict_transcendentals_via_d38!(D9);
550crate::macros::transcendental_trait::decl_decimal_transcendental_impl!(D9);
551crate::macros::fast_transcendentals::decl_fast_transcendentals_via_f64!(D9);
552crate::macros::pow::decl_decimal_pow!(D9);
553crate::macros::rounding_methods::decl_decimal_rounding_methods!(D9);
554crate::macros::helpers::decl_decimal_helpers!(D9);
555crate::macros::bitwise::decl_decimal_bitwise!(D9, i32);
556crate::macros::int_methods::decl_decimal_int_methods!(D9, i32);
557crate::macros::num_traits::decl_decimal_num_traits_conversions!(D9, i32);
558
559pub type D9s0 = D9<0>;
561pub type D9s1 = D9<1>;
563pub type D9s2 = D9<2>;
565pub type D9s3 = D9<3>;
567pub type D9s4 = D9<4>;
569pub type D9s5 = D9<5>;
571pub type D9s6 = D9<6>;
573pub type D9s7 = D9<7>;
575pub type D9s8 = D9<8>;
580
581pub type D18<const SCALE: u32> = crate::D<i64, SCALE>;
596
597impl<const SCALE: u32> Default for crate::D<i64, SCALE> {
603 #[inline]
604 fn default() -> Self {
605 Self::ZERO
606 }
607}
608
609crate::macros::basics::decl_decimal_basics!(D18, i64, 17);
610crate::macros::arithmetic::decl_decimal_arithmetic!(D18, i64, i128);
611crate::macros::conversions::decl_from_primitive!(D18, i64, i8);
612crate::macros::conversions::decl_from_primitive!(D18, i64, i16);
613crate::macros::conversions::decl_from_primitive!(D18, i64, i32);
614crate::macros::conversions::decl_from_primitive!(D18, i64, u8);
615crate::macros::conversions::decl_from_primitive!(D18, i64, u16);
616crate::macros::conversions::decl_from_primitive!(D18, i64, u32);
617crate::macros::display::decl_decimal_display!(D18);
618crate::macros::overflow::decl_decimal_overflow_variants!(D18, i64, i128);
619crate::macros::num_traits::decl_decimal_num_traits_basics!(D18);
620crate::macros::sign::decl_decimal_sign_methods!(D18, i64);
621crate::macros::consts::decl_decimal_consts!(D18, i64);
622crate::macros::from_str::decl_decimal_from_str!(D18, i64);
623crate::macros::float_bridge::decl_decimal_float_bridge!(D18, i64);
624crate::macros::storage_formatters::decl_decimal_storage_formatters!(D18);
625crate::macros::strict_transcendentals::decl_strict_transcendentals_via_d38!(D18);
626crate::macros::transcendental_trait::decl_decimal_transcendental_impl!(D18);
627crate::macros::fast_transcendentals::decl_fast_transcendentals_via_f64!(D18);
628crate::macros::pow::decl_decimal_pow!(D18);
629crate::macros::rounding_methods::decl_decimal_rounding_methods!(D18);
630crate::macros::helpers::decl_decimal_helpers!(D18);
631crate::macros::bitwise::decl_decimal_bitwise!(D18, i64);
632crate::macros::int_methods::decl_decimal_int_methods!(D18, i64);
633crate::macros::num_traits::decl_decimal_num_traits_conversions!(D18, i64);
634
635crate::macros::conversions::decl_cross_width_widening!(D18, i64, D9, i32);
637crate::macros::conversions::decl_cross_width_widening!(D38, i128, D9, i32);
638crate::macros::conversions::decl_cross_width_widening!(D38, i128, D18, i64);
639
640crate::macros::conversions::decl_cross_width_narrowing!(D18, i64, D38, i128);
642crate::macros::conversions::decl_cross_width_narrowing!(D9, i32, D38, i128);
643crate::macros::conversions::decl_cross_width_narrowing!(D9, i32, D18, i64);
644
645impl<const SCALE: u32> D9<SCALE> {
654 #[inline]
667 #[must_use]
668 pub fn widen(self) -> D18<SCALE> {
669 self.into()
670 }
671}
672
673impl<const SCALE: u32> D18<SCALE> {
674 #[inline]
684 #[must_use]
685 pub fn widen(self) -> D38<SCALE> {
686 self.into()
687 }
688
689 #[inline]
704 pub fn narrow(self) -> Result<D9<SCALE>, crate::support::error::ConvertError> {
705 self.try_into()
706 }
707}
708
709pub type D18s0 = D18<0>;
711pub type D18s1 = D18<1>;
713pub type D18s2 = D18<2>;
715pub type D18s3 = D18<3>;
717pub type D18s4 = D18<4>;
719pub type D18s5 = D18<5>;
721pub type D18s6 = D18<6>;
723pub type D18s7 = D18<7>;
725pub type D18s8 = D18<8>;
727pub type D18s9 = D18<9>;
729pub type D18s10 = D18<10>;
731pub type D18s11 = D18<11>;
733pub type D18s12 = D18<12>;
735pub type D18s13 = D18<13>;
737pub type D18s14 = D18<14>;
739pub type D18s15 = D18<15>;
741pub type D18s16 = D18<16>;
743pub type D18s17 = D18<17>;
748
749#[cfg(any(feature = "d76", feature = "wide"))]
769pub type D76<const SCALE: u32> = crate::D<crate::wide_int::Int256, SCALE>;
770
771#[cfg(any(feature = "d76", feature = "wide"))]
778impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int256, SCALE> {
779 #[inline]
780 fn default() -> Self {
781 Self::ZERO
782 }
783}
784
785#[cfg(any(feature = "d76", feature = "wide"))]
786crate::macros::full::decl_decimal_full!(
787 wide D76,
788 crate::wide_int::I256,
789 crate::wide_int::U256,
790 crate::wide_int::I512,
791 crate::wide_int::Int512,
792 crate::wide_int::Int1024,
793 crate::wide_int::Int1024,
794 wide_trig_d76,
795 75
796);
797#[cfg(any(feature = "d76", feature = "wide"))]
799crate::macros::conversions::decl_cross_width_widening!(wide D76, crate::wide_int::I256, D9, i32);
800#[cfg(any(feature = "d76", feature = "wide"))]
801crate::macros::conversions::decl_cross_width_widening!(wide D76, crate::wide_int::I256, D18, i64);
802#[cfg(any(feature = "d76", feature = "wide"))]
803crate::macros::conversions::decl_cross_width_widening!(wide D76, crate::wide_int::I256, D38, i128);
804#[cfg(any(feature = "d76", feature = "wide"))]
806crate::macros::conversions::decl_cross_width_narrowing!(wide D38, i128, D76, crate::wide_int::I256);
807#[cfg(any(feature = "d76", feature = "wide"))]
808crate::macros::conversions::decl_cross_width_narrowing!(wide D18, i64, D76, crate::wide_int::I256);
809#[cfg(any(feature = "d76", feature = "wide"))]
810crate::macros::conversions::decl_cross_width_narrowing!(wide D9, i32, D76, crate::wide_int::I256);
811
812#[cfg(any(feature = "d76", feature = "wide"))]
815impl<const SCALE: u32> D38<SCALE> {
816 #[inline]
828 #[must_use]
829 pub fn widen(self) -> D57<SCALE> {
830 self.into()
831 }
832}
833
834#[cfg(any(feature = "d76", feature = "wide"))]
835impl<const SCALE: u32> D76<SCALE> {
836 #[inline]
840 pub fn narrow(self) -> Result<D57<SCALE>, crate::support::error::ConvertError> {
841 self.try_into()
842 }
843}
844
845#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s0 = D76<0>;
847#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s1 = D76<1>;
849#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s2 = D76<2>;
851#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s3 = D76<3>;
852#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s4 = D76<4>;
853#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s6 = D76<6>;
855#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s9 = D76<9>;
856#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s12 = D76<12>;
858#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s15 = D76<15>;
859#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s18 = D76<18>;
861#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s20 = D76<20>;
862#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s24 = D76<24>;
863#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s28 = D76<28>;
864#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s32 = D76<32>;
865#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s35 = D76<35>;
867#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s38 = D76<38>;
868#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s42 = D76<42>;
869#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s48 = D76<48>;
870#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s50 = D76<50>;
872#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s56 = D76<56>;
873#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s64 = D76<64>;
874#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s70 = D76<70>;
875#[cfg(any(feature = "d76", feature = "wide"))] pub type D76s75 = D76<75>;
878
879#[cfg(any(feature = "d153", feature = "wide"))]
897pub type D153<const SCALE: u32> = crate::D<crate::wide_int::Int512, SCALE>;
898
899#[cfg(any(feature = "d153", feature = "wide"))]
906impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int512, SCALE> {
907 #[inline]
908 fn default() -> Self {
909 Self::ZERO
910 }
911}
912
913#[cfg(any(feature = "d153", feature = "wide"))]
914crate::macros::full::decl_decimal_full!(
915 wide D153,
916 crate::wide_int::I512,
917 crate::wide_int::U512,
918 crate::wide_int::I1024,
919 crate::wide_int::Int1024,
920 crate::wide_int::Int2048,
921 crate::wide_int::Int2048,
922 wide_trig_d153,
923 152
924);
925#[cfg(any(feature = "d153", feature = "wide"))]
927crate::macros::conversions::decl_cross_width_widening!(wide D153, crate::wide_int::I512, D38, i128);
928#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d76", feature = "wide")))]
929crate::macros::conversions::decl_cross_width_widening!(wide D153, crate::wide_int::I512, D76, crate::wide_int::I256);
930#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d76", feature = "wide")))]
932crate::macros::conversions::decl_cross_width_narrowing!(wide D76, crate::wide_int::I256, D153, crate::wide_int::I512);
933#[cfg(any(feature = "d153", feature = "wide"))]
934crate::macros::conversions::decl_cross_width_narrowing!(wide D38, i128, D153, crate::wide_int::I512);
935
936#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d115", feature = "wide")))]
939impl<const SCALE: u32> D76<SCALE> {
940 #[inline]
943 #[must_use]
944 pub fn widen(self) -> D115<SCALE> {
945 self.into()
946 }
947}
948
949#[cfg(any(feature = "d153", feature = "wide"))]
950impl<const SCALE: u32> D153<SCALE> {
951 #[cfg(any(feature = "d115", feature = "wide"))]
955 #[inline]
956 pub fn narrow(self) -> Result<D115<SCALE>, crate::support::error::ConvertError> {
957 self.try_into()
958 }
959}
960
961#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s0 = D153<0>;
963#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s1 = D153<1>;
964#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s2 = D153<2>;
965#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s4 = D153<4>;
966#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s6 = D153<6>;
967#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s9 = D153<9>;
968#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s12 = D153<12>;
969#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s15 = D153<15>;
970#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s18 = D153<18>;
971#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s20 = D153<20>;
972#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s24 = D153<24>;
973#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s28 = D153<28>;
974#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s32 = D153<32>;
975#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s35 = D153<35>;
977#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s38 = D153<38>;
978#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s50 = D153<50>;
979#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s57 = D153<57>;
980#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s75 = D153<75>;
982#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s76 = D153<76>;
983#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s100 = D153<100>;
984#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s115 = D153<115>;
985#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s140 = D153<140>;
986#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s150 = D153<150>;
988#[cfg(any(feature = "d153", feature = "wide"))] pub type D153s152 = D153<152>;
991
992#[cfg(any(feature = "d307", feature = "wide"))]
1010pub type D307<const SCALE: u32> = crate::D<crate::wide_int::Int1024, SCALE>;
1011
1012#[cfg(any(feature = "d307", feature = "wide"))]
1019impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int1024, SCALE> {
1020 #[inline]
1021 fn default() -> Self {
1022 Self::ZERO
1023 }
1024}
1025
1026#[cfg(any(feature = "d307", feature = "wide"))]
1027crate::macros::full::decl_decimal_full!(
1028 wide D307,
1029 crate::wide_int::I1024,
1030 crate::wide_int::U1024,
1031 crate::wide_int::I2048,
1032 crate::wide_int::Int2048,
1033 crate::wide_int::Int4096,
1034 crate::wide_int::Int4096,
1035 wide_trig_d307,
1036 306
1037);
1038#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d76", feature = "wide")))]
1040crate::macros::conversions::decl_cross_width_widening!(wide D307, crate::wide_int::I1024, D76, crate::wide_int::I256);
1041#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d153", feature = "wide")))]
1042crate::macros::conversions::decl_cross_width_widening!(wide D307, crate::wide_int::I1024, D153, crate::wide_int::I512);
1043#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d153", feature = "wide")))]
1045crate::macros::conversions::decl_cross_width_narrowing!(wide D153, crate::wide_int::I512, D307, crate::wide_int::I1024);
1046#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d76", feature = "wide")))]
1047crate::macros::conversions::decl_cross_width_narrowing!(wide D76, crate::wide_int::I256, D307, crate::wide_int::I1024);
1048
1049#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d230", feature = "wide")))]
1052impl<const SCALE: u32> D153<SCALE> {
1053 #[inline]
1056 #[must_use]
1057 pub fn widen(self) -> D230<SCALE> {
1058 self.into()
1059 }
1060}
1061
1062#[cfg(any(feature = "d307", feature = "wide"))]
1063impl<const SCALE: u32> D307<SCALE> {
1064 #[cfg(any(feature = "d230", feature = "wide"))]
1068 #[inline]
1069 pub fn narrow(self) -> Result<D230<SCALE>, crate::support::error::ConvertError> {
1070 self.try_into()
1071 }
1072
1073 #[cfg(any(feature = "d462", feature = "x-wide"))]
1076 #[inline]
1077 #[must_use]
1078 pub fn widen(self) -> D462<SCALE> {
1079 self.into()
1080 }
1081}
1082
1083#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s0 = D307<0>;
1085#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s1 = D307<1>;
1086#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s2 = D307<2>;
1087#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s4 = D307<4>;
1088#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s6 = D307<6>;
1089#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s9 = D307<9>;
1090#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s12 = D307<12>;
1091#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s15 = D307<15>;
1092#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s18 = D307<18>;
1093#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s20 = D307<20>;
1094#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s24 = D307<24>;
1095#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s28 = D307<28>;
1096#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s32 = D307<32>;
1097#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s35 = D307<35>;
1099#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s38 = D307<38>;
1100#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s50 = D307<50>;
1101#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s75 = D307<75>;
1102#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s100 = D307<100>;
1103#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s115 = D307<115>;
1104#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s150 = D307<150>;
1106#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s153 = D307<153>;
1107#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s200 = D307<200>;
1108#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s230 = D307<230>;
1109#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s275 = D307<275>;
1110#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s300 = D307<300>;
1112#[cfg(any(feature = "d307", feature = "wide"))] pub type D307s306 = D307<306>;
1115
1116#[cfg(any(feature = "d57", feature = "wide"))]
1143pub type D57<const SCALE: u32> = crate::D<crate::wide_int::Int192, SCALE>;
1144
1145#[cfg(any(feature = "d57", feature = "wide"))]
1152impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int192, SCALE> {
1153 #[inline]
1154 fn default() -> Self { Self::ZERO }
1155}
1156
1157#[cfg(any(feature = "d57", feature = "wide"))]
1158crate::macros::full::decl_decimal_full!(
1159 wide D57,
1160 crate::wide_int::I192,
1161 crate::wide_int::U192,
1162 crate::wide_int::I384,
1163 crate::wide_int::Int384,
1164 crate::wide_int::Int512,
1165 crate::wide_int::Int1024,
1166 wide_trig_d57,
1167 56
1168);
1169#[cfg(any(feature = "d57", feature = "wide"))]
1170pub type D57s0 = D57<0>;
1171#[cfg(any(feature = "d57", feature = "wide"))]
1172pub type D57s1 = D57<1>;
1173#[cfg(any(feature = "d57", feature = "wide"))]
1174pub type D57s2 = D57<2>;
1175#[cfg(any(feature = "d57", feature = "wide"))]
1176pub type D57s4 = D57<4>;
1177#[cfg(any(feature = "d57", feature = "wide"))]
1178pub type D57s6 = D57<6>;
1179#[cfg(any(feature = "d57", feature = "wide"))]
1180pub type D57s9 = D57<9>;
1181#[cfg(any(feature = "d57", feature = "wide"))]
1182pub type D57s12 = D57<12>;
1183#[cfg(any(feature = "d57", feature = "wide"))]
1184pub type D57s18 = D57<18>;
1185#[cfg(any(feature = "d57", feature = "wide"))]
1186pub type D57s20 = D57<20>;
1187#[cfg(any(feature = "d57", feature = "wide"))]
1188pub type D57s24 = D57<24>;
1189#[cfg(any(feature = "d57", feature = "wide"))]
1190pub type D57s28 = D57<28>;
1191#[cfg(any(feature = "d57", feature = "wide"))]
1192pub type D57s32 = D57<32>;
1193#[cfg(any(feature = "d57", feature = "wide"))]
1194pub type D57s38 = D57<38>;
1195#[cfg(any(feature = "d57", feature = "wide"))]
1196pub type D57s42 = D57<42>;
1197#[cfg(any(feature = "d57", feature = "wide"))]
1198pub type D57s48 = D57<48>;
1199#[cfg(any(feature = "d57", feature = "wide"))]
1200pub type D57s52 = D57<52>;
1201#[cfg(any(feature = "d57", feature = "wide"))]
1204pub type D57s56 = D57<56>;
1205
1206#[cfg(any(feature = "d115", feature = "wide"))]
1219pub type D115<const SCALE: u32> = crate::D<crate::wide_int::Int384, SCALE>;
1220
1221#[cfg(any(feature = "d115", feature = "wide"))]
1228impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int384, SCALE> {
1229 #[inline]
1230 fn default() -> Self { Self::ZERO }
1231}
1232
1233#[cfg(any(feature = "d115", feature = "wide"))]
1234crate::macros::full::decl_decimal_full!(
1235 wide D115,
1236 crate::wide_int::I384,
1237 crate::wide_int::U384,
1238 crate::wide_int::I768,
1239 crate::wide_int::Int768,
1240 crate::wide_int::Int1024,
1241 crate::wide_int::Int2048,
1242 wide_trig_d115,
1243 114
1244);
1245#[cfg(any(feature = "d115", feature = "wide"))]
1246pub type D115s0 = D115<0>;
1247#[cfg(any(feature = "d115", feature = "wide"))]
1248pub type D115s1 = D115<1>;
1249#[cfg(any(feature = "d115", feature = "wide"))]
1250pub type D115s4 = D115<4>;
1251#[cfg(any(feature = "d115", feature = "wide"))]
1252pub type D115s8 = D115<8>;
1253#[cfg(any(feature = "d115", feature = "wide"))]
1254pub type D115s16 = D115<16>;
1255#[cfg(any(feature = "d115", feature = "wide"))]
1256pub type D115s24 = D115<24>;
1257#[cfg(any(feature = "d115", feature = "wide"))]
1258pub type D115s32 = D115<32>;
1259#[cfg(any(feature = "d115", feature = "wide"))]
1260pub type D115s38 = D115<38>;
1261#[cfg(any(feature = "d115", feature = "wide"))]
1262pub type D115s50 = D115<50>;
1263#[cfg(any(feature = "d115", feature = "wide"))]
1264pub type D115s57 = D115<57>;
1265#[cfg(any(feature = "d115", feature = "wide"))]
1266pub type D115s64 = D115<64>;
1267#[cfg(any(feature = "d115", feature = "wide"))]
1268pub type D115s76 = D115<76>;
1269#[cfg(any(feature = "d115", feature = "wide"))]
1270pub type D115s90 = D115<90>;
1271#[cfg(any(feature = "d115", feature = "wide"))]
1272pub type D115s100 = D115<100>;
1273#[cfg(any(feature = "d115", feature = "wide"))]
1274pub type D115s110 = D115<110>;
1275#[cfg(any(feature = "d115", feature = "wide"))]
1278pub type D115s114 = D115<114>;
1279
1280#[cfg(any(feature = "d230", feature = "wide"))]
1293pub type D230<const SCALE: u32> = crate::D<crate::wide_int::Int768, SCALE>;
1294
1295#[cfg(any(feature = "d230", feature = "wide"))]
1302impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int768, SCALE> {
1303 #[inline]
1304 fn default() -> Self { Self::ZERO }
1305}
1306
1307#[cfg(any(feature = "d230", feature = "wide"))]
1308crate::macros::full::decl_decimal_full!(
1309 wide D230,
1310 crate::wide_int::I768,
1311 crate::wide_int::U768,
1312 crate::wide_int::I1536,
1313 crate::wide_int::Int1536,
1314 crate::wide_int::Int3072,
1315 crate::wide_int::Int3072,
1316 wide_trig_d230,
1317 229
1318);
1319#[cfg(any(feature = "d230", feature = "wide"))]
1320pub type D230s0 = D230<0>;
1321#[cfg(any(feature = "d230", feature = "wide"))]
1322pub type D230s1 = D230<1>;
1323#[cfg(any(feature = "d230", feature = "wide"))]
1324pub type D230s6 = D230<6>;
1325#[cfg(any(feature = "d230", feature = "wide"))]
1326pub type D230s18 = D230<18>;
1327#[cfg(any(feature = "d230", feature = "wide"))]
1328pub type D230s38 = D230<38>;
1329#[cfg(any(feature = "d230", feature = "wide"))]
1330pub type D230s57 = D230<57>;
1331#[cfg(any(feature = "d230", feature = "wide"))]
1332pub type D230s75 = D230<75>;
1333#[cfg(any(feature = "d230", feature = "wide"))]
1334pub type D230s100 = D230<100>;
1335#[cfg(any(feature = "d230", feature = "wide"))]
1336pub type D230s115 = D230<115>;
1337#[cfg(any(feature = "d230", feature = "wide"))]
1338pub type D230s140 = D230<140>;
1339#[cfg(any(feature = "d230", feature = "wide"))]
1340pub type D230s153 = D230<153>;
1341#[cfg(any(feature = "d230", feature = "wide"))]
1342pub type D230s175 = D230<175>;
1343#[cfg(any(feature = "d230", feature = "wide"))]
1344pub type D230s200 = D230<200>;
1345#[cfg(any(feature = "d230", feature = "wide"))]
1346pub type D230s215 = D230<215>;
1347#[cfg(any(feature = "d230", feature = "wide"))]
1348pub type D230s225 = D230<225>;
1349#[cfg(any(feature = "d230", feature = "wide"))]
1352pub type D230s229 = D230<229>;
1353
1354#[cfg(any(feature = "d462", feature = "x-wide"))]
1367pub type D462<const SCALE: u32> = crate::D<crate::wide_int::Int1536, SCALE>;
1368
1369#[cfg(any(feature = "d462", feature = "x-wide"))]
1376impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int1536, SCALE> {
1377 #[inline]
1378 fn default() -> Self { Self::ZERO }
1379}
1380
1381#[cfg(any(feature = "d462", feature = "x-wide"))]
1382crate::macros::full::decl_decimal_full!(
1383 wide D462,
1384 crate::wide_int::I1536,
1385 crate::wide_int::U1536,
1386 crate::wide_int::I3072,
1387 crate::wide_int::Int3072,
1388 crate::wide_int::Int4096,
1389 crate::wide_int::Int4096,
1390 wide_trig_d462,
1391 461
1392);
1393#[cfg(any(feature = "d462", feature = "x-wide"))]
1394pub type D462s0 = D462<0>;
1395#[cfg(any(feature = "d462", feature = "x-wide"))]
1396pub type D462s1 = D462<1>;
1397#[cfg(any(feature = "d462", feature = "x-wide"))]
1398pub type D462s18 = D462<18>;
1399#[cfg(any(feature = "d462", feature = "x-wide"))]
1400pub type D462s38 = D462<38>;
1401#[cfg(any(feature = "d462", feature = "x-wide"))]
1402pub type D462s75 = D462<75>;
1403#[cfg(any(feature = "d462", feature = "x-wide"))]
1404pub type D462s115 = D462<115>;
1405#[cfg(any(feature = "d462", feature = "x-wide"))]
1406pub type D462s153 = D462<153>;
1407#[cfg(any(feature = "d462", feature = "x-wide"))]
1408pub type D462s200 = D462<200>;
1409#[cfg(any(feature = "d462", feature = "x-wide"))]
1410pub type D462s230 = D462<230>;
1411#[cfg(any(feature = "d462", feature = "x-wide"))]
1412pub type D462s275 = D462<275>;
1413#[cfg(any(feature = "d462", feature = "x-wide"))]
1414pub type D462s307 = D462<307>;
1415#[cfg(any(feature = "d462", feature = "x-wide"))]
1416pub type D462s350 = D462<350>;
1417#[cfg(any(feature = "d462", feature = "x-wide"))]
1418pub type D462s400 = D462<400>;
1419#[cfg(any(feature = "d462", feature = "x-wide"))]
1420pub type D462s440 = D462<440>;
1421#[cfg(any(feature = "d462", feature = "x-wide"))]
1422pub type D462s460 = D462<460>;
1423#[cfg(any(feature = "d462", feature = "x-wide"))]
1426pub type D462s461 = D462<461>;
1427
1428#[cfg(any(feature = "d616", feature = "x-wide"))]
1442pub type D616<const SCALE: u32> = crate::D<crate::wide_int::Int2048, SCALE>;
1443
1444#[cfg(any(feature = "d616", feature = "x-wide"))]
1451impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int2048, SCALE> {
1452 #[inline]
1453 fn default() -> Self { Self::ZERO }
1454}
1455
1456#[cfg(any(feature = "d616", feature = "x-wide"))]
1457crate::macros::full::decl_decimal_full!(
1458 wide D616,
1459 crate::wide_int::I2048,
1460 crate::wide_int::U2048,
1461 crate::wide_int::I4096,
1462 crate::wide_int::Int4096,
1463 crate::wide_int::Int8192,
1464 crate::wide_int::Int8192,
1465 wide_trig_d616,
1466 615
1467);
1468#[cfg(any(feature = "d616", feature = "x-wide"))]
1469pub type D616s0 = D616<0>;
1470#[cfg(any(feature = "d616", feature = "x-wide"))]
1471pub type D616s1 = D616<1>;
1472#[cfg(any(feature = "d616", feature = "x-wide"))]
1473pub type D616s38 = D616<38>;
1474#[cfg(any(feature = "d616", feature = "x-wide"))]
1475pub type D616s75 = D616<75>;
1476#[cfg(any(feature = "d616", feature = "x-wide"))]
1477pub type D616s115 = D616<115>;
1478#[cfg(any(feature = "d616", feature = "x-wide"))]
1479pub type D616s153 = D616<153>;
1480#[cfg(any(feature = "d616", feature = "x-wide"))]
1481pub type D616s200 = D616<200>;
1482#[cfg(any(feature = "d616", feature = "x-wide"))]
1483pub type D616s230 = D616<230>;
1484#[cfg(any(feature = "d616", feature = "x-wide"))]
1485pub type D616s275 = D616<275>;
1486#[cfg(any(feature = "d616", feature = "x-wide"))]
1487pub type D616s308 = D616<308>;
1488#[cfg(any(feature = "d616", feature = "x-wide"))]
1489pub type D616s380 = D616<380>;
1490#[cfg(any(feature = "d616", feature = "x-wide"))]
1491pub type D616s462 = D616<462>;
1492#[cfg(any(feature = "d616", feature = "x-wide"))]
1493pub type D616s500 = D616<500>;
1494#[cfg(any(feature = "d616", feature = "x-wide"))]
1495pub type D616s555 = D616<555>;
1496#[cfg(any(feature = "d616", feature = "x-wide"))]
1497pub type D616s600 = D616<600>;
1498#[cfg(any(feature = "d616", feature = "x-wide"))]
1501pub type D616s615 = D616<615>;
1502
1503#[cfg(any(feature = "d924", feature = "xx-wide"))]
1516pub type D924<const SCALE: u32> = crate::D<crate::wide_int::Int3072, SCALE>;
1517
1518#[cfg(any(feature = "d924", feature = "xx-wide"))]
1525impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int3072, SCALE> {
1526 #[inline]
1527 fn default() -> Self { Self::ZERO }
1528}
1529
1530#[cfg(any(feature = "d924", feature = "xx-wide"))]
1531crate::macros::full::decl_decimal_full!(
1535 wide D924,
1536 crate::wide_int::I3072,
1537 crate::wide_int::U3072,
1538 crate::wide_int::I6144,
1539 crate::wide_int::Int6144,
1540 crate::wide_int::Int12288,
1541 crate::wide_int::Int12288,
1542 wide_trig_d924,
1543 923,
1544 no_const_table
1545);
1546#[cfg(any(feature = "d924", feature = "xx-wide"))]
1547pub type D924s0 = D924<0>;
1548#[cfg(any(feature = "d924", feature = "xx-wide"))]
1549pub type D924s1 = D924<1>;
1550#[cfg(any(feature = "d924", feature = "xx-wide"))]
1551pub type D924s75 = D924<75>;
1552#[cfg(any(feature = "d924", feature = "xx-wide"))]
1553pub type D924s153 = D924<153>;
1554#[cfg(any(feature = "d924", feature = "xx-wide"))]
1555pub type D924s230 = D924<230>;
1556#[cfg(any(feature = "d924", feature = "xx-wide"))]
1557pub type D924s307 = D924<307>;
1558#[cfg(any(feature = "d924", feature = "xx-wide"))]
1559pub type D924s400 = D924<400>;
1560#[cfg(any(feature = "d924", feature = "xx-wide"))]
1561pub type D924s461 = D924<461>;
1562#[cfg(any(feature = "d924", feature = "xx-wide"))]
1563pub type D924s462 = D924<462>;
1564#[cfg(any(feature = "d924", feature = "xx-wide"))]
1565pub type D924s500 = D924<500>;
1566#[cfg(any(feature = "d924", feature = "xx-wide"))]
1567pub type D924s616 = D924<616>;
1568#[cfg(any(feature = "d924", feature = "xx-wide"))]
1569pub type D924s700 = D924<700>;
1570#[cfg(any(feature = "d924", feature = "xx-wide"))]
1571pub type D924s800 = D924<800>;
1572#[cfg(any(feature = "d924", feature = "xx-wide"))]
1573pub type D924s860 = D924<860>;
1574#[cfg(any(feature = "d924", feature = "xx-wide"))]
1575pub type D924s900 = D924<900>;
1576#[cfg(any(feature = "d924", feature = "xx-wide"))]
1577pub type D924s920 = D924<920>;
1578#[cfg(any(feature = "d924", feature = "xx-wide"))]
1581pub type D924s923 = D924<923>;
1582
1583#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1596pub type D1232<const SCALE: u32> = crate::D<crate::wide_int::Int4096, SCALE>;
1597
1598#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1605impl<const SCALE: u32> Default for crate::D<crate::wide_int::Int4096, SCALE> {
1606 #[inline]
1607 fn default() -> Self { Self::ZERO }
1608}
1609
1610#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1611crate::macros::full::decl_decimal_full!(
1615 wide D1232,
1616 crate::wide_int::I4096,
1617 crate::wide_int::U4096,
1618 crate::wide_int::I8192,
1619 crate::wide_int::Int8192,
1620 crate::wide_int::Int16384,
1621 crate::wide_int::Int16384,
1622 wide_trig_d1232,
1623 1231,
1624 no_const_table
1625);
1626#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1627pub type D1232s0 = D1232<0>;
1628#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1629pub type D1232s1 = D1232<1>;
1630#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1631pub type D1232s75 = D1232<75>;
1632#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1633pub type D1232s153 = D1232<153>;
1634#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1635pub type D1232s230 = D1232<230>;
1636#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1637pub type D1232s307 = D1232<307>;
1638#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1639pub type D1232s461 = D1232<461>;
1640#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1641pub type D1232s616 = D1232<616>;
1642#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1643pub type D1232s700 = D1232<700>;
1644#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1645pub type D1232s800 = D1232<800>;
1646#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1647pub type D1232s900 = D1232<900>;
1648#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1649pub type D1232s924 = D1232<924>;
1650#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1651pub type D1232s1000 = D1232<1000>;
1652#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1653pub type D1232s1100 = D1232<1100>;
1654#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1655pub type D1232s1180 = D1232<1180>;
1656#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1657pub type D1232s1220 = D1232<1220>;
1658#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1659pub type D1232s1230 = D1232<1230>;
1660#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1663pub type D1232s1231 = D1232<1231>;
1664
1665#[cfg(any(feature = "d57", feature = "wide"))]
1689crate::macros::conversions::decl_cross_width_widening!(wide D57, crate::wide_int::I192, D38, i128);
1690#[cfg(any(feature = "d57", feature = "wide"))]
1691crate::macros::conversions::decl_cross_width_narrowing!(wide D38, i128, D57, crate::wide_int::I192);
1692
1693#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d76", feature = "wide")))]
1695crate::macros::conversions::decl_cross_width_widening!(wide D76, crate::wide_int::I256, D57, crate::wide_int::I192);
1696#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d76", feature = "wide")))]
1697crate::macros::conversions::decl_cross_width_narrowing!(wide D57, crate::wide_int::I192, D76, crate::wide_int::I256);
1698
1699#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d115", feature = "wide")))]
1701crate::macros::conversions::decl_cross_width_widening!(wide D115, crate::wide_int::I384, D76, crate::wide_int::I256);
1702#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d115", feature = "wide")))]
1703crate::macros::conversions::decl_cross_width_narrowing!(wide D76, crate::wide_int::I256, D115, crate::wide_int::I384);
1704
1705#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d153", feature = "wide")))]
1707crate::macros::conversions::decl_cross_width_widening!(wide D153, crate::wide_int::I512, D115, crate::wide_int::I384);
1708#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d153", feature = "wide")))]
1709crate::macros::conversions::decl_cross_width_narrowing!(wide D115, crate::wide_int::I384, D153, crate::wide_int::I512);
1710
1711#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d230", feature = "wide")))]
1713crate::macros::conversions::decl_cross_width_widening!(wide D230, crate::wide_int::I768, D153, crate::wide_int::I512);
1714#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d230", feature = "wide")))]
1715crate::macros::conversions::decl_cross_width_narrowing!(wide D153, crate::wide_int::I512, D230, crate::wide_int::I768);
1716
1717#[cfg(all(any(feature = "d230", feature = "wide"), any(feature = "d307", feature = "wide")))]
1719crate::macros::conversions::decl_cross_width_widening!(wide D307, crate::wide_int::I1024, D230, crate::wide_int::I768);
1720#[cfg(all(any(feature = "d230", feature = "wide"), any(feature = "d307", feature = "wide")))]
1721crate::macros::conversions::decl_cross_width_narrowing!(wide D230, crate::wide_int::I768, D307, crate::wide_int::I1024);
1722
1723#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d462", feature = "x-wide")))]
1725crate::macros::conversions::decl_cross_width_widening!(wide D462, crate::wide_int::I1536, D307, crate::wide_int::I1024);
1726#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d462", feature = "x-wide")))]
1727crate::macros::conversions::decl_cross_width_narrowing!(wide D307, crate::wide_int::I1024, D462, crate::wide_int::I1536);
1728
1729#[cfg(all(any(feature = "d462", feature = "x-wide"), any(feature = "d616", feature = "x-wide")))]
1731crate::macros::conversions::decl_cross_width_widening!(wide D616, crate::wide_int::I2048, D462, crate::wide_int::I1536);
1732#[cfg(all(any(feature = "d462", feature = "x-wide"), any(feature = "d616", feature = "x-wide")))]
1733crate::macros::conversions::decl_cross_width_narrowing!(wide D462, crate::wide_int::I1536, D616, crate::wide_int::I2048);
1734
1735#[cfg(all(any(feature = "d616", feature = "x-wide"), any(feature = "d924", feature = "xx-wide")))]
1737crate::macros::conversions::decl_cross_width_widening!(wide D924, crate::wide_int::I3072, D616, crate::wide_int::I2048);
1738#[cfg(all(any(feature = "d616", feature = "x-wide"), any(feature = "d924", feature = "xx-wide")))]
1739crate::macros::conversions::decl_cross_width_narrowing!(wide D616, crate::wide_int::I2048, D924, crate::wide_int::I3072);
1740
1741#[cfg(all(any(feature = "d924", feature = "xx-wide"), any(feature = "d1232", feature = "xx-wide")))]
1743crate::macros::conversions::decl_cross_width_widening!(wide D1232, crate::wide_int::I4096, D924, crate::wide_int::I3072);
1744#[cfg(all(any(feature = "d924", feature = "xx-wide"), any(feature = "d1232", feature = "xx-wide")))]
1745crate::macros::conversions::decl_cross_width_narrowing!(wide D924, crate::wide_int::I3072, D1232, crate::wide_int::I4096);
1746
1747#[cfg(any(feature = "d57", feature = "wide"))]
1755impl<const SCALE: u32> D57<SCALE> {
1756 #[inline]
1759 pub fn narrow(self) -> Result<D38<SCALE>, crate::support::error::ConvertError> { self.try_into() }
1760 #[inline] #[must_use]
1762 pub fn widen(self) -> D76<SCALE> { self.into() }
1763}
1764
1765#[cfg(any(feature = "d115", feature = "wide"))]
1766impl<const SCALE: u32> D115<SCALE> {
1767 #[inline]
1769 pub fn narrow(self) -> Result<D76<SCALE>, crate::support::error::ConvertError> { self.try_into() }
1770 #[inline] #[must_use]
1772 pub fn widen(self) -> D153<SCALE> { self.into() }
1773}
1774
1775#[cfg(any(feature = "d230", feature = "wide"))]
1776impl<const SCALE: u32> D230<SCALE> {
1777 #[inline]
1779 pub fn narrow(self) -> Result<D153<SCALE>, crate::support::error::ConvertError> { self.try_into() }
1780 #[inline] #[must_use]
1782 pub fn widen(self) -> D307<SCALE> { self.into() }
1783}
1784
1785#[cfg(any(feature = "d462", feature = "x-wide"))]
1786impl<const SCALE: u32> D462<SCALE> {
1787 #[inline]
1789 pub fn narrow(self) -> Result<D307<SCALE>, crate::support::error::ConvertError> { self.try_into() }
1790 #[inline] #[must_use]
1792 pub fn widen(self) -> D616<SCALE> { self.into() }
1793}
1794
1795#[cfg(any(feature = "d616", feature = "x-wide"))]
1796impl<const SCALE: u32> D616<SCALE> {
1797 #[inline]
1799 pub fn narrow(self) -> Result<D462<SCALE>, crate::support::error::ConvertError> { self.try_into() }
1800}
1801
1802#[cfg(all(
1807 any(feature = "d616", feature = "x-wide"),
1808 any(feature = "d924", feature = "xx-wide"),
1809))]
1810impl<const SCALE: u32> D616<SCALE> {
1811 #[inline] #[must_use]
1813 pub fn widen(self) -> D924<SCALE> { self.into() }
1814}
1815
1816#[cfg(any(feature = "d924", feature = "xx-wide"))]
1817impl<const SCALE: u32> D924<SCALE> {
1818 #[inline]
1820 pub fn narrow(self) -> Result<D616<SCALE>, crate::support::error::ConvertError> { self.try_into() }
1821 #[inline] #[must_use]
1823 pub fn widen(self) -> D1232<SCALE> { self.into() }
1824}
1825
1826#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1827impl<const SCALE: u32> D1232<SCALE> {
1828 #[inline]
1831 pub fn narrow(self) -> Result<D924<SCALE>, crate::support::error::ConvertError> { self.try_into() }
1832}
1833
1834crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D9, i32);
1847crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D18, i64);
1848crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D38, i128);
1849
1850#[cfg(any(feature = "d57", feature = "wide"))]
1851crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D57, crate::wide_int::Int192);
1852
1853#[cfg(any(feature = "d76", feature = "wide"))]
1854crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D76, crate::wide_int::Int256);
1855
1856#[cfg(any(feature = "d115", feature = "wide"))]
1857crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D115, crate::wide_int::Int384);
1858
1859#[cfg(any(feature = "d153", feature = "wide"))]
1860crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D153, crate::wide_int::Int512);
1861
1862#[cfg(any(feature = "d230", feature = "wide"))]
1863crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D230, crate::wide_int::Int768);
1864
1865#[cfg(any(feature = "d307", feature = "wide"))]
1866crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D307, crate::wide_int::Int1024);
1867
1868#[cfg(any(feature = "d462", feature = "x-wide"))]
1869crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D462, crate::wide_int::Int1536);
1870
1871#[cfg(any(feature = "d616", feature = "x-wide"))]
1872crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D616, crate::wide_int::Int2048);
1873
1874#[cfg(any(feature = "d924", feature = "xx-wide"))]
1875crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D924, crate::wide_int::Int3072);
1876
1877#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1878crate::macros::cross_scale_ops::decl_decimal_cross_scale_ops!(D1232, crate::wide_int::Int4096);
1879
1880crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D18, i64);
1892crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D38, i128);
1893#[cfg(any(feature = "d57", feature = "wide"))]
1894crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D57, crate::wide_int::Int192);
1895#[cfg(any(feature = "d76", feature = "wide"))]
1896crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D76, crate::wide_int::Int256);
1897#[cfg(any(feature = "d115", feature = "wide"))]
1898crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D115, crate::wide_int::Int384);
1899#[cfg(any(feature = "d153", feature = "wide"))]
1900crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D153, crate::wide_int::Int512);
1901#[cfg(any(feature = "d230", feature = "wide"))]
1902crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D230, crate::wide_int::Int768);
1903#[cfg(any(feature = "d307", feature = "wide"))]
1904crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D307, crate::wide_int::Int1024);
1905#[cfg(any(feature = "d462", feature = "x-wide"))]
1906crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D462, crate::wide_int::Int1536);
1907#[cfg(any(feature = "d616", feature = "x-wide"))]
1908crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D616, crate::wide_int::Int2048);
1909#[cfg(any(feature = "d924", feature = "xx-wide"))]
1910crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D924, crate::wide_int::Int3072);
1911#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1912crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D9, i32, D1232, crate::wide_int::Int4096);
1913
1914crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D38, i128);
1916#[cfg(any(feature = "d57", feature = "wide"))]
1917crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D57, crate::wide_int::Int192);
1918#[cfg(any(feature = "d76", feature = "wide"))]
1919crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D76, crate::wide_int::Int256);
1920#[cfg(any(feature = "d115", feature = "wide"))]
1921crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D115, crate::wide_int::Int384);
1922#[cfg(any(feature = "d153", feature = "wide"))]
1923crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D153, crate::wide_int::Int512);
1924#[cfg(any(feature = "d230", feature = "wide"))]
1925crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D230, crate::wide_int::Int768);
1926#[cfg(any(feature = "d307", feature = "wide"))]
1927crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D307, crate::wide_int::Int1024);
1928#[cfg(any(feature = "d462", feature = "x-wide"))]
1929crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D462, crate::wide_int::Int1536);
1930#[cfg(any(feature = "d616", feature = "x-wide"))]
1931crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D616, crate::wide_int::Int2048);
1932#[cfg(any(feature = "d924", feature = "xx-wide"))]
1933crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D924, crate::wide_int::Int3072);
1934#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1935crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D18, i64, D1232, crate::wide_int::Int4096);
1936
1937#[cfg(any(feature = "d57", feature = "wide"))]
1939crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D57, crate::wide_int::Int192);
1940#[cfg(any(feature = "d76", feature = "wide"))]
1941crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D76, crate::wide_int::Int256);
1942#[cfg(any(feature = "d115", feature = "wide"))]
1943crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D115, crate::wide_int::Int384);
1944#[cfg(any(feature = "d153", feature = "wide"))]
1945crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D153, crate::wide_int::Int512);
1946#[cfg(any(feature = "d230", feature = "wide"))]
1947crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D230, crate::wide_int::Int768);
1948#[cfg(any(feature = "d307", feature = "wide"))]
1949crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D307, crate::wide_int::Int1024);
1950#[cfg(any(feature = "d462", feature = "x-wide"))]
1951crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D462, crate::wide_int::Int1536);
1952#[cfg(any(feature = "d616", feature = "x-wide"))]
1953crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D616, crate::wide_int::Int2048);
1954#[cfg(any(feature = "d924", feature = "xx-wide"))]
1955crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D924, crate::wide_int::Int3072);
1956#[cfg(any(feature = "d1232", feature = "xx-wide"))]
1957crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D38, i128, D1232, crate::wide_int::Int4096);
1958
1959#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d76", feature = "wide")))]
1961crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D76, crate::wide_int::Int256);
1962#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d115", feature = "wide")))]
1963crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D115, crate::wide_int::Int384);
1964#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d153", feature = "wide")))]
1965crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D153, crate::wide_int::Int512);
1966#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d230", feature = "wide")))]
1967crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D230, crate::wide_int::Int768);
1968#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d307", feature = "wide")))]
1969crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D307, crate::wide_int::Int1024);
1970#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d462", feature = "x-wide")))]
1971crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D462, crate::wide_int::Int1536);
1972#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d616", feature = "x-wide")))]
1973crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D616, crate::wide_int::Int2048);
1974#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d924", feature = "xx-wide")))]
1975crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D924, crate::wide_int::Int3072);
1976#[cfg(all(any(feature = "d57", feature = "wide"), any(feature = "d1232", feature = "xx-wide")))]
1977crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D57, crate::wide_int::Int192, D1232, crate::wide_int::Int4096);
1978
1979#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d115", feature = "wide")))]
1981crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D76, crate::wide_int::Int256, D115, crate::wide_int::Int384);
1982#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d153", feature = "wide")))]
1983crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D76, crate::wide_int::Int256, D153, crate::wide_int::Int512);
1984#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d230", feature = "wide")))]
1985crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D76, crate::wide_int::Int256, D230, crate::wide_int::Int768);
1986#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d307", feature = "wide")))]
1987crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D76, crate::wide_int::Int256, D307, crate::wide_int::Int1024);
1988#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d462", feature = "x-wide")))]
1989crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D76, crate::wide_int::Int256, D462, crate::wide_int::Int1536);
1990#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d616", feature = "x-wide")))]
1991crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D76, crate::wide_int::Int256, D616, crate::wide_int::Int2048);
1992#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d924", feature = "xx-wide")))]
1993crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D76, crate::wide_int::Int256, D924, crate::wide_int::Int3072);
1994#[cfg(all(any(feature = "d76", feature = "wide"), any(feature = "d1232", feature = "xx-wide")))]
1995crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D76, crate::wide_int::Int256, D1232, crate::wide_int::Int4096);
1996
1997#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d153", feature = "wide")))]
1999crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D115, crate::wide_int::Int384, D153, crate::wide_int::Int512);
2000#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d230", feature = "wide")))]
2001crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D115, crate::wide_int::Int384, D230, crate::wide_int::Int768);
2002#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d307", feature = "wide")))]
2003crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D115, crate::wide_int::Int384, D307, crate::wide_int::Int1024);
2004#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d462", feature = "x-wide")))]
2005crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D115, crate::wide_int::Int384, D462, crate::wide_int::Int1536);
2006#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d616", feature = "x-wide")))]
2007crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D115, crate::wide_int::Int384, D616, crate::wide_int::Int2048);
2008#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d924", feature = "xx-wide")))]
2009crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D115, crate::wide_int::Int384, D924, crate::wide_int::Int3072);
2010#[cfg(all(any(feature = "d115", feature = "wide"), any(feature = "d1232", feature = "xx-wide")))]
2011crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D115, crate::wide_int::Int384, D1232, crate::wide_int::Int4096);
2012
2013#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d230", feature = "wide")))]
2015crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D153, crate::wide_int::Int512, D230, crate::wide_int::Int768);
2016#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d307", feature = "wide")))]
2017crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D153, crate::wide_int::Int512, D307, crate::wide_int::Int1024);
2018#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d462", feature = "x-wide")))]
2019crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D153, crate::wide_int::Int512, D462, crate::wide_int::Int1536);
2020#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d616", feature = "x-wide")))]
2021crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D153, crate::wide_int::Int512, D616, crate::wide_int::Int2048);
2022#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d924", feature = "xx-wide")))]
2023crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D153, crate::wide_int::Int512, D924, crate::wide_int::Int3072);
2024#[cfg(all(any(feature = "d153", feature = "wide"), any(feature = "d1232", feature = "xx-wide")))]
2025crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D153, crate::wide_int::Int512, D1232, crate::wide_int::Int4096);
2026
2027#[cfg(all(any(feature = "d230", feature = "wide"), any(feature = "d307", feature = "wide")))]
2029crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D230, crate::wide_int::Int768, D307, crate::wide_int::Int1024);
2030#[cfg(all(any(feature = "d230", feature = "wide"), any(feature = "d462", feature = "x-wide")))]
2031crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D230, crate::wide_int::Int768, D462, crate::wide_int::Int1536);
2032#[cfg(all(any(feature = "d230", feature = "wide"), any(feature = "d616", feature = "x-wide")))]
2033crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D230, crate::wide_int::Int768, D616, crate::wide_int::Int2048);
2034#[cfg(all(any(feature = "d230", feature = "wide"), any(feature = "d924", feature = "xx-wide")))]
2035crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D230, crate::wide_int::Int768, D924, crate::wide_int::Int3072);
2036#[cfg(all(any(feature = "d230", feature = "wide"), any(feature = "d1232", feature = "xx-wide")))]
2037crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D230, crate::wide_int::Int768, D1232, crate::wide_int::Int4096);
2038
2039#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d462", feature = "x-wide")))]
2041crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D307, crate::wide_int::Int1024, D462, crate::wide_int::Int1536);
2042#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d616", feature = "x-wide")))]
2043crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D307, crate::wide_int::Int1024, D616, crate::wide_int::Int2048);
2044#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d924", feature = "xx-wide")))]
2045crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D307, crate::wide_int::Int1024, D924, crate::wide_int::Int3072);
2046#[cfg(all(any(feature = "d307", feature = "wide"), any(feature = "d1232", feature = "xx-wide")))]
2047crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D307, crate::wide_int::Int1024, D1232, crate::wide_int::Int4096);
2048
2049#[cfg(all(any(feature = "d462", feature = "x-wide"), any(feature = "d616", feature = "x-wide")))]
2051crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D462, crate::wide_int::Int1536, D616, crate::wide_int::Int2048);
2052#[cfg(all(any(feature = "d462", feature = "x-wide"), any(feature = "d924", feature = "xx-wide")))]
2053crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D462, crate::wide_int::Int1536, D924, crate::wide_int::Int3072);
2054#[cfg(all(any(feature = "d462", feature = "x-wide"), any(feature = "d1232", feature = "xx-wide")))]
2055crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D462, crate::wide_int::Int1536, D1232, crate::wide_int::Int4096);
2056
2057#[cfg(all(any(feature = "d616", feature = "x-wide"), any(feature = "d924", feature = "xx-wide")))]
2059crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D616, crate::wide_int::Int2048, D924, crate::wide_int::Int3072);
2060#[cfg(all(any(feature = "d616", feature = "x-wide"), any(feature = "d1232", feature = "xx-wide")))]
2061crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D616, crate::wide_int::Int2048, D1232, crate::wide_int::Int4096);
2062
2063#[cfg(all(any(feature = "d924", feature = "xx-wide"), any(feature = "d1232", feature = "xx-wide")))]
2065crate::macros::cross_width_cmp::decl_cross_width_eq_ord!(D924, crate::wide_int::Int3072, D1232, crate::wide_int::Int4096);
2066
2067#[cfg(test)]
2068mod tests {
2069 use super::*;
2070
2071 #[test]
2073 fn from_bits_to_bits_round_trip() {
2074 let raw: i128 = 1_500_000_000_000;
2075 let v: D38s12 = D38s12::from_bits(raw);
2076 assert_eq!(v.to_bits(), raw);
2077 }
2078
2079 #[test]
2081 fn zero_is_zero_bits() {
2082 assert_eq!(D38s12::ZERO.to_bits(), 0);
2083 }
2084
2085 #[test]
2087 fn equal_by_underlying_bits() {
2088 assert_eq!(
2089 D38s12::from_bits(42_000_000_000_000),
2090 D38s12::from_bits(42_000_000_000_000)
2091 );
2092 assert_ne!(D38s12::from_bits(42), D38s12::from_bits(43));
2093 }
2094
2095 #[test]
2097 fn ord_by_underlying_bits() {
2098 assert!(D38s12::from_bits(1) < D38s12::from_bits(2));
2099 assert!(D38s12::from_bits(-1) < D38s12::from_bits(0));
2100 }
2101
2102 #[test]
2104 fn multiplier_is_ten_to_scale() {
2105 assert_eq!(D38s12::multiplier(), 1_000_000_000_000_i128);
2106 }
2107
2108 #[test]
2110 fn scale_const_matches_type_parameter() {
2111 assert_eq!(D38s12::SCALE, 12);
2112 const N: u32 = D38s12::SCALE;
2113 assert_eq!(N, 12);
2114 }
2115
2116 #[test]
2119 fn scale_method_matches_type_parameter() {
2120 assert_eq!(D38s12::ZERO.scale(), 12);
2121 assert_eq!(D38s12::ONE.scale(), 12);
2122 assert_eq!(D38s12::from_bits(i128::MAX).scale(), 12);
2123 assert_eq!(D38s12::from_bits(-7).scale(), 12);
2124 }
2125
2126 #[test]
2128 fn scale_at_other_scales() {
2129 type D6 = super::D38<6>;
2130 type D0 = super::D38<0>;
2131 type D38 = super::D38<38>;
2132 assert_eq!(D6::SCALE, 6);
2133 assert_eq!(D0::SCALE, 0);
2134 assert_eq!(D38::SCALE, 38);
2135 assert_eq!(D6::ZERO.scale(), 6);
2136 assert_eq!(D0::ZERO.scale(), 0);
2137 assert_eq!(D38::ZERO.scale(), 38);
2138 }
2139
2140 #[test]
2142 fn one_has_scaled_bit_pattern() {
2143 assert_eq!(D38s12::ONE.to_bits(), 1_000_000_000_000_i128);
2144 }
2145
2146 #[test]
2148 fn max_is_i128_max() {
2149 assert_eq!(D38s12::MAX.to_bits(), i128::MAX);
2150 }
2151
2152 #[test]
2154 fn min_is_i128_min() {
2155 assert_eq!(D38s12::MIN.to_bits(), i128::MIN);
2156 }
2157
2158 #[test]
2160 fn one_is_not_zero() {
2161 assert_ne!(D38s12::ONE, D38s12::ZERO);
2162 assert!(D38s12::ONE.is_positive());
2163 }
2164
2165 #[test]
2167 fn multiplier_at_other_scales() {
2168 type D6 = super::D38<6>;
2169 assert_eq!(D6::multiplier(), 1_000_000_i128);
2170 assert_eq!(D6::ONE.to_bits(), 1_000_000_i128);
2171
2172 type D0 = super::D38<0>;
2173 assert_eq!(D0::multiplier(), 1_i128);
2174 assert_eq!(D0::ONE.to_bits(), 1_i128);
2175 }
2176
2177 #[test]
2180 fn d9_basics() {
2181 assert_eq!(super::D9s2::ZERO.to_bits(), 0_i32);
2182 assert_eq!(super::D9s2::ONE.to_bits(), 100_i32);
2183 assert_eq!(super::D9s2::MAX.to_bits(), i32::MAX);
2184 assert_eq!(super::D9s2::MIN.to_bits(), i32::MIN);
2185 assert_eq!(super::D9s2::multiplier(), 100_i32);
2186 assert_eq!(super::D9s2::SCALE, 2);
2187 }
2188
2189 #[test]
2190 fn d18_basics() {
2191 assert_eq!(super::D18s9::ZERO.to_bits(), 0_i64);
2192 assert_eq!(super::D18s9::ONE.to_bits(), 1_000_000_000_i64);
2193 assert_eq!(super::D18s9::multiplier(), 1_000_000_000_i64);
2194 assert_eq!(super::D18s9::SCALE, 9);
2195 }
2196
2197 #[test]
2198 fn d9_arithmetic() {
2199 let a = super::D9s2::from_bits(150); let b = super::D9s2::from_bits(250); assert_eq!((a + b).to_bits(), 400);
2202 assert_eq!((b - a).to_bits(), 100);
2203 assert_eq!((-a).to_bits(), -150);
2204
2205 let x = super::D9s2::from_bits(200); let y = super::D9s2::from_bits(300); assert_eq!((x * y).to_bits(), 600); assert_eq!((y / x).to_bits(), 150); assert_eq!((y % x).to_bits(), 100); }
2211
2212 #[test]
2213 fn d18_arithmetic() {
2214 let a = super::D18s9::from_bits(1_500_000_000); let b = super::D18s9::from_bits(2_500_000_000); assert_eq!((a + b).to_bits(), 4_000_000_000);
2217 assert_eq!((b - a).to_bits(), 1_000_000_000);
2218 assert_eq!((-a).to_bits(), -1_500_000_000);
2219
2220 let x = super::D18s9::from_bits(2_000_000_000); let y = super::D18s9::from_bits(3_000_000_000); assert_eq!((x * y).to_bits(), 6_000_000_000);
2223 assert_eq!((y / x).to_bits(), 1_500_000_000);
2224 assert_eq!((y % x).to_bits(), 1_000_000_000);
2225 }
2226
2227 #[test]
2228 fn d9_display() {
2229 let v: super::D9s2 = super::D9s2::from_bits(150); let s = alloc::format!("{}", v);
2231 assert_eq!(s, "1.50");
2232 let neg: super::D9s2 = super::D9s2::from_bits(-2050); assert_eq!(alloc::format!("{}", neg), "-20.50");
2234 let zero: super::D9s2 = super::D9s2::ZERO;
2235 assert_eq!(alloc::format!("{}", zero), "0.00");
2236 let int_only: super::D9s0 = super::D9s0::from_bits(42);
2237 assert_eq!(alloc::format!("{}", int_only), "42");
2238 }
2239
2240 #[test]
2241 fn d18_display() {
2242 let v: super::D18s9 = super::D18s9::from_bits(1_500_000_000); assert_eq!(alloc::format!("{}", v), "1.500000000");
2244 let neg: super::D18s9 = super::D18s9::from_bits(-1_500_000_000);
2245 assert_eq!(alloc::format!("{}", neg), "-1.500000000");
2246 }
2247
2248 #[test]
2249 fn d9_debug() {
2250 let v: super::D9s2 = super::D9s2::from_bits(150);
2251 let s = alloc::format!("{:?}", v);
2252 assert_eq!(s, "D9<2>(1.50)");
2253 }
2254
2255 #[test]
2256 fn cross_width_widening_d9_to_d18() {
2257 let small: super::D9s2 = super::D9s2::from_bits(150);
2258 let wider: super::D18s2 = small.into();
2259 assert_eq!(wider.to_bits(), 150_i64);
2260 }
2261
2262 #[test]
2263 fn cross_width_widening_d9_to_d38() {
2264 let small: super::D9s2 = super::D9s2::from_bits(-150);
2265 let wider: super::D38s2 = small.into();
2266 assert_eq!(wider.to_bits(), -150_i128);
2267 }
2268
2269 #[test]
2270 fn cross_width_widening_d18_to_d38() {
2271 let mid: super::D18s9 = super::D18s9::from_bits(i64::MAX);
2272 let wider: super::D38s9 = mid.into();
2273 assert_eq!(wider.to_bits(), i64::MAX as i128);
2274 }
2275
2276 #[test]
2277 fn cross_width_narrowing_d38_to_d18_in_range() {
2278 let wide: super::D38s9 = super::D38s9::from_bits(1_500_000_000);
2279 let narrow: super::D18s9 = wide.try_into().unwrap();
2280 assert_eq!(narrow.to_bits(), 1_500_000_000);
2281 }
2282
2283 #[test]
2284 fn cross_width_narrowing_d38_to_d18_out_of_range() {
2285 let wide: super::D38s9 = super::D38s9::from_bits(i128::MAX);
2286 let narrow: Result<super::D18s9, _> = wide.try_into();
2287 assert!(narrow.is_err());
2288 }
2289
2290 #[test]
2291 fn cross_width_narrowing_d18_to_d9_in_range() {
2292 let mid: super::D18s2 = super::D18s2::from_bits(150);
2293 let narrow: super::D9s2 = mid.try_into().unwrap();
2294 assert_eq!(narrow.to_bits(), 150);
2295 }
2296
2297 #[test]
2298 fn cross_width_narrowing_d18_to_d9_out_of_range() {
2299 let mid: super::D18s2 = super::D18s2::from_bits(i64::MAX);
2300 let narrow: Result<super::D9s2, _> = mid.try_into();
2301 assert!(narrow.is_err());
2302 }
2303
2304 #[test]
2305 fn d9_consts() {
2306 if !crate::support::rounding::DEFAULT_IS_HALF_TO_EVEN { return; }
2307 use crate::types::consts::DecimalConstants;
2308 type D9s4 = super::D9<4>;
2309 assert_eq!(D9s4::pi().to_bits(), 31416);
2311 assert_eq!(D9s4::e().to_bits(), 27183);
2313 }
2314
2315 #[test]
2316 fn d9_from_str() {
2317 use core::str::FromStr;
2318 let v = super::D9s2::from_str("1.50").unwrap();
2319 assert_eq!(v.to_bits(), 150);
2320 let neg = super::D9s2::from_str("-20.50").unwrap();
2321 assert_eq!(neg.to_bits(), -2050);
2322 assert!(super::D9s2::from_str("1000000000000.00").is_err());
2324 }
2325
2326 #[test]
2327 fn d18_from_str() {
2328 use core::str::FromStr;
2329 let v = super::D18s9::from_str("1.500000000").unwrap();
2330 assert_eq!(v.to_bits(), 1_500_000_000);
2331 let neg = super::D18s9::from_str("-1.500000000").unwrap();
2332 assert_eq!(neg.to_bits(), -1_500_000_000);
2333 }
2334
2335 #[test]
2336 fn d18_consts() {
2337 if !crate::support::rounding::DEFAULT_IS_HALF_TO_EVEN { return; }
2338 use crate::types::consts::DecimalConstants;
2339 type D18s12 = super::D18<12>;
2340 assert_eq!(D18s12::pi().to_bits(), 3_141_592_653_590);
2342 assert_eq!(D18s12::tau().to_bits(), 6_283_185_307_180);
2344 }
2345
2346 #[cfg(any(feature = "d76", feature = "wide"))]
2347 #[test]
2348 fn d76_basics() {
2349
2350 use crate::types::traits::arithmetic::DecimalArithmetic;
2351 use crate::wide_int::I256;
2352 assert_eq!(super::D76s2::ZERO.to_bits(), I256::from_str_radix("0", 10).unwrap());
2353 assert_eq!(super::D76s2::ONE.to_bits(), I256::from_str_radix("100", 10).unwrap());
2354 assert_eq!(super::D76s2::MAX.to_bits(), I256::MAX);
2355 assert_eq!(super::D76s2::MIN.to_bits(), I256::MIN);
2356 assert_eq!(super::D76s2::multiplier(), I256::from_str_radix("100", 10).unwrap());
2357 assert_eq!(super::D76s2::SCALE, 2);
2358 assert_eq!(super::D76s2::ZERO.scale(), 2);
2359 let m75 = super::D76s75::multiplier();
2361 assert_eq!(
2362 m75,
2363 I256::from_str_radix("1000000000000000000000000000000000000000000000000000000000000000000000000000", 10).unwrap()
2364 );
2365 assert_eq!(<super::D76s12 as DecimalArithmetic>::MAX_SCALE, 75);
2366 let raw = I256::from_str_radix("123456789012345678901234567890", 10).unwrap();
2368 assert_eq!(super::D76s12::from_bits(raw).to_bits(), raw);
2369 }
2370
2371 #[cfg(any(feature = "d76", feature = "wide"))]
2372 #[test]
2373 fn d76_arithmetic() {
2374 type D = super::D76<12>;
2375 let one = D::ONE;
2376 let two = D::from_bits(D::multiplier() + D::multiplier());
2377 let three = D::from_bits(D::multiplier() * crate::wide_int::I256::from_str_radix("3", 10).unwrap());
2378 assert_eq!((one + two), three);
2380 assert_eq!((three - one), two);
2381 assert_eq!((-one).to_bits(), -D::multiplier());
2382 let six = D::from_bits(D::multiplier() * crate::wide_int::I256::from_str_radix("6", 10).unwrap());
2384 assert_eq!((two * three), six);
2385 assert_eq!((six / two), three);
2387 assert_eq!((six % two), D::ZERO);
2389 let mut v = one;
2391 v += two;
2392 assert_eq!(v, three);
2393 v *= two;
2394 assert_eq!(v, six);
2395 v /= two;
2396 assert_eq!(v, three);
2397 v -= one;
2398 assert_eq!(v, two);
2399 v %= two;
2400 assert_eq!(v, D::ZERO);
2401 let half = D::from_bits(D::multiplier() / crate::wide_int::I256::from_str_radix("2", 10).unwrap());
2403 let one_and_half = one + half;
2404 let product = one_and_half * one_and_half;
2405 let expected = D::from_bits(
2406 D::multiplier() * crate::wide_int::I256::from_str_radix("2", 10).unwrap()
2407 + D::multiplier() / crate::wide_int::I256::from_str_radix("4", 10).unwrap(),
2408 );
2409 assert_eq!(product, expected);
2410 }
2411
2412 #[cfg(any(feature = "d76", feature = "wide"))]
2413 #[test]
2414 fn d76_display() {
2415 type D = super::D76<12>;
2416 let one = D::ONE;
2417 assert_eq!(alloc::format!("{}", one), "1.000000000000");
2418 assert_eq!(alloc::format!("{}", -one), "-1.000000000000");
2419 assert_eq!(alloc::format!("{}", D::ZERO), "0.000000000000");
2420 let half = D::from_bits(D::multiplier() / crate::wide_int::I256::from_str_radix("2", 10).unwrap());
2421 assert_eq!(alloc::format!("{}", half), "0.500000000000");
2422 assert_eq!(alloc::format!("{:?}", one), "D76<12>(1.000000000000)");
2423 let int_only: super::D76<0> = super::D76::<0>::ONE;
2425 assert_eq!(alloc::format!("{}", int_only), "1");
2426 let big = super::D76s75::MAX;
2428 let s = alloc::format!("{}", big);
2429 assert!(s.starts_with("57.8960446"));
2430 assert_eq!(s.len(), "57.".len() + 75);
2431 }
2432
2433 #[cfg(any(feature = "d76", feature = "wide"))]
2434 #[test]
2435 fn d76_sign_and_helpers() {
2436 type D = super::D76<6>;
2437 let neg = -D::ONE;
2438 assert!(neg.is_negative());
2439 assert!(D::ONE.is_positive());
2440 assert!(!D::ZERO.is_positive());
2441 assert_eq!(neg.abs(), D::ONE);
2442 assert_eq!(D::ONE.signum(), D::ONE);
2443 assert_eq!(neg.signum(), neg);
2444 assert_eq!(D::ZERO.signum(), D::ZERO);
2445 let two = D::ONE + D::ONE;
2447 assert_eq!(D::ONE.min(two), D::ONE);
2448 assert_eq!(D::ONE.max(two), two);
2449 assert_eq!(two.clamp(D::ZERO, D::ONE), D::ONE);
2450 assert_eq!(D::ONE.copysign(neg), neg);
2452 assert_eq!(neg.copysign(D::ONE), D::ONE);
2453 let half = D::from_bits(D::multiplier() / crate::wide_int::I256::from_str_radix("2", 10).unwrap());
2455 assert_eq!(two.recip(), half);
2456 }
2457
2458 #[cfg(any(feature = "d76", feature = "wide"))]
2459 #[test]
2460 fn d76_overflow_variants() {
2461 type D = super::D76<2>;
2462 assert_eq!(D::MAX.checked_add(D::ONE), None);
2464 assert_eq!(D::ONE.checked_add(D::ONE), Some(D::ONE + D::ONE));
2465 assert_eq!(D::MAX.saturating_add(D::ONE), D::MAX);
2467 assert_eq!(D::MIN.saturating_sub(D::ONE), D::MIN);
2468 assert_eq!(D::MIN.checked_neg(), None);
2470 assert_eq!(D::ONE.checked_neg(), Some(-D::ONE));
2471 let two = D::ONE + D::ONE;
2473 let three = two + D::ONE;
2474 assert_eq!(two.checked_mul(three), Some(D::from_bits(D::multiplier() * crate::wide_int::I256::from_str_radix("6", 10).unwrap())));
2475 assert_eq!(D::ONE.checked_div(D::ZERO), None);
2476 assert_eq!((three).checked_div(D::ONE), Some(three));
2477 let one_lsb = D::from_bits(crate::wide_int::I256::from_str_radix("1", 10).unwrap());
2479 assert_eq!(D::MAX.wrapping_add(one_lsb), D::MIN);
2480 assert_eq!(D::ONE.overflowing_add(D::ONE), (two, false));
2482 assert_eq!(D::MAX.overflowing_add(D::ONE).1, true);
2483 }
2484
2485 #[cfg(any(feature = "d76", feature = "wide"))]
2486 #[test]
2487 fn d76_consts_and_from_str() {
2488 use crate::types::consts::DecimalConstants;
2489 use core::str::FromStr;
2490 assert_eq!(
2492 super::D76::<12>::pi().to_bits(),
2493 crate::wide_int::I256::from_str_radix("3141592653590", 10).unwrap()
2494 );
2495 assert_eq!(
2496 super::D76::<4>::e().to_bits(),
2497 crate::wide_int::I256::from_str_radix("27183", 10).unwrap()
2498 );
2499 let v = super::D76::<2>::from_str("1.50").unwrap();
2501 assert_eq!(v.to_bits(), crate::wide_int::I256::from_str_radix("150", 10).unwrap());
2502 let neg = super::D76::<2>::from_str("-20.50").unwrap();
2503 assert_eq!(neg.to_bits(), crate::wide_int::I256::from_str_radix("-2050", 10).unwrap());
2504 use ::num_traits::{One, Zero};
2506 assert!(super::D76::<6>::zero().is_zero());
2507 assert!(super::D76::<6>::one().is_one());
2508 }
2509
2510 #[cfg(any(feature = "d76", feature = "wide"))]
2511 #[test]
2512 fn d76_conversions() {
2513 use crate::wide_int::I256;
2514 type D = super::D76<6>;
2515 let from_i32: D = 5i32.into();
2517 assert_eq!(from_i32.to_bits(), I256::from_str_radix("5000000", 10).unwrap());
2518 let from_u64: D = 7u64.into();
2519 assert_eq!(from_u64.to_bits(), I256::from_str_radix("7000000", 10).unwrap());
2520 let from_neg: D = (-3i16).into();
2521 assert_eq!(from_neg.to_bits(), I256::from_str_radix("-3000000", 10).unwrap());
2522 let from_i128 = D::try_from(123i128).unwrap();
2524 assert_eq!(from_i128.to_bits(), I256::from_str_radix("123000000", 10).unwrap());
2525 let from_u128 = D::try_from(u128::MAX).unwrap();
2526 assert_eq!(
2527 from_u128.to_bits(),
2528 I256::from_str_radix("340282366920938463463374607431768211455", 10).unwrap()
2529 * I256::from_str_radix("1000000", 10).unwrap()
2530 );
2531 let from_f64 = D::try_from(2.5f64).unwrap();
2533 assert_eq!(from_f64.to_bits(), I256::from_str_radix("2500000", 10).unwrap());
2534 assert!(D::try_from(f64::NAN).is_err());
2535 assert_eq!(D::from_int(9i128), D::from(9i32));
2537 assert_eq!(D::from_i32(-4), D::from(-4i32));
2538 use crate::support::rounding::RoundingMode;
2540 let two_and_half = D::from_bits(I256::from_str_radix("2500000", 10).unwrap());
2541 assert_eq!(two_and_half.to_int_with(RoundingMode::HalfToEven), 2);
2542 assert_eq!(two_and_half.to_int_with(RoundingMode::HalfAwayFromZero), 3);
2543 assert_eq!(two_and_half.to_int_with(RoundingMode::Ceiling), 3);
2544 assert_eq!(two_and_half.to_int_with(RoundingMode::Floor), 2);
2545 let neg_two_and_half = -two_and_half;
2546 assert_eq!(neg_two_and_half.to_int_with(RoundingMode::Floor), -3);
2547 assert_eq!(neg_two_and_half.to_int_with(RoundingMode::Trunc), -2);
2548 let d38: super::D38s6 = super::D38s6::from_bits(-150);
2550 let widened: super::D76<6> = d38.into();
2551 assert_eq!(widened.to_bits(), I256::from_str_radix("-150", 10).unwrap());
2552 let in_range: super::D76<6> = super::D76::<6>::from_bits(I256::from_str_radix("999", 10).unwrap());
2554 let narrowed: super::D38s6 = in_range.try_into().unwrap();
2555 assert_eq!(narrowed.to_bits(), 999i128);
2556 let out_of_range = super::D76s75::MAX;
2558 let narrow_fail: Result<super::D38<75>, _> = out_of_range.try_into();
2559 assert!(narrow_fail.is_err());
2560 }
2561
2562 #[cfg(any(feature = "d76", feature = "wide"))]
2563 #[test]
2564 fn d76_rescale_rounding_floats() {
2565 use crate::support::rounding::RoundingMode;
2566 use crate::wide_int::I256;
2567 type D6 = super::D76<6>;
2568 let v = D6::from_bits(I256::from_str_radix("1500000", 10).unwrap()); let up: super::D76<9> = v.rescale::<9>();
2571 assert_eq!(up.to_bits(), I256::from_str_radix("1500000000", 10).unwrap());
2572 let down: super::D76<2> = v.rescale::<2>();
2574 assert_eq!(down.to_bits(), I256::from_str_radix("150", 10).unwrap());
2575 let two_p_five = super::D76::<1>::from_bits(I256::from_str_radix("25", 10).unwrap());
2577 let r0: super::D76<0> = two_p_five.rescale_with::<0>(RoundingMode::HalfToEven);
2578 assert_eq!(r0.to_bits(), I256::from_str_radix("2", 10).unwrap());
2579 let r0b: super::D76<0> = two_p_five.rescale_with::<0>(RoundingMode::HalfAwayFromZero);
2580 assert_eq!(r0b.to_bits(), I256::from_str_radix("3", 10).unwrap());
2581 assert_eq!(v.floor(), D6::ONE);
2583 assert_eq!(v.ceil(), D6::ONE + D6::ONE);
2584 assert_eq!(v.round(), D6::ONE + D6::ONE); assert_eq!(v.trunc(), D6::ONE);
2586 assert_eq!(v.fract(), D6::from_bits(I256::from_str_radix("500000", 10).unwrap()));
2587 let neg = -v;
2589 assert_eq!(neg.floor(), -(D6::ONE + D6::ONE));
2590 assert_eq!(neg.ceil(), -D6::ONE);
2591 assert_eq!(neg.round(), -(D6::ONE + D6::ONE));
2592 let from_f = D6::from_f64(2.5);
2594 assert_eq!(from_f.to_bits(), I256::from_str_radix("2500000", 10).unwrap());
2595 assert_eq!(D6::from_f64(f64::NAN), D6::ZERO);
2596 assert_eq!(D6::from_f64(f64::INFINITY), D6::MAX);
2597 let round_trip = D6::ONE.to_f64();
2598 assert!((round_trip - 1.0).abs() < 1e-9);
2599 }
2600
2601 #[cfg(any(feature = "d153", feature = "wide"))]
2602 #[test]
2603 fn d153_smoke() {
2604
2605 use crate::types::traits::arithmetic::DecimalArithmetic;
2606 use crate::wide_int::I512;
2607 type D = super::D153<35>;
2608 assert_eq!(<D as DecimalArithmetic>::MAX_SCALE, 152);
2609 assert_eq!(D::ZERO.to_bits(), I512::from_str_radix("0", 10).unwrap());
2610 let one = D::ONE;
2611 let two = one + one;
2612 let three = two + one;
2613 assert_eq!(two * three, D::from_int(6i128));
2614 assert_eq!((three * two) / two, three);
2615 assert_eq!(alloc::format!("{}", one).len(), "1.".len() + 35);
2616 assert_eq!(D::from_int(5i128).to_int(), 5);
2617 let up: super::D153<150> = one.rescale::<150>();
2619 assert_eq!(up, super::D153::<150>::ONE);
2620 let _ = super::D153s152::multiplier();
2622 }
2623
2624 #[cfg(any(feature = "d307", feature = "wide"))]
2625 #[test]
2626 fn d307_smoke() {
2627
2628 use crate::types::traits::arithmetic::DecimalArithmetic;
2629 use crate::wide_int::I1024;
2630 type D = super::D307<35>;
2631 assert_eq!(<D as DecimalArithmetic>::MAX_SCALE, 306);
2632 let one = D::ONE;
2633 let two = one + one;
2634 let three = two + one;
2635 assert_eq!(two * three, D::from_int(6i128));
2636 assert_eq!((three * two) / two, three);
2637 assert_eq!(D::ZERO.to_bits(), I1024::from_str_radix("0", 10).unwrap());
2638 assert_eq!(alloc::format!("{}", one).len(), "1.".len() + 35);
2639 #[cfg(any(feature = "d76", feature = "wide"))]
2641 {
2642 let small: super::D76<35> = super::D76::<35>::ONE;
2643 let widened: super::D307<35> = small.into();
2644 assert_eq!(widened, D::ONE);
2645 let narrowed: super::D76<35> = widened.try_into().unwrap();
2646 assert_eq!(narrowed, super::D76::<35>::ONE);
2647 }
2648 let _ = super::D307s306::multiplier();
2650 }
2651
2652 #[test]
2653 fn d9_op_assign() {
2654 let mut v = super::D9s2::from_bits(100);
2655 v += super::D9s2::from_bits(50);
2656 assert_eq!(v.to_bits(), 150);
2657 v -= super::D9s2::from_bits(25);
2658 assert_eq!(v.to_bits(), 125);
2659 v *= super::D9s2::from_bits(200); assert_eq!(v.to_bits(), 250);
2661 v /= super::D9s2::from_bits(200); assert_eq!(v.to_bits(), 125);
2663 v %= super::D9s2::from_bits(100);
2664 assert_eq!(v.to_bits(), 25);
2665 }
2666}