diff --git a/src/conversion.rs b/src/conversion.rs index 5ef3a26..7f03e90 100644 --- a/src/conversion.rs +++ b/src/conversion.rs @@ -4,14 +4,16 @@ use crate::*; #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub struct TryFromIntError(pub(crate) ()); -impl From for TryFromIntError { - fn from(_: lib::core::num::TryFromIntError) -> TryFromIntError { +impl From for TryFromIntError { + #[inline] + fn from(_: core::num::TryFromIntError) -> TryFromIntError { TryFromIntError(()) } } -impl From for TryFromIntError { - fn from(_: lib::core::convert::Infallible) -> TryFromIntError { +impl From for TryFromIntError { + #[inline] + fn from(_: core::convert::Infallible) -> TryFromIntError { TryFromIntError(()) } } @@ -23,8 +25,9 @@ macro_rules! implement_from { {[$($name:ident),*], $from:ident } => {$(implement_from!($name, $from);)*}; {$name:ident, $from:ty} => { impl From<$from> for $name { + #[inline] fn from(x: $from) -> $name { - $name(x.into()) + unsafe { $name::new_unchecked(x.into()) } } } }; @@ -38,15 +41,9 @@ macro_rules! implement_try_from { impl TryFrom<$from> for $name { type Error = TryFromIntError; + #[inline] fn try_from(x: $from) -> Result<$name, Self::Error> { - // First get the value into the correct type - let value = x.try_into()?; - - if value <= $name::MAX.into() && value >= $name::MIN.into() { - Ok($name(value)) - } else { - Err(TryFromIntError(())) - } + Self::try_new(x.try_into()?).ok_or(TryFromIntError(())) } } }; @@ -57,8 +54,9 @@ macro_rules! implement_into { {[$($name:ident),*], $from:ident } => {$(implement_into!($name, $from);)*}; {$name:ident, $into:ident} => { impl From<$name> for $into { + #[inline] fn from(x: $name) -> $into { - $into::from(x.0) + x.get().into() } } }; @@ -71,8 +69,9 @@ macro_rules! implement_try_into { impl TryFrom<$name> for $into { type Error = TryFromIntError; + #[inline] fn try_from(x: $name) -> Result<$into, Self::Error> { - Ok($into::try_from(x.0)?) + Ok(x.get().try_into()?) } } }; @@ -1735,21 +1734,19 @@ implement_from!( ); impl From for u1 { + #[inline] fn from(b: bool) -> Self { - match b { - true => u1(1), - false => u1(0), - } + unsafe { Self::new_unchecked(match b { + true => 1, + false => 0, + }) } } } impl From for bool { - fn from(u1(x): u1) -> Self { - match x { - 0 => false, - 1 => true, - _ => unreachable!(), - } + #[inline] + fn from(x: u1) -> Self { + x.get() != 0 } } @@ -1759,45 +1756,45 @@ mod tests { #[test] fn test_infallible_conversion_unsigned() { - assert_eq!(u16::from(u9(12)), 12u16); - assert_eq!(u32::from(u9(12)), 12u32); + assert_eq!(u16::from(u9::new(12)), 12u16); + assert_eq!(u32::from(u9::new(12)), 12u32); - assert_eq!(u9(127), 127u8.into()); + assert_eq!(u9::new(127), 127u8.into()); - assert_eq!(u7::from(u6(65)), u7(65)); + assert_eq!(u7::from(u6::new(25)), u7::new(25)); } #[test] fn test_infallible_conversion_signed() { - assert_eq!(i16::from(i9(12)), 12i16); - assert_eq!(i32::from(i9(12)), 12i32); + assert_eq!(i16::from(i9::new(12)), 12i16); + assert_eq!(i32::from(i9::new(12)), 12i32); - assert_eq!(i16::from(i9(-12)), -12i16); - assert_eq!(i32::from(i9(-12)), -12i32); + assert_eq!(i16::from(i9::new(-12)), -12i16); + assert_eq!(i32::from(i9::new(-12)), -12i32); - assert_eq!(i9(127), 127i8.into()); + assert_eq!(i9::new(127), 127i8.into()); - assert_eq!(i7::from(i6(65)), i7(65)); - assert_eq!(i7::from(i6(-65)), i7(-65)); + assert_eq!(i7::from(i6::new(25)), i7::new(25)); + assert_eq!(i7::from(i6::new(-25)), i7::new(-25)); } #[test] fn test_fallible_conversion_unsigned() { - assert_eq!(u16::try_from(u9(12)), Ok(12u16)); - assert_eq!(u32::try_from(u9(12)), Ok(12u32)); + assert_eq!(u16::try_from(u9::new(12)), Ok(12u16)); + assert_eq!(u32::try_from(u9::new(12)), Ok(12u32)); - assert_eq!(127u8.try_into(), Ok(u9(127))); + assert_eq!(127u8.try_into(), Ok(u9::new(127))); - assert_eq!(u7::try_from(u6(65)), Ok(u7(65))); + assert_eq!(u7::try_from(u6::new(25)), Ok(u7::new(25))); - assert!(u16::try_from(u19(0x1_ffff)).is_err()); - assert!(u32::try_from(u39(0x1_fffff_ffff)).is_err()); + assert!(u16::try_from(u19::new(0x1_ffff)).is_err()); + assert!(u32::try_from(u39::new(0x1_fffff_ffff)).is_err()); - assert!(u6::try_from(u7(127)).is_err()); + assert!(u6::try_from(u7::new(127)).is_err()); - assert_eq!(u2::try_from(1usize), Ok(u2(1))); + assert_eq!(u2::try_from(1usize), Ok(u2::new(1))); assert!(u2::try_from(4usize).is_err()); - assert_eq!(u2(1).try_into(), Ok(1usize)); + assert_eq!(u2::new(1).try_into(), Ok(1usize)); // Make sure that uX types behave the same as standard types with regards to usize // conversion. @@ -1809,24 +1806,24 @@ mod tests { #[test] fn test_fallible_conversion_signed() { - assert_eq!(i16::try_from(i9(12)), Ok(12i16)); - assert_eq!(i32::try_from(i9(12)), Ok(12i32)); + assert_eq!(i16::try_from(i9::new(12)), Ok(12i16)); + assert_eq!(i32::try_from(i9::new(12)), Ok(12i32)); - assert_eq!(i16::try_from(i9(-12)), Ok(-12i16)); - assert_eq!(i32::try_from(i9(-12)), Ok(-12i32)); + assert_eq!(i16::try_from(i9::new(-12)), Ok(-12i16)); + assert_eq!(i32::try_from(i9::new(-12)), Ok(-12i32)); - assert_eq!(127i8.try_into(), Ok(i9(127))); + assert_eq!(127i8.try_into(), Ok(i9::new(127))); - assert_eq!(i7::try_from(i6(65)), Ok(i7(65))); - assert_eq!(i7::try_from(i6(-65)), Ok(i7(-65))); + assert_eq!(i7::try_from(i6::new(25)), Ok(i7::new(25))); + assert_eq!(i7::try_from(i6::new(-25)), Ok(i7::new(-25))); - assert!(i16::try_from(i19(0xffff)).is_err()); - assert!(i32::try_from(i39(0xffff_ffff)).is_err()); + assert!(i16::try_from(i19::new(0xffff)).is_err()); + assert!(i32::try_from(i39::new(0xffff_ffff)).is_err()); - assert!(i16::try_from(i19(-0xffff)).is_err()); - assert!(i32::try_from(i39(-0xffff_ffff)).is_err()); + assert!(i16::try_from(i19::new(-0xffff)).is_err()); + assert!(i32::try_from(i39::new(-0xffff_ffff)).is_err()); - assert!(i6::try_from(i7(64)).is_err()); - assert!(i6::try_from(i7(-64)).is_err()); + assert!(i6::try_from(i7::new(63)).is_err()); + assert!(i6::try_from(i7::new(-64)).is_err()); } } diff --git a/src/lib.rs b/src/lib.rs index 59b4196..6edd157 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,82 +14,102 @@ #![no_std] -mod lib { - pub use core; -} - mod conversion; - -use lib::core::ops::{ - BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Not, Shl, ShlAssign, Shr, - ShrAssign, +mod niche; + +use core::cmp::{Ord, Ordering, PartialOrd}; +use core::fmt::{Binary, Debug, Display, Formatter, LowerHex, Octal, UpperHex}; +use core::hash::{Hash, Hasher}; +use core::ops::{ + Add, BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Not, Shl, ShlAssign, Shr, + ShrAssign, Sub, }; - -use lib::core::hash::{Hash, Hasher}; - -use lib::core::cmp::{Ord, Ordering, PartialOrd}; - -use lib::core::fmt::{Binary, Display, Formatter, LowerHex, Octal, UpperHex}; +use core::{fmt, mem}; macro_rules! define_unsigned { - ($name:ident, $bits:expr, $type:ident) => {define_unsigned!(#[doc=""], $name, $bits, $type);}; - (#[$doc:meta], $name:ident, $bits:expr, $type:ident) => { - - #[$doc] - #[allow(non_camel_case_types)] - #[derive(Default, Clone, Copy, Debug)] - pub struct $name($type); + ($(($doc:literal $name:ident $bits:literal $type:ident))*) => { + $( + impl $name { + #[inline] + fn mask(value: $type) -> Self { + let value = value & (((1 as $type) << $bits).overflowing_sub(1).0); + unsafe { $name::new_unchecked(value) } + } - impl $name { - pub const MAX: Self = $name(((1 as $type) << $bits) -1 ); - pub const MIN: Self = $name(0); + #[inline] + fn mask_pos(value: $type) -> Self { + let value = value & (((1 as $type) << $bits).overflowing_sub(1).0); + unsafe { $name::new_unchecked(value) } + } - fn mask(self) -> Self { - $name(self.0 & ( ((1 as $type) << $bits).overflowing_sub(1).0)) + #[inline] + fn mask_neg(value: $type) -> Self { + let value = value & (((1 as $type) << $bits).overflowing_sub(1).0); + unsafe { $name::new_unchecked(value) } + } } - } - - implement_common!($name, $bits, $type); + )* - } + implement_common!($(($doc $name $bits $type))*); + implement_layout_test!(test_unsigned_layout $($name $type)*); + }; } macro_rules! define_signed { - ($name:ident, $bits:expr, $type:ident) => {define_signed!(#[doc=""], $name, $bits, $type);}; - (#[$doc:meta], $name:ident, $bits:expr, $type:ident) => { - - #[$doc] - #[allow(non_camel_case_types)] - #[derive(Default, Clone, Copy, Debug)] - pub struct $name($type); + ($(($doc:literal $name:ident $bits:literal $type:ident))*) => { + $( + impl $name { + #[inline] + fn mask(value: $type) -> Self { + let value = if value & (1 << ($bits - 1)) == 0 { + value & (((1 as $type) << $bits).overflowing_sub(1).0) + } else { + value | !(((1 as $type) << $bits).overflowing_sub(1).0) + }; + unsafe { $name::new_unchecked(value) } + } - #[$doc] - impl $name { - pub const MAX: Self = $name(((1 as $type) << ($bits - 1)) - 1); - pub const MIN: Self = $name(-((1 as $type) << ($bits - 1))); + #[inline] + fn mask_pos(value: $type) -> Self { + let value = value & (((1 as $type) << $bits).overflowing_sub(1).0); + unsafe { $name::new_unchecked(value) } + } - fn mask(self) -> Self { - if ( self.0 & (1<<($bits-1)) ) == 0 { - $name(self.0 & ( ((1 as $type) << $bits).overflowing_sub(1).0)) - } else { - $name(self.0 | !( ((1 as $type) << $bits).overflowing_sub(1).0)) + #[inline] + fn mask_neg(value: $type) -> Self { + let value = value | !(((1 as $type) << $bits).overflowing_sub(1).0); + unsafe { $name::new_unchecked(value) } } } - } - - implement_common!($name, $bits, $type); + )* - } + implement_common!($(($doc $name $bits $type))*); + implement_layout_test!(test_signed_layout $($name $type)*); + }; } macro_rules! implement_common { - ($name:ident, $bits:expr, $type:ident) => { + ($(($doc:literal $name:ident $bits:literal $type:ident))*) => { $( + #[doc = $doc] + #[allow(non_camel_case_types)] + #[derive(Clone, Copy)] + pub struct $name(crate::niche::$name); + impl $name { + // The largest value that can be represented by this integer type. + pub const MAX: Self = $name::new(crate::niche::$name::MAX); + + // The largest value that can be represented by this integer type. + pub const MIN: Self = $name::new(crate::niche::$name::MIN); + /// Returns the smallest value that can be represented by this integer type. + #[inline] pub fn min_value() -> $name { $name::MIN } + /// Returns the largest value that can be represented by this integer type. + #[inline] pub fn max_value() -> $name { $name::MAX } @@ -113,9 +133,71 @@ macro_rules! implement_common { /// # Panic /// /// This function will panic if `value` is not representable by this type + #[allow(unreachable_patterns)] + #[inline] pub const fn new(value: $type) -> $name { - assert!(value <= $name::MAX.0 && value >= $name::MIN.0); - $name(value) + const MIN: $type = crate::niche::$name::MIN; + const MAX: $type = crate::niche::$name::MAX; + match value { + MIN..=MAX => unsafe { $name::new_unchecked(value) }, + _ => panic!("value out of range") + } + } + + /// Try to crate a new variable + /// + /// If the value is out of range, [`None`] is returned. + /// + /// ``` + /// use ux::*; + /// + /// assert_eq!(i15::try_new(0x3fff).unwrap(), i15::new(0x3fff)); + /// assert_eq!(i15::try_new(0x4000), None); + /// ``` + #[allow(unreachable_patterns)] + #[inline] + pub const fn try_new(value: core::primitive::$type) -> Option<$name> { + const MIN: core::primitive::$type = crate::niche::$name::MIN; + const MAX: core::primitive::$type = crate::niche::$name::MAX; + match value { + MIN..=MAX => Some(unsafe { $name::new_unchecked(value) }), + _ => None, + } + } + + /// Crate a new variable without checking if it is in range + /// + /// Only use this function if you are sure that value is in range, + /// or subtle, hard to debug runtime errors will occur! + /// + /// # Examples + /// + /// Basic usage: + /// + /// ``` + /// use ux::*; + /// + /// assert_eq!(unsafe { u31::new_unchecked(64) }, u31::new(64)); + /// ``` + #[inline] + pub const unsafe fn new_unchecked(value: $type) -> $name { + Self(mem::transmute(value)) + } + + /// Get the contained value + /// + /// # Examples + /// + /// Basic usage: + /// + /// ``` + /// use ux::*; + /// + /// assert_eq!(u31::new(64).get(), 64); + /// ``` + #[inline] + pub const fn get(self) -> $type { + unsafe { mem::transmute(self.0) } } /// Wrapping (modular) subtraction. Computes `self - other`, @@ -133,8 +215,9 @@ macro_rules! implement_common { /// assert_eq!(i5::new(-10).wrapping_sub(i5::new(5)), i5::new(-15)); /// assert_eq!(i5::new(-15).wrapping_sub(i5::new(5)), i5::new(12)); /// ``` + #[inline] pub fn wrapping_sub(self, rhs: Self) -> Self { - $name(self.0.wrapping_sub(rhs.0)).mask() + $name::mask(self.get().wrapping_sub(rhs.get())) } /// Wrapping (modular) addition. Computes `self + other`, @@ -152,66 +235,89 @@ macro_rules! implement_common { /// assert_eq!(i5::new(10).wrapping_add(i5::new(5)), i5::new(15)); /// assert_eq!(i5::new(15).wrapping_add(i5::new(5)), i5::new(-12)); /// ``` + #[inline] pub fn wrapping_add(self, rhs: Self) -> Self { - $name(self.0.wrapping_add(rhs.0)).mask() + $name::mask(self.get().wrapping_add(rhs.get())) + } + } + + impl Default for $name { + #[inline] + fn default() -> Self { + unsafe { $name::new_unchecked(0) } } } impl PartialEq for $name { + #[inline] fn eq(&self, other: &Self) -> bool { - self.mask().0 == other.mask().0 + self.get() == other.get() } } impl Eq for $name {} impl PartialOrd for $name { + #[inline] fn partial_cmp(&self, other: &$name) -> Option { - self.mask().0.partial_cmp(&other.mask().0) + self.get().partial_cmp(&other.get()) } } impl Ord for $name { + #[inline] fn cmp(&self, other: &$name) -> Ordering { - self.mask().0.cmp(&other.mask().0) + self.get().cmp(&other.get()) } } impl Hash for $name { + #[inline] fn hash(&self, h: &mut H) { - self.mask().0.hash(h) + self.get().hash(h) } } // Implement formating functions + impl Debug for $name { + #[inline] + fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> { + Debug::fmt(&self.get(), f) + } + } + impl Display for $name { - fn fmt(&self, f: &mut Formatter) -> Result<(), lib::core::fmt::Error> { - let &$name(ref value) = self; - <$type as Display>::fmt(value, f) + #[inline] + fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> { + Display::fmt(&self.get(), f) } } + impl UpperHex for $name { - fn fmt(&self, f: &mut Formatter) -> Result<(), lib::core::fmt::Error> { - let &$name(ref value) = self; - <$type as UpperHex>::fmt(value, f) + #[inline] + fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> { + UpperHex::fmt(&self.get(), f) } } + impl LowerHex for $name { - fn fmt(&self, f: &mut Formatter) -> Result<(), lib::core::fmt::Error> { - let &$name(ref value) = self; - <$type as LowerHex>::fmt(value, f) + #[inline] + fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> { + LowerHex::fmt(&self.get(), f) } } + impl Octal for $name { - fn fmt(&self, f: &mut Formatter) -> Result<(), lib::core::fmt::Error> { - let &$name(ref value) = self; - <$type as Octal>::fmt(value, f) + #[inline] + fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> { + Octal::fmt(&self.get(), f) } } + impl Binary for $name { - fn fmt(&self, f: &mut Formatter) -> Result<(), lib::core::fmt::Error> { - let &$name(ref value) = self; - <$type as Binary>::fmt(value, f) + #[inline] + fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> { + Binary::fmt(&self.get(), f) } } @@ -221,8 +327,15 @@ macro_rules! implement_common { { type Output = $name; + #[inline] + #[allow(unused_comparisons)] fn shr(self, rhs: T) -> $name { - $name(self.mask().0.shr(rhs)) + let value = self.get(); + if value >= 0 { + $name::mask_pos(value.shr(rhs)) + } else { + $name::mask_neg(value.shr(rhs)) + } } } @@ -232,569 +345,598 @@ macro_rules! implement_common { { type Output = $name; + #[inline] fn shl(self, rhs: T) -> $name { - $name(self.mask().0.shl(rhs)) + $name::mask(self.get().shl(rhs)) } } impl ShrAssign for $name where - $type: ShrAssign, + $type: Shr, { + #[inline] fn shr_assign(&mut self, rhs: T) { - *self = self.mask(); - self.0.shr_assign(rhs); + *self = self.shr(rhs); } } impl ShlAssign for $name where - $type: ShlAssign, + $type: Shl, { + #[inline] fn shl_assign(&mut self, rhs: T) { - *self = self.mask(); - self.0.shl_assign(rhs); + *self = self.shl(rhs); } } impl BitOr<$name> for $name { type Output = $name; + #[inline] fn bitor(self, rhs: $name) -> Self::Output { - $name(self.mask().0.bitor(rhs.mask().0)) + $name::mask(self.get().bitor(rhs.get())) } } impl<'a> BitOr<&'a $name> for $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitor(self, rhs: &'a $name) -> Self::Output { - $name(self.mask().0.bitor(rhs.mask().0)) + $name::mask(self.get().bitor(rhs.get())) } } impl<'a> BitOr<$name> for &'a $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitor(self, rhs: $name) -> Self::Output { - $name(self.mask().0.bitor(rhs.mask().0)) + $name::mask(self.get().bitor(rhs.get())) } } impl<'a> BitOr<&'a $name> for &'a $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitor(self, rhs: &'a $name) -> Self::Output { - $name(self.mask().0.bitor(rhs.mask().0)) + $name::mask(self.get().bitor(rhs.get())) } } impl BitOrAssign<$name> for $name { + #[inline] fn bitor_assign(&mut self, other: $name) { - *self = self.mask(); - self.0.bitor_assign(other.mask().0) + *self = self.bitor(other); } } impl BitXor<$name> for $name { type Output = $name; + #[inline] fn bitxor(self, rhs: $name) -> Self::Output { - $name(self.mask().0.bitxor(rhs.mask().0)) + $name::mask(self.get().bitxor(rhs.get())) } } impl<'a> BitXor<&'a $name> for $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitxor(self, rhs: &'a $name) -> Self::Output { - $name(self.mask().0.bitxor(rhs.mask().0)) + $name::mask(self.get().bitxor(rhs.get())) } } impl<'a> BitXor<$name> for &'a $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitxor(self, rhs: $name) -> Self::Output { - $name(self.mask().0.bitxor(rhs.mask().0)) + $name::mask(self.get().bitxor(rhs.get())) } } impl<'a> BitXor<&'a $name> for &'a $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitxor(self, rhs: &'a $name) -> Self::Output { - $name(self.mask().0.bitxor(rhs.mask().0)) + $name::mask(self.get().bitxor(rhs.get())) } } impl BitXorAssign<$name> for $name { + #[inline] fn bitxor_assign(&mut self, other: $name) { - *self = self.mask(); - self.0.bitxor_assign(other.mask().0) + *self = self.bitxor(other); } } impl Not for $name { type Output = $name; + #[inline] fn not(self) -> $name { - $name(self.mask().0.not()) + $name::mask(self.get().not()) } } impl<'a> Not for &'a $name { type Output = <$name as Not>::Output; + #[inline] fn not(self) -> $name { - $name(self.mask().0.not()) + $name::mask(self.get().not()) } } impl BitAnd<$name> for $name { type Output = $name; + #[inline] fn bitand(self, rhs: $name) -> Self::Output { - $name(self.mask().0.bitand(rhs.mask().0)) + $name::mask(self.get().bitand(rhs.get())) } } impl<'a> BitAnd<&'a $name> for $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitand(self, rhs: &'a $name) -> Self::Output { - $name(self.mask().0.bitand(rhs.mask().0)) + $name::mask(self.get().bitand(rhs.get())) } } impl<'a> BitAnd<$name> for &'a $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitand(self, rhs: $name) -> Self::Output { - $name(self.mask().0.bitand(rhs.mask().0)) + $name::mask(self.get().bitand(rhs.get())) } } impl<'a> BitAnd<&'a $name> for &'a $name { type Output = <$name as BitOr<$name>>::Output; + #[inline] fn bitand(self, rhs: &'a $name) -> Self::Output { - $name(self.mask().0.bitand(rhs.mask().0)) + $name::mask(self.get().bitand(rhs.get())) } } impl BitAndAssign<$name> for $name { + #[inline] fn bitand_assign(&mut self, other: $name) { - *self = self.mask(); - self.0.bitand_assign(other.mask().0) + *self = self.bitand(other); } } - impl lib::core::ops::Add<$name> for $name { + impl Add<$name> for $name { type Output = $name; + #[allow(unused_comparisons)] + #[inline] fn add(self, other: $name) -> $name { - if self.0 > 0 && other.0 > 0 { - debug_assert!(Self::MAX.0 - other.0 >= self.0); - } else if self.0 < 0 && other.0 < 0 { - debug_assert!(Self::MIN.0 - other.0 <= self.0); + if self.get() > 0 && other.get() > 0 { + debug_assert!($name::MAX.get() - other.get() >= self.get()); + } else if self.get() < 0 && other.get() < 0 { + debug_assert!($name::MIN.get() - other.get() <= self.get()); } self.wrapping_add(other) } } - impl lib::core::ops::Sub<$name> for $name { + impl Sub<$name> for $name { type Output = $name; + #[allow(unused_comparisons)] + #[inline] fn sub(self, other: $name) -> $name { if self > other { - debug_assert!(Self::MAX.0 + other.0 >= self.0); + debug_assert!($name::MAX.get() + other.get() >= self.get()); } else if self < other { - debug_assert!(Self::MIN.0 + other.0 <= self.0); + debug_assert!($name::MIN.get() + other.get() <= self.get()); } self.wrapping_sub(other) } } + )* }; +} + +#[cfg(not(test))] +macro_rules! implement_layout_test { + ($($_:tt)*) => {}; +} + +#[cfg(test)] +macro_rules! implement_layout_test { + ($test_name:ident $($name:ident $type:ident)*) => { + #[test] + fn $test_name() { + $( + assert_eq!( + core::mem::size_of::<$name>(), + core::mem::size_of::<$type>(), + "size_of::<{}>() == size_of::<{}>()", + stringify!($name), + stringify!($type), + ); + assert_eq!( + core::mem::align_of::<$name>(), + core::mem::align_of::<$type>(), + "align_of::<{}>() == align_of::<{}>()", + stringify!($name), + stringify!($type), + ); + assert_eq!( + core::mem::size_of::<$name>(), + core::mem::size_of::>(), + "size_of::<{}>() == size_of::>()", + stringify!($name), + stringify!($name), + ); + assert_eq!( + core::mem::align_of::<$name>(), + core::mem::align_of::>(), + "align_of::<{}>() == align_of::>()", + stringify!($name), + stringify!($name), + ); + )* + } }; } -define_unsigned!(#[doc="The 1-bit unsigned integer type."], u1, 1, u8); -define_unsigned!(#[doc="The 2-bit unsigned integer type."], u2, 2, u8); -define_unsigned!(#[doc="The 3-bit unsigned integer type."], u3, 3, u8); -define_unsigned!(#[doc="The 4-bit unsigned integer type."], u4, 4, u8); -define_unsigned!(#[doc="The 5-bit unsigned integer type."], u5, 5, u8); -define_unsigned!(#[doc="The 6-bit unsigned integer type."], u6, 6, u8); -define_unsigned!(#[doc="The 7-bit unsigned integer type."], u7, 7, u8); - -define_unsigned!(#[doc="The 9-bit unsigned integer type."], u9, 9, u16); -define_unsigned!(#[doc="The 10-bit unsigned integer type."], u10, 10, u16); -define_unsigned!(#[doc="The 11-bit unsigned integer type."], u11, 11, u16); -define_unsigned!(#[doc="The 12-bit unsigned integer type."], u12, 12, u16); -define_unsigned!(#[doc="The 13-bit unsigned integer type."], u13, 13, u16); -define_unsigned!(#[doc="The 14-bit unsigned integer type."], u14, 14, u16); -define_unsigned!(#[doc="The 15-bit unsigned integer type."], u15, 15, u16); - -define_unsigned!(#[doc="The 17-bit unsigned integer type."], u17, 17, u32); -define_unsigned!(#[doc="The 18-bit unsigned integer type."], u18, 18, u32); -define_unsigned!(#[doc="The 19-bit unsigned integer type."], u19, 19, u32); -define_unsigned!(#[doc="The 20-bit unsigned integer type."], u20, 20, u32); -define_unsigned!(#[doc="The 21-bit unsigned integer type."], u21, 21, u32); -define_unsigned!(#[doc="The 22-bit unsigned integer type."], u22, 22, u32); -define_unsigned!(#[doc="The 23-bit unsigned integer type."], u23, 23, u32); -define_unsigned!(#[doc="The 24-bit unsigned integer type."], u24, 24, u32); - -define_unsigned!(#[doc="The 25-bit unsigned integer type."], u25, 25, u32); -define_unsigned!(#[doc="The 26-bit unsigned integer type."], u26, 26, u32); -define_unsigned!(#[doc="The 27-bit unsigned integer type."], u27, 27, u32); -define_unsigned!(#[doc="The 28-bit unsigned integer type."], u28, 28, u32); -define_unsigned!(#[doc="The 29-bit unsigned integer type."], u29, 29, u32); -define_unsigned!(#[doc="The 30-bit unsigned integer type."], u30, 30, u32); -define_unsigned!(#[doc="The 31-bit unsigned integer type."], u31, 31, u32); - -define_unsigned!(#[doc="The 33-bit unsigned integer type."], u33, 33, u64); -define_unsigned!(#[doc="The 34-bit unsigned integer type."], u34, 34, u64); -define_unsigned!(#[doc="The 35-bit unsigned integer type."], u35, 35, u64); -define_unsigned!(#[doc="The 36-bit unsigned integer type."], u36, 36, u64); -define_unsigned!(#[doc="The 37-bit unsigned integer type."], u37, 37, u64); -define_unsigned!(#[doc="The 38-bit unsigned integer type."], u38, 38, u64); -define_unsigned!(#[doc="The 39-bit unsigned integer type."], u39, 39, u64); -define_unsigned!(#[doc="The 40-bit unsigned integer type."], u40, 40, u64); - -define_unsigned!(#[doc="The 41-bit unsigned integer type."], u41, 41, u64); -define_unsigned!(#[doc="The 42-bit unsigned integer type."], u42, 42, u64); -define_unsigned!(#[doc="The 43-bit unsigned integer type."], u43, 43, u64); -define_unsigned!(#[doc="The 44-bit unsigned integer type."], u44, 44, u64); -define_unsigned!(#[doc="The 45-bit unsigned integer type."], u45, 45, u64); -define_unsigned!(#[doc="The 46-bit unsigned integer type."], u46, 46, u64); -define_unsigned!(#[doc="The 47-bit unsigned integer type."], u47, 47, u64); -define_unsigned!(#[doc="The 48-bit unsigned integer type."], u48, 48, u64); - -define_unsigned!(#[doc="The 49-bit unsigned integer type."], u49, 49, u64); -define_unsigned!(#[doc="The 50-bit unsigned integer type."], u50, 50, u64); -define_unsigned!(#[doc="The 51-bit unsigned integer type."], u51, 51, u64); -define_unsigned!(#[doc="The 52-bit unsigned integer type."], u52, 52, u64); -define_unsigned!(#[doc="The 53-bit unsigned integer type."], u53, 53, u64); -define_unsigned!(#[doc="The 54-bit unsigned integer type."], u54, 54, u64); -define_unsigned!(#[doc="The 55-bit unsigned integer type."], u55, 55, u64); -define_unsigned!(#[doc="The 56-bit unsigned integer type."], u56, 56, u64); - -define_unsigned!(#[doc="The 57-bit unsigned integer type."], u57, 57, u64); -define_unsigned!(#[doc="The 58-bit unsigned integer type."], u58, 58, u64); -define_unsigned!(#[doc="The 59-bit unsigned integer type."], u59, 59, u64); -define_unsigned!(#[doc="The 60-bit unsigned integer type."], u60, 60, u64); -define_unsigned!(#[doc="The 61-bit unsigned integer type."], u61, 61, u64); -define_unsigned!(#[doc="The 62-bit unsigned integer type."], u62, 62, u64); -define_unsigned!(#[doc="The 63-bit unsigned integer type."], u63, 63, u64); - -define_unsigned!(#[doc="The 65-bit unsigned integer type."], u65, 65, u128); -define_unsigned!(#[doc="The 66-bit unsigned integer type."], u66, 66, u128); -define_unsigned!(#[doc="The 67-bit unsigned integer type."], u67, 67, u128); -define_unsigned!(#[doc="The 68-bit unsigned integer type."], u68, 68, u128); -define_unsigned!(#[doc="The 69-bit unsigned integer type."], u69, 69, u128); -define_unsigned!(#[doc="The 70-bit unsigned integer type."], u70, 70, u128); -define_unsigned!(#[doc="The 71-bit unsigned integer type."], u71, 71, u128); -define_unsigned!(#[doc="The 72-bit unsigned integer type."], u72, 72, u128); - -define_unsigned!(#[doc="The 73-bit unsigned integer type."], u73, 73, u128); -define_unsigned!(#[doc="The 74-bit unsigned integer type."], u74, 74, u128); -define_unsigned!(#[doc="The 75-bit unsigned integer type."], u75, 75, u128); -define_unsigned!(#[doc="The 76-bit unsigned integer type."], u76, 76, u128); -define_unsigned!(#[doc="The 77-bit unsigned integer type."], u77, 77, u128); -define_unsigned!(#[doc="The 78-bit unsigned integer type."], u78, 78, u128); -define_unsigned!(#[doc="The 79-bit unsigned integer type."], u79, 79, u128); -define_unsigned!(#[doc="The 80-bit unsigned integer type."], u80, 80, u128); - -define_unsigned!(#[doc="The 81-bit unsigned integer type."], u81, 81, u128); -define_unsigned!(#[doc="The 82-bit unsigned integer type."], u82, 82, u128); -define_unsigned!(#[doc="The 83-bit unsigned integer type."], u83, 83, u128); -define_unsigned!(#[doc="The 84-bit unsigned integer type."], u84, 84, u128); -define_unsigned!(#[doc="The 85-bit unsigned integer type."], u85, 85, u128); -define_unsigned!(#[doc="The 86-bit unsigned integer type."], u86, 86, u128); -define_unsigned!(#[doc="The 87-bit unsigned integer type."], u87, 87, u128); -define_unsigned!(#[doc="The 88-bit unsigned integer type."], u88, 88, u128); - -define_unsigned!(#[doc="The 89-bit unsigned integer type."], u89, 89, u128); -define_unsigned!(#[doc="The 90-bit unsigned integer type."], u90, 90, u128); -define_unsigned!(#[doc="The 91-bit unsigned integer type."], u91, 91, u128); -define_unsigned!(#[doc="The 92-bit unsigned integer type."], u92, 92, u128); -define_unsigned!(#[doc="The 93-bit unsigned integer type."], u93, 93, u128); -define_unsigned!(#[doc="The 94-bit unsigned integer type."], u94, 94, u128); -define_unsigned!(#[doc="The 95-bit unsigned integer type."], u95, 95, u128); -define_unsigned!(#[doc="The 96-bit unsigned integer type."], u96, 96, u128); - -define_unsigned!(#[doc="The 97-bit unsigned integer type."], u97, 97, u128); -define_unsigned!(#[doc="The 98-bit unsigned integer type."], u98, 98, u128); -define_unsigned!(#[doc="The 99-bit unsigned integer type."], u99, 99, u128); -define_unsigned!(#[doc="The 100-bit unsigned integer type."], u100, 100, u128); -define_unsigned!(#[doc="The 101-bit unsigned integer type."], u101, 101, u128); -define_unsigned!(#[doc="The 102-bit unsigned integer type."], u102, 102, u128); -define_unsigned!(#[doc="The 103-bit unsigned integer type."], u103, 103, u128); -define_unsigned!(#[doc="The 104-bit unsigned integer type."], u104, 104, u128); - -define_unsigned!(#[doc="The 105-bit unsigned integer type."], u105, 105, u128); -define_unsigned!(#[doc="The 106-bit unsigned integer type."], u106, 106, u128); -define_unsigned!(#[doc="The 107-bit unsigned integer type."], u107, 107, u128); -define_unsigned!(#[doc="The 108-bit unsigned integer type."], u108, 108, u128); -define_unsigned!(#[doc="The 109-bit unsigned integer type."], u109, 109, u128); -define_unsigned!(#[doc="The 110-bit unsigned integer type."], u110, 110, u128); -define_unsigned!(#[doc="The 111-bit unsigned integer type."], u111, 111, u128); -define_unsigned!(#[doc="The 112-bit unsigned integer type."], u112, 112, u128); - -define_unsigned!(#[doc="The 113-bit unsigned integer type."], u113, 113, u128); -define_unsigned!(#[doc="The 114-bit unsigned integer type."], u114, 114, u128); -define_unsigned!(#[doc="The 115-bit unsigned integer type."], u115, 115, u128); -define_unsigned!(#[doc="The 116-bit unsigned integer type."], u116, 116, u128); -define_unsigned!(#[doc="The 117-bit unsigned integer type."], u117, 117, u128); -define_unsigned!(#[doc="The 118-bit unsigned integer type."], u118, 118, u128); -define_unsigned!(#[doc="The 119-bit unsigned integer type."], u119, 119, u128); -define_unsigned!(#[doc="The 120-bit unsigned integer type."], u120, 120, u128); - -define_unsigned!(#[doc="The 121-bit unsigned integer type."], u121, 121, u128); -define_unsigned!(#[doc="The 122-bit unsigned integer type."], u122, 122, u128); -define_unsigned!(#[doc="The 123-bit unsigned integer type."], u123, 123, u128); -define_unsigned!(#[doc="The 124-bit unsigned integer type."], u124, 124, u128); -define_unsigned!(#[doc="The 125-bit unsigned integer type."], u125, 125, u128); -define_unsigned!(#[doc="The 126-bit unsigned integer type."], u126, 126, u128); -define_unsigned!(#[doc="The 127-bit unsigned integer type."], u127, 127, u128); - -define_signed!(#[doc="The 1-bit signed integer type."], i1, 1, i8); -define_signed!(#[doc="The 2-bit signed integer type."], i2, 2, i8); -define_signed!(#[doc="The 3-bit signed integer type."], i3, 3, i8); -define_signed!(#[doc="The 4-bit signed integer type."], i4, 4, i8); -define_signed!(#[doc="The 5-bit signed integer type."], i5, 5, i8); -define_signed!(#[doc="The 6-bit signed integer type."], i6, 6, i8); -define_signed!(#[doc="The 7-bit signed integer type."], i7, 7, i8); - -define_signed!(#[doc="The 9-bit signed integer type."], i9, 9, i16); -define_signed!(#[doc="The 10-bit signed integer type."], i10, 10, i16); -define_signed!(#[doc="The 11-bit signed integer type."], i11, 11, i16); -define_signed!(#[doc="The 12-bit signed integer type."], i12, 12, i16); -define_signed!(#[doc="The 13-bit signed integer type."], i13, 13, i16); -define_signed!(#[doc="The 14-bit signed integer type."], i14, 14, i16); -define_signed!(#[doc="The 15-bit signed integer type."], i15, 15, i16); - -define_signed!(#[doc="The 17-bit signed integer type."], i17, 17, i32); -define_signed!(#[doc="The 18-bit signed integer type."], i18, 18, i32); -define_signed!(#[doc="The 19-bit signed integer type."], i19, 19, i32); -define_signed!(#[doc="The 20-bit signed integer type."], i20, 20, i32); -define_signed!(#[doc="The 21-bit signed integer type."], i21, 21, i32); -define_signed!(#[doc="The 22-bit signed integer type."], i22, 22, i32); -define_signed!(#[doc="The 23-bit signed integer type."], i23, 23, i32); -define_signed!(#[doc="The 24-bit signed integer type."], i24, 24, i32); - -define_signed!(#[doc="The 25-bit signed integer type."], i25, 25, i32); -define_signed!(#[doc="The 26-bit signed integer type."], i26, 26, i32); -define_signed!(#[doc="The 27-bit signed integer type."], i27, 27, i32); -define_signed!(#[doc="The 28-bit signed integer type."], i28, 28, i32); -define_signed!(#[doc="The 29-bit signed integer type."], i29, 29, i32); -define_signed!(#[doc="The 30-bit signed integer type."], i30, 30, i32); -define_signed!(#[doc="The 31-bit signed integer type."], i31, 31, i32); - -define_signed!(#[doc="The 33-bit signed integer type."], i33, 33, i64); -define_signed!(#[doc="The 34-bit signed integer type."], i34, 34, i64); -define_signed!(#[doc="The 35-bit signed integer type."], i35, 35, i64); -define_signed!(#[doc="The 36-bit signed integer type."], i36, 36, i64); -define_signed!(#[doc="The 37-bit signed integer type."], i37, 37, i64); -define_signed!(#[doc="The 38-bit signed integer type."], i38, 38, i64); -define_signed!(#[doc="The 39-bit signed integer type."], i39, 39, i64); -define_signed!(#[doc="The 40-bit signed integer type."], i40, 40, i64); - -define_signed!(#[doc="The 41-bit signed integer type."], i41, 41, i64); -define_signed!(#[doc="The 42-bit signed integer type."], i42, 42, i64); -define_signed!(#[doc="The 43-bit signed integer type."], i43, 43, i64); -define_signed!(#[doc="The 44-bit signed integer type."], i44, 44, i64); -define_signed!(#[doc="The 45-bit signed integer type."], i45, 45, i64); -define_signed!(#[doc="The 46-bit signed integer type."], i46, 46, i64); -define_signed!(#[doc="The 47-bit signed integer type."], i47, 47, i64); -define_signed!(#[doc="The 48-bit signed integer type."], i48, 48, i64); - -define_signed!(#[doc="The 49-bit signed integer type."], i49, 49, i64); -define_signed!(#[doc="The 50-bit signed integer type."], i50, 50, i64); -define_signed!(#[doc="The 51-bit signed integer type."], i51, 51, i64); -define_signed!(#[doc="The 52-bit signed integer type."], i52, 52, i64); -define_signed!(#[doc="The 53-bit signed integer type."], i53, 53, i64); -define_signed!(#[doc="The 54-bit signed integer type."], i54, 54, i64); -define_signed!(#[doc="The 55-bit signed integer type."], i55, 55, i64); -define_signed!(#[doc="The 56-bit signed integer type."], i56, 56, i64); - -define_signed!(#[doc="The 57-bit signed integer type."], i57, 57, i64); -define_signed!(#[doc="The 58-bit signed integer type."], i58, 58, i64); -define_signed!(#[doc="The 59-bit signed integer type."], i59, 59, i64); -define_signed!(#[doc="The 60-bit signed integer type."], i60, 60, i64); -define_signed!(#[doc="The 61-bit signed integer type."], i61, 61, i64); -define_signed!(#[doc="The 62-bit signed integer type."], i62, 62, i64); -define_signed!(#[doc="The 63-bit signed integer type."], i63, 63, i64); - -define_signed!(#[doc="The 65-bit signed integer type."], i65, 65, i128); -define_signed!(#[doc="The 66-bit signed integer type."], i66, 66, i128); -define_signed!(#[doc="The 67-bit signed integer type."], i67, 67, i128); -define_signed!(#[doc="The 68-bit signed integer type."], i68, 68, i128); -define_signed!(#[doc="The 69-bit signed integer type."], i69, 69, i128); -define_signed!(#[doc="The 70-bit signed integer type."], i70, 70, i128); -define_signed!(#[doc="The 71-bit signed integer type."], i71, 71, i128); -define_signed!(#[doc="The 72-bit signed integer type."], i72, 72, i128); - -define_signed!(#[doc="The 73-bit signed integer type."], i73, 73, i128); -define_signed!(#[doc="The 74-bit signed integer type."], i74, 74, i128); -define_signed!(#[doc="The 75-bit signed integer type."], i75, 75, i128); -define_signed!(#[doc="The 76-bit signed integer type."], i76, 76, i128); -define_signed!(#[doc="The 77-bit signed integer type."], i77, 77, i128); -define_signed!(#[doc="The 78-bit signed integer type."], i78, 78, i128); -define_signed!(#[doc="The 79-bit signed integer type."], i79, 79, i128); -define_signed!(#[doc="The 80-bit signed integer type."], i80, 80, i128); - -define_signed!(#[doc="The 81-bit signed integer type."], i81, 81, i128); -define_signed!(#[doc="The 82-bit signed integer type."], i82, 82, i128); -define_signed!(#[doc="The 83-bit signed integer type."], i83, 83, i128); -define_signed!(#[doc="The 84-bit signed integer type."], i84, 84, i128); -define_signed!(#[doc="The 85-bit signed integer type."], i85, 85, i128); -define_signed!(#[doc="The 86-bit signed integer type."], i86, 86, i128); -define_signed!(#[doc="The 87-bit signed integer type."], i87, 87, i128); -define_signed!(#[doc="The 88-bit signed integer type."], i88, 88, i128); - -define_signed!(#[doc="The 89-bit signed integer type."], i89, 89, i128); -define_signed!(#[doc="The 90-bit signed integer type."], i90, 90, i128); -define_signed!(#[doc="The 91-bit signed integer type."], i91, 91, i128); -define_signed!(#[doc="The 92-bit signed integer type."], i92, 92, i128); -define_signed!(#[doc="The 93-bit signed integer type."], i93, 93, i128); -define_signed!(#[doc="The 94-bit signed integer type."], i94, 94, i128); -define_signed!(#[doc="The 95-bit signed integer type."], i95, 95, i128); -define_signed!(#[doc="The 96-bit signed integer type."], i96, 96, i128); - -define_signed!(#[doc="The 97-bit signed integer type."], i97, 97, i128); -define_signed!(#[doc="The 98-bit signed integer type."], i98, 98, i128); -define_signed!(#[doc="The 99-bit signed integer type."], i99, 99, i128); -define_signed!(#[doc="The 100-bit signed integer type."], i100, 100, i128); -define_signed!(#[doc="The 101-bit signed integer type."], i101, 101, i128); -define_signed!(#[doc="The 102-bit signed integer type."], i102, 102, i128); -define_signed!(#[doc="The 103-bit signed integer type."], i103, 103, i128); -define_signed!(#[doc="The 104-bit signed integer type."], i104, 104, i128); - -define_signed!(#[doc="The 105-bit signed integer type."], i105, 105, i128); -define_signed!(#[doc="The 106-bit signed integer type."], i106, 106, i128); -define_signed!(#[doc="The 107-bit signed integer type."], i107, 107, i128); -define_signed!(#[doc="The 108-bit signed integer type."], i108, 108, i128); -define_signed!(#[doc="The 109-bit signed integer type."], i109, 109, i128); -define_signed!(#[doc="The 110-bit signed integer type."], i110, 110, i128); -define_signed!(#[doc="The 111-bit signed integer type."], i111, 111, i128); -define_signed!(#[doc="The 112-bit signed integer type."], i112, 112, i128); - -define_signed!(#[doc="The 113-bit signed integer type."], i113, 113, i128); -define_signed!(#[doc="The 114-bit signed integer type."], i114, 114, i128); -define_signed!(#[doc="The 115-bit signed integer type."], i115, 115, i128); -define_signed!(#[doc="The 116-bit signed integer type."], i116, 116, i128); -define_signed!(#[doc="The 117-bit signed integer type."], i117, 117, i128); -define_signed!(#[doc="The 118-bit signed integer type."], i118, 118, i128); -define_signed!(#[doc="The 119-bit signed integer type."], i119, 119, i128); -define_signed!(#[doc="The 120-bit signed integer type."], i120, 120, i128); - -define_signed!(#[doc="The 121-bit signed integer type."], i121, 121, i128); -define_signed!(#[doc="The 122-bit signed integer type."], i122, 122, i128); -define_signed!(#[doc="The 123-bit signed integer type."], i123, 123, i128); -define_signed!(#[doc="The 124-bit signed integer type."], i124, 124, i128); -define_signed!(#[doc="The 125-bit signed integer type."], i125, 125, i128); -define_signed!(#[doc="The 126-bit signed integer type."], i126, 126, i128); -define_signed!(#[doc="The 127-bit signed integer type."], i127, 127, i128); +define_unsigned! { + ("The 1-bit unsigned integer type." u1 1 u8) + ("The 2-bit unsigned integer type." u2 2 u8) + ("The 3-bit unsigned integer type." u3 3 u8) + ("The 4-bit unsigned integer type." u4 4 u8) + ("The 5-bit unsigned integer type." u5 5 u8) + ("The 6-bit unsigned integer type." u6 6 u8) + ("The 7-bit unsigned integer type." u7 7 u8) + ("The 9-bit unsigned integer type." u9 9 u16) + ("The 10-bit unsigned integer type." u10 10 u16) + ("The 11-bit unsigned integer type." u11 11 u16) + ("The 12-bit unsigned integer type." u12 12 u16) + ("The 13-bit unsigned integer type." u13 13 u16) + ("The 14-bit unsigned integer type." u14 14 u16) + ("The 15-bit unsigned integer type." u15 15 u16) + ("The 17-bit unsigned integer type." u17 17 u32) + ("The 18-bit unsigned integer type." u18 18 u32) + ("The 19-bit unsigned integer type." u19 19 u32) + ("The 20-bit unsigned integer type." u20 20 u32) + ("The 21-bit unsigned integer type." u21 21 u32) + ("The 22-bit unsigned integer type." u22 22 u32) + ("The 23-bit unsigned integer type." u23 23 u32) + ("The 24-bit unsigned integer type." u24 24 u32) + ("The 25-bit unsigned integer type." u25 25 u32) + ("The 26-bit unsigned integer type." u26 26 u32) + ("The 27-bit unsigned integer type." u27 27 u32) + ("The 28-bit unsigned integer type." u28 28 u32) + ("The 29-bit unsigned integer type." u29 29 u32) + ("The 30-bit unsigned integer type." u30 30 u32) + ("The 31-bit unsigned integer type." u31 31 u32) + ("The 33-bit unsigned integer type." u33 33 u64) + ("The 34-bit unsigned integer type." u34 34 u64) + ("The 35-bit unsigned integer type." u35 35 u64) + ("The 36-bit unsigned integer type." u36 36 u64) + ("The 37-bit unsigned integer type." u37 37 u64) + ("The 38-bit unsigned integer type." u38 38 u64) + ("The 39-bit unsigned integer type." u39 39 u64) + ("The 40-bit unsigned integer type." u40 40 u64) + ("The 41-bit unsigned integer type." u41 41 u64) + ("The 42-bit unsigned integer type." u42 42 u64) + ("The 43-bit unsigned integer type." u43 43 u64) + ("The 44-bit unsigned integer type." u44 44 u64) + ("The 45-bit unsigned integer type." u45 45 u64) + ("The 46-bit unsigned integer type." u46 46 u64) + ("The 47-bit unsigned integer type." u47 47 u64) + ("The 48-bit unsigned integer type." u48 48 u64) + ("The 49-bit unsigned integer type." u49 49 u64) + ("The 50-bit unsigned integer type." u50 50 u64) + ("The 51-bit unsigned integer type." u51 51 u64) + ("The 52-bit unsigned integer type." u52 52 u64) + ("The 53-bit unsigned integer type." u53 53 u64) + ("The 54-bit unsigned integer type." u54 54 u64) + ("The 55-bit unsigned integer type." u55 55 u64) + ("The 56-bit unsigned integer type." u56 56 u64) + ("The 57-bit unsigned integer type." u57 57 u64) + ("The 58-bit unsigned integer type." u58 58 u64) + ("The 59-bit unsigned integer type." u59 59 u64) + ("The 60-bit unsigned integer type." u60 60 u64) + ("The 61-bit unsigned integer type." u61 61 u64) + ("The 62-bit unsigned integer type." u62 62 u64) + ("The 63-bit unsigned integer type." u63 63 u64) + ("The 65-bit unsigned integer type." u65 65 u128) + ("The 66-bit unsigned integer type." u66 66 u128) + ("The 67-bit unsigned integer type." u67 67 u128) + ("The 68-bit unsigned integer type." u68 68 u128) + ("The 69-bit unsigned integer type." u69 69 u128) + ("The 70-bit unsigned integer type." u70 70 u128) + ("The 71-bit unsigned integer type." u71 71 u128) + ("The 72-bit unsigned integer type." u72 72 u128) + ("The 73-bit unsigned integer type." u73 73 u128) + ("The 74-bit unsigned integer type." u74 74 u128) + ("The 75-bit unsigned integer type." u75 75 u128) + ("The 76-bit unsigned integer type." u76 76 u128) + ("The 77-bit unsigned integer type." u77 77 u128) + ("The 78-bit unsigned integer type." u78 78 u128) + ("The 79-bit unsigned integer type." u79 79 u128) + ("The 80-bit unsigned integer type." u80 80 u128) + ("The 81-bit unsigned integer type." u81 81 u128) + ("The 82-bit unsigned integer type." u82 82 u128) + ("The 83-bit unsigned integer type." u83 83 u128) + ("The 84-bit unsigned integer type." u84 84 u128) + ("The 85-bit unsigned integer type." u85 85 u128) + ("The 86-bit unsigned integer type." u86 86 u128) + ("The 87-bit unsigned integer type." u87 87 u128) + ("The 88-bit unsigned integer type." u88 88 u128) + ("The 89-bit unsigned integer type." u89 89 u128) + ("The 90-bit unsigned integer type." u90 90 u128) + ("The 91-bit unsigned integer type." u91 91 u128) + ("The 92-bit unsigned integer type." u92 92 u128) + ("The 93-bit unsigned integer type." u93 93 u128) + ("The 94-bit unsigned integer type." u94 94 u128) + ("The 95-bit unsigned integer type." u95 95 u128) + ("The 96-bit unsigned integer type." u96 96 u128) + ("The 97-bit unsigned integer type." u97 97 u128) + ("The 98-bit unsigned integer type." u98 98 u128) + ("The 99-bit unsigned integer type." u99 99 u128) + ("The 100-bit unsigned integer type." u100 100 u128) + ("The 101-bit unsigned integer type." u101 101 u128) + ("The 102-bit unsigned integer type." u102 102 u128) + ("The 103-bit unsigned integer type." u103 103 u128) + ("The 104-bit unsigned integer type." u104 104 u128) + ("The 105-bit unsigned integer type." u105 105 u128) + ("The 106-bit unsigned integer type." u106 106 u128) + ("The 107-bit unsigned integer type." u107 107 u128) + ("The 108-bit unsigned integer type." u108 108 u128) + ("The 109-bit unsigned integer type." u109 109 u128) + ("The 110-bit unsigned integer type." u110 110 u128) + ("The 111-bit unsigned integer type." u111 111 u128) + ("The 112-bit unsigned integer type." u112 112 u128) + ("The 113-bit unsigned integer type." u113 113 u128) + ("The 114-bit unsigned integer type." u114 114 u128) + ("The 115-bit unsigned integer type." u115 115 u128) + ("The 116-bit unsigned integer type." u116 116 u128) + ("The 117-bit unsigned integer type." u117 117 u128) + ("The 118-bit unsigned integer type." u118 118 u128) + ("The 119-bit unsigned integer type." u119 119 u128) + ("The 120-bit unsigned integer type." u120 120 u128) + ("The 121-bit unsigned integer type." u121 121 u128) + ("The 122-bit unsigned integer type." u122 122 u128) + ("The 123-bit unsigned integer type." u123 123 u128) + ("The 124-bit unsigned integer type." u124 124 u128) + ("The 125-bit unsigned integer type." u125 125 u128) + ("The 126-bit unsigned integer type." u126 126 u128) + ("The 127-bit unsigned integer type." u127 127 u128) +} + +define_signed! { + ("The 1-bit signed integer type." i1 1 i8) + ("The 2-bit signed integer type." i2 2 i8) + ("The 3-bit signed integer type." i3 3 i8) + ("The 4-bit signed integer type." i4 4 i8) + ("The 5-bit signed integer type." i5 5 i8) + ("The 6-bit signed integer type." i6 6 i8) + ("The 7-bit signed integer type." i7 7 i8) + ("The 9-bit signed integer type." i9 9 i16) + ("The 10-bit signed integer type." i10 10 i16) + ("The 11-bit signed integer type." i11 11 i16) + ("The 12-bit signed integer type." i12 12 i16) + ("The 13-bit signed integer type." i13 13 i16) + ("The 14-bit signed integer type." i14 14 i16) + ("The 15-bit signed integer type." i15 15 i16) + ("The 17-bit signed integer type." i17 17 i32) + ("The 18-bit signed integer type." i18 18 i32) + ("The 19-bit signed integer type." i19 19 i32) + ("The 20-bit signed integer type." i20 20 i32) + ("The 21-bit signed integer type." i21 21 i32) + ("The 22-bit signed integer type." i22 22 i32) + ("The 23-bit signed integer type." i23 23 i32) + ("The 24-bit signed integer type." i24 24 i32) + ("The 25-bit signed integer type." i25 25 i32) + ("The 26-bit signed integer type." i26 26 i32) + ("The 27-bit signed integer type." i27 27 i32) + ("The 28-bit signed integer type." i28 28 i32) + ("The 29-bit signed integer type." i29 29 i32) + ("The 30-bit signed integer type." i30 30 i32) + ("The 31-bit signed integer type." i31 31 i32) + ("The 33-bit signed integer type." i33 33 i64) + ("The 34-bit signed integer type." i34 34 i64) + ("The 35-bit signed integer type." i35 35 i64) + ("The 36-bit signed integer type." i36 36 i64) + ("The 37-bit signed integer type." i37 37 i64) + ("The 38-bit signed integer type." i38 38 i64) + ("The 39-bit signed integer type." i39 39 i64) + ("The 40-bit signed integer type." i40 40 i64) + ("The 41-bit signed integer type." i41 41 i64) + ("The 42-bit signed integer type." i42 42 i64) + ("The 43-bit signed integer type." i43 43 i64) + ("The 44-bit signed integer type." i44 44 i64) + ("The 45-bit signed integer type." i45 45 i64) + ("The 46-bit signed integer type." i46 46 i64) + ("The 47-bit signed integer type." i47 47 i64) + ("The 48-bit signed integer type." i48 48 i64) + ("The 49-bit signed integer type." i49 49 i64) + ("The 50-bit signed integer type." i50 50 i64) + ("The 51-bit signed integer type." i51 51 i64) + ("The 52-bit signed integer type." i52 52 i64) + ("The 53-bit signed integer type." i53 53 i64) + ("The 54-bit signed integer type." i54 54 i64) + ("The 55-bit signed integer type." i55 55 i64) + ("The 56-bit signed integer type." i56 56 i64) + ("The 57-bit signed integer type." i57 57 i64) + ("The 58-bit signed integer type." i58 58 i64) + ("The 59-bit signed integer type." i59 59 i64) + ("The 60-bit signed integer type." i60 60 i64) + ("The 61-bit signed integer type." i61 61 i64) + ("The 62-bit signed integer type." i62 62 i64) + ("The 63-bit signed integer type." i63 63 i64) + ("The 65-bit signed integer type." i65 65 i128) + ("The 66-bit signed integer type." i66 66 i128) + ("The 67-bit signed integer type." i67 67 i128) + ("The 68-bit signed integer type." i68 68 i128) + ("The 69-bit signed integer type." i69 69 i128) + ("The 70-bit signed integer type." i70 70 i128) + ("The 71-bit signed integer type." i71 71 i128) + ("The 72-bit signed integer type." i72 72 i128) + ("The 73-bit signed integer type." i73 73 i128) + ("The 74-bit signed integer type." i74 74 i128) + ("The 75-bit signed integer type." i75 75 i128) + ("The 76-bit signed integer type." i76 76 i128) + ("The 77-bit signed integer type." i77 77 i128) + ("The 78-bit signed integer type." i78 78 i128) + ("The 79-bit signed integer type." i79 79 i128) + ("The 80-bit signed integer type." i80 80 i128) + ("The 81-bit signed integer type." i81 81 i128) + ("The 82-bit signed integer type." i82 82 i128) + ("The 83-bit signed integer type." i83 83 i128) + ("The 84-bit signed integer type." i84 84 i128) + ("The 85-bit signed integer type." i85 85 i128) + ("The 86-bit signed integer type." i86 86 i128) + ("The 87-bit signed integer type." i87 87 i128) + ("The 88-bit signed integer type." i88 88 i128) + ("The 89-bit signed integer type." i89 89 i128) + ("The 90-bit signed integer type." i90 90 i128) + ("The 91-bit signed integer type." i91 91 i128) + ("The 92-bit signed integer type." i92 92 i128) + ("The 93-bit signed integer type." i93 93 i128) + ("The 94-bit signed integer type." i94 94 i128) + ("The 95-bit signed integer type." i95 95 i128) + ("The 96-bit signed integer type." i96 96 i128) + ("The 97-bit signed integer type." i97 97 i128) + ("The 98-bit signed integer type." i98 98 i128) + ("The 99-bit signed integer type." i99 99 i128) + ("The 100-bit signed integer type." i100 100 i128) + ("The 101-bit signed integer type." i101 101 i128) + ("The 102-bit signed integer type." i102 102 i128) + ("The 103-bit signed integer type." i103 103 i128) + ("The 104-bit signed integer type." i104 104 i128) + ("The 105-bit signed integer type." i105 105 i128) + ("The 106-bit signed integer type." i106 106 i128) + ("The 107-bit signed integer type." i107 107 i128) + ("The 108-bit signed integer type." i108 108 i128) + ("The 109-bit signed integer type." i109 109 i128) + ("The 110-bit signed integer type." i110 110 i128) + ("The 111-bit signed integer type." i111 111 i128) + ("The 112-bit signed integer type." i112 112 i128) + ("The 113-bit signed integer type." i113 113 i128) + ("The 114-bit signed integer type." i114 114 i128) + ("The 115-bit signed integer type." i115 115 i128) + ("The 116-bit signed integer type." i116 116 i128) + ("The 117-bit signed integer type." i117 117 i128) + ("The 118-bit signed integer type." i118 118 i128) + ("The 119-bit signed integer type." i119 119 i128) + ("The 120-bit signed integer type." i120 120 i128) + ("The 121-bit signed integer type." i121 121 i128) + ("The 122-bit signed integer type." i122 122 i128) + ("The 123-bit signed integer type." i123 123 i128) + ("The 124-bit signed integer type." i124 124 i128) + ("The 125-bit signed integer type." i125 125 i128) + ("The 126-bit signed integer type." i126 126 i128) + ("The 127-bit signed integer type." i127 127 i128) +} #[cfg(test)] mod tests { use super::*; - #[test] - fn test_masking() { - assert_eq!(u4(0b11000110).mask().0, 0b00000110); - assert_eq!(u4(0b00001000).mask().0, 0b00001000); - assert_eq!(u4(0b00001110).mask().0, 0b00001110); - - assert_eq!(i4(0b11000110u8 as i8).mask().0, 0b00000110u8 as i8); - assert_eq!(i4(0b00001000u8 as i8).mask().0, 0b11111000u8 as i8); - assert_eq!(i4(0b00001110u8 as i8).mask().0, 0b11111110u8 as i8); - } - #[test] fn min_max_values() { - assert_eq!(u1::MAX, u1(1)); - assert_eq!(u2::MAX, u2(3)); - assert_eq!(u3::MAX, u3(7)); - assert_eq!(u7::MAX, u7(127)); - assert_eq!(u9::MAX, u9(511)); - - assert_eq!(i1::MAX, i1(0)); - assert_eq!(i2::MAX, i2(1)); - assert_eq!(i3::MAX, i3(3)); - assert_eq!(i7::MAX, i7(63)); - assert_eq!(i9::MAX, i9(255)); - - assert_eq!(u1::MIN, u1(0)); - assert_eq!(u2::MIN, u2(0)); - assert_eq!(u3::MIN, u3(0)); - assert_eq!(u7::MIN, u7(0)); - assert_eq!(u9::MIN, u9(0)); - assert_eq!(u127::MIN, u127(0)); - - assert_eq!(i1::MIN, i1(-1)); - assert_eq!(i2::MIN, i2(-2)); - assert_eq!(i3::MIN, i3(-4)); - assert_eq!(i7::MIN, i7(-64)); - assert_eq!(i9::MIN, i9(-256)); + let a = u1::MAX; + let b = u1::new(1); + assert_eq!(a, b); + assert_eq!(u1::MAX, u1::new(1)); + assert_eq!(u2::MAX, u2::new(3)); + assert_eq!(u3::MAX, u3::new(7)); + assert_eq!(u7::MAX, u7::new(127)); + assert_eq!(u9::MAX, u9::new(511)); + + assert_eq!(i1::MAX, i1::new(0)); + assert_eq!(i2::MAX, i2::new(1)); + assert_eq!(i3::MAX, i3::new(3)); + assert_eq!(i7::MAX, i7::new(63)); + assert_eq!(i9::MAX, i9::new(255)); + + assert_eq!(u1::MIN, u1::new(0)); + assert_eq!(u2::MIN, u2::new(0)); + assert_eq!(u3::MIN, u3::new(0)); + assert_eq!(u7::MIN, u7::new(0)); + assert_eq!(u9::MIN, u9::new(0)); + assert_eq!(u127::MIN, u127::new(0)); + + assert_eq!(i1::MIN, i1::new(-1)); + assert_eq!(i2::MIN, i2::new(-2)); + assert_eq!(i3::MIN, i3::new(-4)); + assert_eq!(i7::MIN, i7::new(-64)); + assert_eq!(i9::MIN, i9::new(-256)); } #[test] fn test_wrapping_add() { - assert_eq!(u1::MAX.wrapping_add(u1(1)), u1(0)); - assert_eq!(u1::MAX.wrapping_add(u1(0)), u1(1)); + assert_eq!(u1::MAX.wrapping_add(u1::new(1)), u1::new(0)); + assert_eq!(u1::MAX.wrapping_add(u1::new(0)), u1::new(1)); - assert_eq!(u5::MAX.wrapping_add(u5(1)), u5(0)); - assert_eq!(u5::MAX.wrapping_add(u5(4)), u5(3)); + assert_eq!(u5::MAX.wrapping_add(u5::new(1)), u5::new(0)); + assert_eq!(u5::MAX.wrapping_add(u5::new(4)), u5::new(3)); - assert_eq!(u127::MAX.wrapping_add(u127(100)), u127(99)); - assert_eq!(u127::MAX.wrapping_add(u127(1)), u127(0)); + assert_eq!(u127::MAX.wrapping_add(u127::new(100)), u127::new(99)); + assert_eq!(u127::MAX.wrapping_add(u127::new(1)), u127::new(0)); - assert_eq!(i1::MAX.wrapping_add(i1(0)), i1(0)); - assert_eq!(i1::MAX.wrapping_add(i1(-1)), i1(-1)); + assert_eq!(i1::MAX.wrapping_add(i1::new(0)), i1::new(0)); + assert_eq!(i1::MAX.wrapping_add(i1::new(-1)), i1::new(-1)); - assert_eq!(i7::MAX.wrapping_add(i7(1)), i7::MIN); - assert_eq!(i7::MAX.wrapping_add(i7(4)), i7(-61)); + assert_eq!(i7::MAX.wrapping_add(i7::new(1)), i7::MIN); + assert_eq!(i7::MAX.wrapping_add(i7::new(4)), i7::new(-61)); } #[test] #[should_panic] fn test_add_overflow_u5() { - let _s = u5::MAX + u5(1); + let _s = u5::MAX + u5::new(1); } #[test] #[should_panic] fn test_add_overflow_u127() { - let _s = u127::MAX + u127(1); + let _s = u127::MAX + u127::new(1); } #[test] #[should_panic] fn test_add_overflow_i96() { - let _s = i96::MAX + i96(100); + let _s = i96::MAX + i96::new(100); } #[test] #[should_panic] fn test_add_underflow_i96() { - let _s = i96::MIN + i96(-100); + let _s = i96::MIN + i96::new(-100); } #[test] #[should_panic] fn test_add_underflow_i17() { - let _s = i17::MIN + i17(-1); + let _s = i17::MIN + i17::new(-1); } #[test] fn test_add() { - assert_eq!(u5(1) + u5(2), u5(3)); + assert_eq!(u5::new(1) + u5::new(2), u5::new(3)); - assert_eq!(i7::MAX + i7::MIN, i7(-1)); - assert_eq!(i7(4) + i7(-3), i7(1)); - assert_eq!(i7(-4) + i7(3), i7(-1)); - assert_eq!(i7(-3) + i7(-20), i7(-23)); + assert_eq!(i7::MAX + i7::MIN, i7::new(-1)); + assert_eq!(i7::new(4) + i7::new(-3), i7::new(1)); + assert_eq!(i7::new(-4) + i7::new(3), i7::new(-1)); + assert_eq!(i7::new(-3) + i7::new(-20), i7::new(-23)); } #[test] @@ -806,168 +948,168 @@ mod tests { #[test] #[should_panic] fn test_sub_underflow_u5() { - let _s = u5::MIN - u5(1); + let _s = u5::MIN - u5::new(1); } #[test] #[should_panic] fn test_sub_underflow_i5() { - let _s = i5::MIN - i5(1); + let _s = i5::MIN - i5::new(1); } #[test] fn test_sub() { - assert_eq!(u5(1) - u5(1), u5(0)); - assert_eq!(u5(3) - u5(2), u5(1)); - - assert_eq!(i1(-1) - i1(-1), i1(0)); - assert_eq!(i7::MIN - i7::MIN, i7(0)); - assert_eq!(i7(4) - i7(-3), i7(7)); - assert_eq!(i7(-4) - i7(3), i7(-7)); - assert_eq!(i7(-3) - i7(-20), i7(17)); + assert_eq!(u5::new(1) - u5::new(1), u5::new(0)); + assert_eq!(u5::new(3) - u5::new(2), u5::new(1)); + + assert_eq!(i1::new(-1) - i1::new(-1), i1::new(0)); + assert_eq!(i7::MIN - i7::MIN, i7::new(0)); + assert_eq!(i7::new(4) - i7::new(-3), i7::new(7)); + assert_eq!(i7::new(-4) - i7::new(3), i7::new(-7)); + assert_eq!(i7::new(-3) - i7::new(-20), i7::new(17)); } #[test] fn test_shr() { - assert_eq!(u5(8) >> 1usize, u5(4)); - assert_eq!(u5(8) >> 1u8, u5(4)); - assert_eq!(u5(8) >> 1u16, u5(4)); - assert_eq!(u5(8) >> 1u32, u5(4)); - assert_eq!(u5(8) >> 1u64, u5(4)); - assert_eq!(u5(8) >> 1isize, u5(4)); - assert_eq!(u5(8) >> 1i8, u5(4)); - assert_eq!(u5(8) >> 1i16, u5(4)); - assert_eq!(u5(8) >> 1i32, u5(4)); - assert_eq!(u5(8) >> 1i64, u5(4)); - - assert_eq!(u5::MAX >> 4, u5(1)); - - assert_eq!(i7(-1) >> 5, i7(-1)); + assert_eq!(u5::new(8) >> 1usize, u5::new(4)); + assert_eq!(u5::new(8) >> 1u8, u5::new(4)); + assert_eq!(u5::new(8) >> 1u16, u5::new(4)); + assert_eq!(u5::new(8) >> 1u32, u5::new(4)); + assert_eq!(u5::new(8) >> 1u64, u5::new(4)); + assert_eq!(u5::new(8) >> 1isize, u5::new(4)); + assert_eq!(u5::new(8) >> 1i8, u5::new(4)); + assert_eq!(u5::new(8) >> 1i16, u5::new(4)); + assert_eq!(u5::new(8) >> 1i32, u5::new(4)); + assert_eq!(u5::new(8) >> 1i64, u5::new(4)); + + assert_eq!(u5::MAX >> 4, u5::new(1)); + + assert_eq!(i7::new(-1) >> 5, i7::new(-1)); } #[test] fn test_shl() { - assert_eq!(u5(16) << 1usize, u5(32)); - assert_eq!(u5(16) << 1u8, u5(32)); - assert_eq!(u5(16) << 1u16, u5(32)); - assert_eq!(u5(16) << 1u32, u5(32)); - assert_eq!(u5(16) << 1u64, u5(32)); - assert_eq!(u5(16) << 1isize, u5(32)); - assert_eq!(u5(16) << 1i8, u5(32)); - assert_eq!(u5(16) << 1i16, u5(32)); - assert_eq!(u5(16) << 1i32, u5(32)); - assert_eq!(u5(16) << 1i64, u5(32)); - - assert_eq!(u5::MAX << 4, u5(16)); - - assert_eq!(i5(16) << 1, i5(0)); - assert_eq!(i7(1) << 3, i7(8)); + assert_eq!(u5::new(15) << 1usize, u5::new(30)); + assert_eq!(u5::new(15) << 1u8, u5::new(30)); + assert_eq!(u5::new(15) << 1u16, u5::new(30)); + assert_eq!(u5::new(15) << 1u32, u5::new(30)); + assert_eq!(u5::new(15) << 1u64, u5::new(30)); + assert_eq!(u5::new(15) << 1isize, u5::new(30)); + assert_eq!(u5::new(15) << 1i8, u5::new(30)); + assert_eq!(u5::new(15) << 1i16, u5::new(30)); + assert_eq!(u5::new(15) << 1i32, u5::new(30)); + assert_eq!(u5::new(15) << 1i64, u5::new(30)); + + assert_eq!(u5::MAX << 4, u5::new(16)); + + assert_eq!(i5::new(8) << 1, i5::new(-16)); + assert_eq!(i7::new(1) << 3, i7::new(8)); } #[test] fn test_shr_assign() { - let mut x = u10(512); + let mut x = u10::new(512); x >>= 1usize; - assert_eq!(x, u10(256)); + assert_eq!(x, u10::new(256)); x >>= 1isize; - assert_eq!(x, u10(128)); + assert_eq!(x, u10::new(128)); x >>= 1u8; - assert_eq!(x, u10(64)); + assert_eq!(x, u10::new(64)); x >>= 1i8; - assert_eq!(x, u10(32)); + assert_eq!(x, u10::new(32)); x >>= 2u64; - assert_eq!(x, u10(8)); + assert_eq!(x, u10::new(8)); x >>= 3i32; - assert_eq!(x, u10(1)); + assert_eq!(x, u10::new(1)); } #[test] fn test_shl_assign() { - let mut x = u9(1); + let mut x = u9::new(1); x <<= 3i32; - assert_eq!(x, u9(8)); + assert_eq!(x, u9::new(8)); x <<= 2u64; - assert_eq!(x, u9(32)); + assert_eq!(x, u9::new(32)); x <<= 1usize; - assert_eq!(x, u9(64)); + assert_eq!(x, u9::new(64)); x <<= 1isize; - assert_eq!(x, u9(128)); + assert_eq!(x, u9::new(128)); x <<= 1u8; - assert_eq!(x, u9(256)); + assert_eq!(x, u9::new(256)); } #[test] fn test_bitor() { - assert_eq!(u9(1) | u9(8), u9(9)); - assert_eq!(&u9(1) | u9(8), u9(9)); - assert_eq!(u9(1) | &u9(8), u9(9)); - assert_eq!(&u9(1) | &u9(8), u9(9)); + assert_eq!(u9::new(1) | u9::new(8), u9::new(9)); + assert_eq!(&u9::new(1) | u9::new(8), u9::new(9)); + assert_eq!(u9::new(1) | &u9::new(8), u9::new(9)); + assert_eq!(&u9::new(1) | &u9::new(8), u9::new(9)); } #[test] fn test_bitor_assign() { - let mut x = u12(4); - x |= u12(1); - assert_eq!(x, u12(5)); - x |= u12(128); - assert_eq!(x, u12(133)); - x = u12(1); - x |= u12(127); - assert_eq!(x, u12(127)); + let mut x = u12::new(4); + x |= u12::new(1); + assert_eq!(x, u12::new(5)); + x |= u12::new(128); + assert_eq!(x, u12::new(133)); + x = u12::new(1); + x |= u12::new(127); + assert_eq!(x, u12::new(127)); } #[test] fn test_bitxor() { - assert_eq!(u7(0x7F) ^ u7(42), u7(85)); - assert_eq!(&u7(0) ^ u7(42), u7(42)); - assert_eq!(u7(0x10) ^ &u7(0x1), u7(0x11)); - assert_eq!(&u7(11) ^ &u7(1), u7(10)); + assert_eq!(u7::new(0x7F) ^ u7::new(42), u7::new(85)); + assert_eq!(&u7::new(0) ^ u7::new(42), u7::new(42)); + assert_eq!(u7::new(0x10) ^ &u7::new(0x1), u7::new(0x11)); + assert_eq!(&u7::new(11) ^ &u7::new(1), u7::new(10)); } #[test] fn test_bitxor_assign() { - let mut x = u12(4); - x ^= u12(1); - assert_eq!(x, u12(5)); - x ^= u12(128); - assert_eq!(x, u12(133)); - x ^= u12(1); - assert_eq!(x, u12(132)); - x ^= u12(127); - assert_eq!(x, u12(251)); + let mut x = u12::new(4); + x ^= u12::new(1); + assert_eq!(x, u12::new(5)); + x ^= u12::new(128); + assert_eq!(x, u12::new(133)); + x ^= u12::new(1); + assert_eq!(x, u12::new(132)); + x ^= u12::new(127); + assert_eq!(x, u12::new(251)); } #[test] fn test_bitand() { - assert_eq!(i9(-7) & i9(-9), i9::from(-7i8 & -9i8)); - assert_eq!(&i9(-7) & i9(-9), i9::from(&-7i8 & -9i8)); - assert_eq!(i9(-7) & &i9(-9), i9::from(-7i8 & &-9i8)); - assert_eq!(&i9(-7) & &i9(-9), i9::from(&-7i8 & &-9i8)); - - assert_eq!(u9(8) & u9(9), u9(8)); - assert_eq!(&u9(8) & u9(9), u9(8)); - assert_eq!(u9(8) & &u9(9), u9(8)); - assert_eq!(&u9(8) & &u9(9), u9(8)); + assert_eq!(i9::new(-7) & i9::new(-9), i9::from(-7i8 & -9i8)); + assert_eq!(&i9::new(-7) & i9::new(-9), i9::from(&-7i8 & -9i8)); + assert_eq!(i9::new(-7) & &i9::new(-9), i9::from(-7i8 & &-9i8)); + assert_eq!(&i9::new(-7) & &i9::new(-9), i9::from(&-7i8 & &-9i8)); + + assert_eq!(u9::new(8) & u9::new(9), u9::new(8)); + assert_eq!(&u9::new(8) & u9::new(9), u9::new(8)); + assert_eq!(u9::new(8) & &u9::new(9), u9::new(8)); + assert_eq!(&u9::new(8) & &u9::new(9), u9::new(8)); } #[test] fn test_bitand_assign() { - let mut x = u12(255); - x &= u12(127); - assert_eq!(x, u12(127)); - x &= u12(7); - assert_eq!(x, u12(7)); - x &= u12(127); - assert_eq!(x, u12(7)); - x &= u12(4); - assert_eq!(x, u12(4)); + let mut x = u12::new(255); + x &= u12::new(127); + assert_eq!(x, u12::new(127)); + x &= u12::new(7); + assert_eq!(x, u12::new(7)); + x &= u12::new(127); + assert_eq!(x, u12::new(7)); + x &= u12::new(4); + assert_eq!(x, u12::new(4)); } #[test] fn test_not() { - assert_eq!(!u7(42), u7(85)); - assert_eq!(!u7(0x7F), u7(0)); - assert_eq!(!u7(0), u7(0x7F)); - assert_eq!(!u7(56), u7(71)); + assert_eq!(!u7::new(42), u7::new(85)); + assert_eq!(!u7::new(0x7F), u7::new(0)); + assert_eq!(!u7::new(0), u7::new(0x7F)); + assert_eq!(!u7::new(56), u7::new(71)); } } diff --git a/src/niche.rs b/src/niche.rs new file mode 100644 index 0000000..f9e5d24 --- /dev/null +++ b/src/niche.rs @@ -0,0 +1,2404 @@ +macro_rules! new_byte { + ( + $( + $Name:ident($Primitive:ident) { $($Variant:ident = $value:literal,)* } + )* + ) => {$( + #[allow(dead_code)] + #[derive(Copy, Clone)] + #[repr($Primitive)] + enum $Name { + $($Variant = $value,)* + } + )*} +} + +macro_rules! new_int { + ( + $( + ( $Name:ident $Primitive:ident ) + ( $min:literal ..= $max:literal ) + ( $($LittleField:ident: $LittleType:ident),* ) + ( $($BigField:ident: $BigType:ident),* ) + )* + ) => {$( + #[cfg(target_endian = "little")] + #[allow(non_camel_case_types)] + #[derive(Copy, Clone)] + #[repr(C)] + pub(crate) struct $Name { + align: [core::primitive::$Primitive; 0], + $($LittleField: $LittleType,)* + } + + #[cfg(target_endian = "big")] + #[allow(non_camel_case_types)] + #[derive(Copy, Clone)] + #[repr(C)] + pub(crate) struct $Name { + align: [core::primitive::$Primitive; 0], + $($BigField: $BigType,)* + } + + impl $Name { + pub(crate) const MIN: core::primitive::$Primitive = $min; + pub(crate) const MAX: core::primitive::$Primitive = $max; + } + )*}; +} + +new_byte! { + MaxI1(i8) { + M1 = -1, + V0 = 0, + } + + MaxI2(i8) { + M2 = -2, + M1 = -1, + V0 = 0, + V1 = 1, + } + + MaxI3(i8) { + M4 = -4, + M3 = -3, + M2 = -2, + M1 = -1, + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + } + + MaxI4(i8) { + M8 = -8, + M7 = -7, + M6 = -6, + M5 = -5, + M4 = -4, + M3 = -3, + M2 = -2, + M1 = -1, + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + } + + MaxI5(i8) { + M16 = -16, + M15 = -15, + M14 = -14, + M13 = -13, + M12 = -12, + M11 = -11, + M10 = -10, + M9 = -9, + M8 = -8, + M7 = -7, + M6 = -6, + M5 = -5, + M4 = -4, + M3 = -3, + M2 = -2, + M1 = -1, + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + } + + MaxI6(i8) { + M32 = -32, + M31 = -31, + M30 = -30, + M29 = -29, + M28 = -28, + M27 = -27, + M26 = -26, + M25 = -25, + M24 = -24, + M23 = -23, + M22 = -22, + M21 = -21, + M20 = -20, + M19 = -19, + M18 = -18, + M17 = -17, + M16 = -16, + M15 = -15, + M14 = -14, + M13 = -13, + M12 = -12, + M11 = -11, + M10 = -10, + M9 = -9, + M8 = -8, + M7 = -7, + M6 = -6, + M5 = -5, + M4 = -4, + M3 = -3, + M2 = -2, + M1 = -1, + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + V16 = 16, + V17 = 17, + V18 = 18, + V19 = 19, + V20 = 20, + V21 = 21, + V22 = 22, + V23 = 23, + V24 = 24, + V25 = 25, + V26 = 26, + V27 = 27, + V28 = 28, + V29 = 29, + V30 = 30, + V31 = 31, + } + + MaxI7(i8) { + M64 = -64, + M63 = -63, + M62 = -62, + M61 = -61, + M60 = -60, + M59 = -59, + M58 = -58, + M57 = -57, + M56 = -56, + M55 = -55, + M54 = -54, + M53 = -53, + M52 = -52, + M51 = -51, + M50 = -50, + M49 = -49, + M48 = -48, + M47 = -47, + M46 = -46, + M45 = -45, + M44 = -44, + M43 = -43, + M42 = -42, + M41 = -41, + M40 = -40, + M39 = -39, + M38 = -38, + M37 = -37, + M36 = -36, + M35 = -35, + M34 = -34, + M33 = -33, + M32 = -32, + M31 = -31, + M30 = -30, + M29 = -29, + M28 = -28, + M27 = -27, + M26 = -26, + M25 = -25, + M24 = -24, + M23 = -23, + M22 = -22, + M21 = -21, + M20 = -20, + M19 = -19, + M18 = -18, + M17 = -17, + M16 = -16, + M15 = -15, + M14 = -14, + M13 = -13, + M12 = -12, + M11 = -11, + M10 = -10, + M9 = -9, + M8 = -8, + M7 = -7, + M6 = -6, + M5 = -5, + M4 = -4, + M3 = -3, + M2 = -2, + M1 = -1, + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + V16 = 16, + V17 = 17, + V18 = 18, + V19 = 19, + V20 = 20, + V21 = 21, + V22 = 22, + V23 = 23, + V24 = 24, + V25 = 25, + V26 = 26, + V27 = 27, + V28 = 28, + V29 = 29, + V30 = 30, + V31 = 31, + V32 = 32, + V33 = 33, + V34 = 34, + V35 = 35, + V36 = 36, + V37 = 37, + V38 = 38, + V39 = 39, + V40 = 40, + V41 = 41, + V42 = 42, + V43 = 43, + V44 = 44, + V45 = 45, + V46 = 46, + V47 = 47, + V48 = 48, + V49 = 49, + V50 = 50, + V51 = 51, + V52 = 52, + V53 = 53, + V54 = 54, + V55 = 55, + V56 = 56, + V57 = 57, + V58 = 58, + V59 = 59, + V60 = 60, + V61 = 61, + V62 = 62, + V63 = 63, + } + + MaxI8(i8) { + M128 = -128, + M127 = -127, + M126 = -126, + M125 = -125, + M124 = -124, + M123 = -123, + M122 = -122, + M121 = -121, + M120 = -120, + M119 = -119, + M118 = -118, + M117 = -117, + M116 = -116, + M115 = -115, + M114 = -114, + M113 = -113, + M112 = -112, + M111 = -111, + M110 = -110, + M109 = -109, + M108 = -108, + M107 = -107, + M106 = -106, + M105 = -105, + M104 = -104, + M103 = -103, + M102 = -102, + M101 = -101, + M100 = -100, + M99 = -99, + M98 = -98, + M97 = -97, + M96 = -96, + M95 = -95, + M94 = -94, + M93 = -93, + M92 = -92, + M91 = -91, + M90 = -90, + M89 = -89, + M88 = -88, + M87 = -87, + M86 = -86, + M85 = -85, + M84 = -84, + M83 = -83, + M82 = -82, + M81 = -81, + M80 = -80, + M79 = -79, + M78 = -78, + M77 = -77, + M76 = -76, + M75 = -75, + M74 = -74, + M73 = -73, + M72 = -72, + M71 = -71, + M70 = -70, + M69 = -69, + M68 = -68, + M67 = -67, + M66 = -66, + M65 = -65, + M64 = -64, + M63 = -63, + M62 = -62, + M61 = -61, + M60 = -60, + M59 = -59, + M58 = -58, + M57 = -57, + M56 = -56, + M55 = -55, + M54 = -54, + M53 = -53, + M52 = -52, + M51 = -51, + M50 = -50, + M49 = -49, + M48 = -48, + M47 = -47, + M46 = -46, + M45 = -45, + M44 = -44, + M43 = -43, + M42 = -42, + M41 = -41, + M40 = -40, + M39 = -39, + M38 = -38, + M37 = -37, + M36 = -36, + M35 = -35, + M34 = -34, + M33 = -33, + M32 = -32, + M31 = -31, + M30 = -30, + M29 = -29, + M28 = -28, + M27 = -27, + M26 = -26, + M25 = -25, + M24 = -24, + M23 = -23, + M22 = -22, + M21 = -21, + M20 = -20, + M19 = -19, + M18 = -18, + M17 = -17, + M16 = -16, + M15 = -15, + M14 = -14, + M13 = -13, + M12 = -12, + M11 = -11, + M10 = -10, + M9 = -9, + M8 = -8, + M7 = -7, + M6 = -6, + M5 = -5, + M4 = -4, + M3 = -3, + M2 = -2, + M1 = -1, + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + V16 = 16, + V17 = 17, + V18 = 18, + V19 = 19, + V20 = 20, + V21 = 21, + V22 = 22, + V23 = 23, + V24 = 24, + V25 = 25, + V26 = 26, + V27 = 27, + V28 = 28, + V29 = 29, + V30 = 30, + V31 = 31, + V32 = 32, + V33 = 33, + V34 = 34, + V35 = 35, + V36 = 36, + V37 = 37, + V38 = 38, + V39 = 39, + V40 = 40, + V41 = 41, + V42 = 42, + V43 = 43, + V44 = 44, + V45 = 45, + V46 = 46, + V47 = 47, + V48 = 48, + V49 = 49, + V50 = 50, + V51 = 51, + V52 = 52, + V53 = 53, + V54 = 54, + V55 = 55, + V56 = 56, + V57 = 57, + V58 = 58, + V59 = 59, + V60 = 60, + V61 = 61, + V62 = 62, + V63 = 63, + V64 = 64, + V65 = 65, + V66 = 66, + V67 = 67, + V68 = 68, + V69 = 69, + V70 = 70, + V71 = 71, + V72 = 72, + V73 = 73, + V74 = 74, + V75 = 75, + V76 = 76, + V77 = 77, + V78 = 78, + V79 = 79, + V80 = 80, + V81 = 81, + V82 = 82, + V83 = 83, + V84 = 84, + V85 = 85, + V86 = 86, + V87 = 87, + V88 = 88, + V89 = 89, + V90 = 90, + V91 = 91, + V92 = 92, + V93 = 93, + V94 = 94, + V95 = 95, + V96 = 96, + V97 = 97, + V98 = 98, + V99 = 99, + V100 = 100, + V101 = 101, + V102 = 102, + V103 = 103, + V104 = 104, + V105 = 105, + V106 = 106, + V107 = 107, + V108 = 108, + V109 = 109, + V110 = 110, + V111 = 111, + V112 = 112, + V113 = 113, + V114 = 114, + V115 = 115, + V116 = 116, + V117 = 117, + V118 = 118, + V119 = 119, + V120 = 120, + V121 = 121, + V122 = 122, + V123 = 123, + V124 = 124, + V125 = 125, + V126 = 126, + V127 = 127, + } + + MaxU0(u8) { + V0 = 0, + } + + MaxU1(u8) { + V0 = 0, + V1 = 1, + } + + MaxU2(u8) { + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + } + + MaxU3(u8) { + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + } + + MaxU4(u8) { + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + } + + MaxU5(u8) { + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + V16 = 16, + V17 = 17, + V18 = 18, + V19 = 19, + V20 = 20, + V21 = 21, + V22 = 22, + V23 = 23, + V24 = 24, + V25 = 25, + V26 = 26, + V27 = 27, + V28 = 28, + V29 = 29, + V30 = 30, + V31 = 31, + } + + MaxU6(u8) { + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + V16 = 16, + V17 = 17, + V18 = 18, + V19 = 19, + V20 = 20, + V21 = 21, + V22 = 22, + V23 = 23, + V24 = 24, + V25 = 25, + V26 = 26, + V27 = 27, + V28 = 28, + V29 = 29, + V30 = 30, + V31 = 31, + V32 = 32, + V33 = 33, + V34 = 34, + V35 = 35, + V36 = 36, + V37 = 37, + V38 = 38, + V39 = 39, + V40 = 40, + V41 = 41, + V42 = 42, + V43 = 43, + V44 = 44, + V45 = 45, + V46 = 46, + V47 = 47, + V48 = 48, + V49 = 49, + V50 = 50, + V51 = 51, + V52 = 52, + V53 = 53, + V54 = 54, + V55 = 55, + V56 = 56, + V57 = 57, + V58 = 58, + V59 = 59, + V60 = 60, + V61 = 61, + V62 = 62, + V63 = 63, + } + + MaxU7(u8) { + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + V16 = 16, + V17 = 17, + V18 = 18, + V19 = 19, + V20 = 20, + V21 = 21, + V22 = 22, + V23 = 23, + V24 = 24, + V25 = 25, + V26 = 26, + V27 = 27, + V28 = 28, + V29 = 29, + V30 = 30, + V31 = 31, + V32 = 32, + V33 = 33, + V34 = 34, + V35 = 35, + V36 = 36, + V37 = 37, + V38 = 38, + V39 = 39, + V40 = 40, + V41 = 41, + V42 = 42, + V43 = 43, + V44 = 44, + V45 = 45, + V46 = 46, + V47 = 47, + V48 = 48, + V49 = 49, + V50 = 50, + V51 = 51, + V52 = 52, + V53 = 53, + V54 = 54, + V55 = 55, + V56 = 56, + V57 = 57, + V58 = 58, + V59 = 59, + V60 = 60, + V61 = 61, + V62 = 62, + V63 = 63, + V64 = 64, + V65 = 65, + V66 = 66, + V67 = 67, + V68 = 68, + V69 = 69, + V70 = 70, + V71 = 71, + V72 = 72, + V73 = 73, + V74 = 74, + V75 = 75, + V76 = 76, + V77 = 77, + V78 = 78, + V79 = 79, + V80 = 80, + V81 = 81, + V82 = 82, + V83 = 83, + V84 = 84, + V85 = 85, + V86 = 86, + V87 = 87, + V88 = 88, + V89 = 89, + V90 = 90, + V91 = 91, + V92 = 92, + V93 = 93, + V94 = 94, + V95 = 95, + V96 = 96, + V97 = 97, + V98 = 98, + V99 = 99, + V100 = 100, + V101 = 101, + V102 = 102, + V103 = 103, + V104 = 104, + V105 = 105, + V106 = 106, + V107 = 107, + V108 = 108, + V109 = 109, + V110 = 110, + V111 = 111, + V112 = 112, + V113 = 113, + V114 = 114, + V115 = 115, + V116 = 116, + V117 = 117, + V118 = 118, + V119 = 119, + V120 = 120, + V121 = 121, + V122 = 122, + V123 = 123, + V124 = 124, + V125 = 125, + V126 = 126, + V127 = 127, + } + + MaxU8(u8) { + V0 = 0, + V1 = 1, + V2 = 2, + V3 = 3, + V4 = 4, + V5 = 5, + V6 = 6, + V7 = 7, + V8 = 8, + V9 = 9, + V10 = 10, + V11 = 11, + V12 = 12, + V13 = 13, + V14 = 14, + V15 = 15, + V16 = 16, + V17 = 17, + V18 = 18, + V19 = 19, + V20 = 20, + V21 = 21, + V22 = 22, + V23 = 23, + V24 = 24, + V25 = 25, + V26 = 26, + V27 = 27, + V28 = 28, + V29 = 29, + V30 = 30, + V31 = 31, + V32 = 32, + V33 = 33, + V34 = 34, + V35 = 35, + V36 = 36, + V37 = 37, + V38 = 38, + V39 = 39, + V40 = 40, + V41 = 41, + V42 = 42, + V43 = 43, + V44 = 44, + V45 = 45, + V46 = 46, + V47 = 47, + V48 = 48, + V49 = 49, + V50 = 50, + V51 = 51, + V52 = 52, + V53 = 53, + V54 = 54, + V55 = 55, + V56 = 56, + V57 = 57, + V58 = 58, + V59 = 59, + V60 = 60, + V61 = 61, + V62 = 62, + V63 = 63, + V64 = 64, + V65 = 65, + V66 = 66, + V67 = 67, + V68 = 68, + V69 = 69, + V70 = 70, + V71 = 71, + V72 = 72, + V73 = 73, + V74 = 74, + V75 = 75, + V76 = 76, + V77 = 77, + V78 = 78, + V79 = 79, + V80 = 80, + V81 = 81, + V82 = 82, + V83 = 83, + V84 = 84, + V85 = 85, + V86 = 86, + V87 = 87, + V88 = 88, + V89 = 89, + V90 = 90, + V91 = 91, + V92 = 92, + V93 = 93, + V94 = 94, + V95 = 95, + V96 = 96, + V97 = 97, + V98 = 98, + V99 = 99, + V100 = 100, + V101 = 101, + V102 = 102, + V103 = 103, + V104 = 104, + V105 = 105, + V106 = 106, + V107 = 107, + V108 = 108, + V109 = 109, + V110 = 110, + V111 = 111, + V112 = 112, + V113 = 113, + V114 = 114, + V115 = 115, + V116 = 116, + V117 = 117, + V118 = 118, + V119 = 119, + V120 = 120, + V121 = 121, + V122 = 122, + V123 = 123, + V124 = 124, + V125 = 125, + V126 = 126, + V127 = 127, + V128 = 128, + V129 = 129, + V130 = 130, + V131 = 131, + V132 = 132, + V133 = 133, + V134 = 134, + V135 = 135, + V136 = 136, + V137 = 137, + V138 = 138, + V139 = 139, + V140 = 140, + V141 = 141, + V142 = 142, + V143 = 143, + V144 = 144, + V145 = 145, + V146 = 146, + V147 = 147, + V148 = 148, + V149 = 149, + V150 = 150, + V151 = 151, + V152 = 152, + V153 = 153, + V154 = 154, + V155 = 155, + V156 = 156, + V157 = 157, + V158 = 158, + V159 = 159, + V160 = 160, + V161 = 161, + V162 = 162, + V163 = 163, + V164 = 164, + V165 = 165, + V166 = 166, + V167 = 167, + V168 = 168, + V169 = 169, + V170 = 170, + V171 = 171, + V172 = 172, + V173 = 173, + V174 = 174, + V175 = 175, + V176 = 176, + V177 = 177, + V178 = 178, + V179 = 179, + V180 = 180, + V181 = 181, + V182 = 182, + V183 = 183, + V184 = 184, + V185 = 185, + V186 = 186, + V187 = 187, + V188 = 188, + V189 = 189, + V190 = 190, + V191 = 191, + V192 = 192, + V193 = 193, + V194 = 194, + V195 = 195, + V196 = 196, + V197 = 197, + V198 = 198, + V199 = 199, + V200 = 200, + V201 = 201, + V202 = 202, + V203 = 203, + V204 = 204, + V205 = 205, + V206 = 206, + V207 = 207, + V208 = 208, + V209 = 209, + V210 = 210, + V211 = 211, + V212 = 212, + V213 = 213, + V214 = 214, + V215 = 215, + V216 = 216, + V217 = 217, + V218 = 218, + V219 = 219, + V220 = 220, + V221 = 221, + V222 = 222, + V223 = 223, + V224 = 224, + V225 = 225, + V226 = 226, + V227 = 227, + V228 = 228, + V229 = 229, + V230 = 230, + V231 = 231, + V232 = 232, + V233 = 233, + V234 = 234, + V235 = 235, + V236 = 236, + V237 = 237, + V238 = 238, + V239 = 239, + V240 = 240, + V241 = 241, + V242 = 242, + V243 = 243, + V244 = 244, + V245 = 245, + V246 = 246, + V247 = 247, + V248 = 248, + V249 = 249, + V250 = 250, + V251 = 251, + V252 = 252, + V253 = 253, + V254 = 254, + V255 = 255, + } +} + +new_int! { + (u1 u8) + (0 ..= 0x01) + (a: MaxU1) + (a: MaxU1) + + (u2 u8) + (0 ..= 0x03) + (a: MaxU2) + (a: MaxU2) + + (u3 u8) + (0 ..= 0x07) + (a: MaxU3) + (a: MaxU3) + + (u4 u8) + (0 ..= 0x0f) + (a: MaxU4) + (a: MaxU4) + + (u5 u8) + (0 ..= 0x1f) + (a: MaxU5) + (a: MaxU5) + + (u6 u8) + (0 ..= 0x3f) + (a: MaxU6) + (a: MaxU6) + + (u7 u8) + (0 ..= 0x7f) + (a: MaxU7) + (a: MaxU7) + + // (u8 u8) + // (0 ..= 0xff) + // (a: MaxU8) + // (a: MaxU8) + + (u9 u16) + (0 ..= 0x01ff) + (a: MaxU8, b: MaxU1) + (b: MaxU1, a: MaxU8) + + (u10 u16) + (0 ..= 0x03ff) + (a: MaxU8, b: MaxU2) + (b: MaxU2, a: MaxU8) + + (u11 u16) + (0 ..= 0x07ff) + (a: MaxU8, b: MaxU3) + (b: MaxU3, a: MaxU8) + + (u12 u16) + (0 ..= 0x0fff) + (a: MaxU8, b: MaxU4) + (b: MaxU4, a: MaxU8) + + (u13 u16) + (0 ..= 0x1fff) + (a: MaxU8, b: MaxU5) + (b: MaxU5, a: MaxU8) + + (u14 u16) + (0 ..= 0x3fff) + (a: MaxU8, b: MaxU6) + (b: MaxU6, a: MaxU8) + + (u15 u16) + (0 ..= 0x7fff) + (a: MaxU8, b: MaxU7) + (b: MaxU7, a: MaxU8) + + // (u16 u16) + // (0 ..= 0xffff) + // (a: MaxU8, b: MaxU8) + // (b: MaxU8, a: MaxU8) + + (u17 u32) + (0 ..= 0x0001_ffff) + (a: MaxU8, b: MaxU8, c: MaxU1, d: MaxU0) + (d: MaxU0, c: MaxU1, b: MaxU8, a: MaxU8) + + (u18 u32) + (0 ..= 0x0003_ffff) + (a: MaxU8, b: MaxU8, c: MaxU2, d: MaxU0) + (d: MaxU0, c: MaxU2, b: MaxU8, a: MaxU8) + + (u19 u32) + (0 ..= 0x0007_ffff) + (a: MaxU8, b: MaxU8, c: MaxU3, d: MaxU0) + (d: MaxU0, c: MaxU3, b: MaxU8, a: MaxU8) + + (u20 u32) + (0 ..= 0x000f_ffff) + (a: MaxU8, b: MaxU8, c: MaxU4, d: MaxU0) + (d: MaxU0, c: MaxU4, b: MaxU8, a: MaxU8) + + (u21 u32) + (0 ..= 0x001f_ffff) + (a: MaxU8, b: MaxU8, c: MaxU5, d: MaxU0) + (d: MaxU0, c: MaxU5, b: MaxU8, a: MaxU8) + + (u22 u32) + (0 ..= 0x003f_ffff) + (a: MaxU8, b: MaxU8, c: MaxU6, d: MaxU0) + (d: MaxU0, c: MaxU6, b: MaxU8, a: MaxU8) + + (u23 u32) + (0 ..= 0x007f_ffff) + (a: MaxU8, b: MaxU8, c: MaxU7, d: MaxU0) + (d: MaxU1, c: MaxU7, b: MaxU8, a: MaxU8) + + (u24 u32) + (0 ..= 0x00ff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU0) + (d: MaxU0, c: MaxU8, b: MaxU8, a: MaxU8) + + (u25 u32) + (0 ..= 0x01ff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU1) + (d: MaxU1, c: MaxU8, b: MaxU8, a: MaxU8) + + (u26 u32) + (0 ..= 0x03ff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU2) + (d: MaxU2, c: MaxU8, b: MaxU8, a: MaxU8) + + (u27 u32) + (0 ..= 0x07ff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU3) + (d: MaxU3, c: MaxU8, b: MaxU8, a: MaxU8) + + (u28 u32) + (0 ..= 0x0fff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU4) + (d: MaxU4, c: MaxU8, b: MaxU8, a: MaxU8) + + (u29 u32) + (0 ..= 0x1fff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU5) + (d: MaxU5, c: MaxU8, b: MaxU8, a: MaxU8) + + (u30 u32) + (0 ..= 0x3fff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU6) + (d: MaxU6, c: MaxU8, b: MaxU8, a: MaxU8) + + (u31 u32) + (0 ..= 0x7fff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU7) + (d: MaxU7, c: MaxU8, b: MaxU8, a: MaxU8) + + // (u32 u32) + // (0 ..= 0xffff_ffff) + // (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8) + // (d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u33 u64) + (0 ..= 0x00000001ffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU1, f: MaxU0, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU0, e: MaxU1, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u34 u64) + (0 ..= 0x00000003ffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU2, f: MaxU0, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU0, e: MaxU2, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u35 u64) + (0 ..= 0x00000007ffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU3, f: MaxU0, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU0, e: MaxU3, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u36 u64) + (0 ..= 0x0000000fffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU4, f: MaxU0, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU0, e: MaxU4, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u37 u64) + (0 ..= 0x0000001fffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU5, f: MaxU0, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU0, e: MaxU5, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u38 u64) + (0 ..= 0x0000003fffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU6, f: MaxU0, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU0, e: MaxU6, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u39 u64) + (0 ..= 0x0000007fffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU7, f: MaxU0, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU0, e: MaxU7, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u40 u64) + (0 ..= 0x000000ffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU0, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU0, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u41 u64) + (0 ..= 0x000001ffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU1, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU1, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u42 u64) + (0 ..= 0x000003ffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU2, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU2, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u43 u64) + (0 ..= 0x000007ffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU3, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU3, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u44 u64) + (0 ..= 0x00000fffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU4, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU4, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u45 u64) + (0 ..= 0x00001fffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU5, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU5, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u46 u64) + (0 ..= 0x00003fffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU6, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU6, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u47 u64) + (0 ..= 0x00007fffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU7, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU7, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u48 u64) + (0 ..= 0x0000ffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU0, h: MaxU0) + (h: MaxU0, g: MaxU0, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u49 u64) + (0 ..= 0x0001ffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU1, h: MaxU0) + (h: MaxU0, g: MaxU1, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u50 u64) + (0 ..= 0x0003ffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU2, h: MaxU0) + (h: MaxU0, g: MaxU2, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u51 u64) + (0 ..= 0x0007ffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU3, h: MaxU0) + (h: MaxU0, g: MaxU3, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u52 u64) + (0 ..= 0x000fffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU4, h: MaxU0) + (h: MaxU0, g: MaxU4, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u53 u64) + (0 ..= 0x001fffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU5, h: MaxU0) + (h: MaxU0, g: MaxU5, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u54 u64) + (0 ..= 0x003fffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU6, h: MaxU0) + (h: MaxU0, g: MaxU6, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u55 u64) + (0 ..= 0x007fffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU7, h: MaxU0) + (h: MaxU0, g: MaxU7, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u56 u64) + (0 ..= 0x00ffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU0) + (h: MaxU0, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u57 u64) + (0 ..= 0x01ffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU1) + (h: MaxU1, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u58 u64) + (0 ..= 0x03ffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU2) + (h: MaxU2, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u59 u64) + (0 ..= 0x07ffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU3) + (h: MaxU3, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u60 u64) + (0 ..= 0x0fffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU4) + (h: MaxU4, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u61 u64) + (0 ..= 0x1fffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU5) + (h: MaxU5, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u62 u64) + (0 ..= 0x3fffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU6) + (h: MaxU6, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u63 u64) + (0 ..= 0x7fffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU7) + (h: MaxU7, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + // (u64 u64) + // (0 ..= 0xffffffffffffffff) + // (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8) + // (h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u65 u128) + (0 ..= 0x0000000000000001ffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU1, j: MaxU0, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU0, i: MaxU1, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u66 u128) + (0 ..= 0x0000000000000003ffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU2, j: MaxU0, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU0, i: MaxU2, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u67 u128) + (0 ..= 0x0000000000000007ffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU3, j: MaxU0, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU0, i: MaxU3, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u68 u128) + (0 ..= 0x000000000000000fffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU4, j: MaxU0, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU0, i: MaxU4, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u69 u128) + (0 ..= 0x000000000000001fffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU5, j: MaxU0, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU0, i: MaxU5, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u70 u128) + (0 ..= 0x000000000000003fffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU6, j: MaxU0, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU0, i: MaxU6, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u71 u128) + (0 ..= 0x000000000000007fffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU7, j: MaxU0, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU0, i: MaxU7, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u72 u128) + (0 ..= 0x00000000000000ffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU0, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU0, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u73 u128) + (0 ..= 0x00000000000001ffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU1, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU1, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u74 u128) + (0 ..= 0x00000000000003ffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU2, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU2, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u75 u128) + (0 ..= 0x00000000000007ffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU3, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU3, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u76 u128) + (0 ..= 0x0000000000000fffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU4, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU4, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u77 u128) + (0 ..= 0x0000000000001fffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU5, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU5, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u78 u128) + (0 ..= 0x0000000000003fffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU6, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU6, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u79 u128) + (0 ..= 0x0000000000007fffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU7, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU7, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u80 u128) + (0 ..= 0x000000000000ffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU0, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU0, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u81 u128) + (0 ..= 0x000000000001ffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU1, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU1, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u82 u128) + (0 ..= 0x000000000003ffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU2, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU2, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u83 u128) + (0 ..= 0x000000000007ffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU3, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU3, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u84 u128) + (0 ..= 0x00000000000fffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU4, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU4, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u85 u128) + (0 ..= 0x00000000001fffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU5, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU5, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u86 u128) + (0 ..= 0x00000000003fffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU6, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU6, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u87 u128) + (0 ..= 0x00000000007fffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU7, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU7, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u88 u128) + (0 ..= 0x0000000000ffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU0, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU0, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u89 u128) + (0 ..= 0x0000000001ffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU1, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU1, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u90 u128) + (0 ..= 0x0000000003ffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU2, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU2, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u91 u128) + (0 ..= 0x0000000007ffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU3, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU3, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u92 u128) + (0 ..= 0x000000000fffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU4, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU4, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u93 u128) + (0 ..= 0x000000001fffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU5, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU5, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u94 u128) + (0 ..= 0x000000003fffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU6, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU6, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u95 u128) + (0 ..= 0x000000007fffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU7, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU7, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u96 u128) + (0 ..= 0x00000000ffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU0, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU0, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u97 u128) + (0 ..= 0x00000001ffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU1, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU1, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u98 u128) + (0 ..= 0x00000003ffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU2, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU2, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u99 u128) + (0 ..= 0x00000007ffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU3, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU3, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u100 u128) + (0 ..= 0x0000000fffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU4, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU4, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u101 u128) + (0 ..= 0x0000001fffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU5, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU5, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u102 u128) + (0 ..= 0x0000003fffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU6, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU6, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u103 u128) + (0 ..= 0x0000007fffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU7, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU7, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u104 u128) + (0 ..= 0x000000ffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU0, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU0, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u105 u128) + (0 ..= 0x000001ffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU1, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU1, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u106 u128) + (0 ..= 0x000003ffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU2, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU2, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u107 u128) + (0 ..= 0x000007ffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU3, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU3, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u108 u128) + (0 ..= 0x00000fffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU4, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU4, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u109 u128) + (0 ..= 0x00001fffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU5, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU5, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u110 u128) + (0 ..= 0x00003fffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU6, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU6, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u111 u128) + (0 ..= 0x00007fffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU7, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU7, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u112 u128) + (0 ..= 0x0000ffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU0, p: MaxU1) + (p: MaxU1, o: MaxU0, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u113 u128) + (0 ..= 0x0001ffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU1, p: MaxU1) + (p: MaxU1, o: MaxU1, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u114 u128) + (0 ..= 0x0003ffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU2, p: MaxU1) + (p: MaxU1, o: MaxU2, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u115 u128) + (0 ..= 0x0007ffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU3, p: MaxU1) + (p: MaxU1, o: MaxU3, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u116 u128) + (0 ..= 0x000fffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU4, p: MaxU1) + (p: MaxU1, o: MaxU4, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u117 u128) + (0 ..= 0x001fffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU5, p: MaxU1) + (p: MaxU1, o: MaxU5, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u118 u128) + (0 ..= 0x003fffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU6, p: MaxU1) + (p: MaxU1, o: MaxU6, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u119 u128) + (0 ..= 0x007fffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU7, p: MaxU1) + (p: MaxU1, o: MaxU7, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u120 u128) + (0 ..= 0x00ffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU1) + (p: MaxU1, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u121 u128) + (0 ..= 0x01ffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU1) + (p: MaxU1, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u122 u128) + (0 ..= 0x03ffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU2) + (p: MaxU2, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u123 u128) + (0 ..= 0x07ffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU3) + (p: MaxU3, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u124 u128) + (0 ..= 0x0fffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU4) + (p: MaxU4, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u125 u128) + (0 ..= 0x1fffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU5) + (p: MaxU5, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u126 u128) + (0 ..= 0x3fffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU6) + (p: MaxU6, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (u127 u128) + (0 ..= 0x7fffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU7) + (p: MaxU7, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + // (u128 u128) + // (0 ..= 0xffffffffffffffffffffffffffffffff) + // (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxU8) + // (p: MaxU8, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i1 i8) + (-0x01 ..= 0x00) + (a: MaxI1) + (a: MaxI1) + + (i2 i8) + (-0x02 ..= 0x01) + (a: MaxI2) + (a: MaxI2) + + (i3 i8) + (-0x04 ..= 0x03) + (a: MaxI3) + (a: MaxI3) + + (i4 i8) + (-0x08 ..= 0x07) + (a: MaxI4) + (a: MaxI4) + + (i5 i8) + (-0x10 ..= 0x0f) + (a: MaxI5) + (a: MaxI5) + + (i6 i8) + (-0x20 ..= 0x1f) + (a: MaxI6) + (a: MaxI6) + + (i7 i8) + (-0x40 ..= 0x3f) + (a: MaxI7) + (a: MaxI7) + + // (i8 i8) + // (-0x80 ..= 0x7f) + // (a: MaxI8) + // (a: MaxI8) + + (i9 i16) + (-0x0100 ..= 0x00ff) + (a: MaxU8, b: MaxI1) + (b: MaxI1, a: MaxU8) + + (i10 i16) + (-0x0200 ..= 0x01ff) + (a: MaxU8, b: MaxI2) + (b: MaxI2, a: MaxU8) + + (i11 i16) + (-0x0400 ..= 0x03ff) + (a: MaxU8, b: MaxI3) + (b: MaxI3, a: MaxU8) + + (i12 i16) + (-0x0800 ..= 0x07ff) + (a: MaxU8, b: MaxI4) + (b: MaxI4, a: MaxU8) + + (i13 i16) + (-0x1000 ..= 0x0fff) + (a: MaxU8, b: MaxI5) + (b: MaxI5, a: MaxU8) + + (i14 i16) + (-0x2000 ..= 0x1fff) + (a: MaxU8, b: MaxI6) + (b: MaxI6, a: MaxU8) + + (i15 i16) + (-0x4000 ..= 0x3fff) + (a: MaxU8, b: MaxI7) + (b: MaxI7, a: MaxU8) + + // (i16 i16) + // (-0x8000 ..= 0x7fff) + // (a: MaxU8, b: MaxI8) + // (b: MaxI8, a: MaxU8) + + (i17 i32) + (-0x0001_0000 ..= 0x0000_ffff) + (a: MaxU8, b: MaxU8, c: MaxI1, d: MaxI1) + (d: MaxI1, c: MaxI1, b: MaxU8, a: MaxU8) + + (i18 i32) + (-0x0002_0000 ..= 0x0001_ffff) + (a: MaxU8, b: MaxU8, c: MaxI2, d: MaxI1) + (d: MaxI1, c: MaxI2, b: MaxU8, a: MaxU8) + + (i19 i32) + (-0x0004_0000 ..= 0x0003_ffff) + (a: MaxU8, b: MaxU8, c: MaxI3, d: MaxI1) + (d: MaxI1, c: MaxI3, b: MaxU8, a: MaxU8) + + (i20 i32) + (-0x0008_0000 ..= 0x0007_ffff) + (a: MaxU8, b: MaxU8, c: MaxI4, d: MaxI1) + (d: MaxI1, c: MaxI4, b: MaxU8, a: MaxU8) + + (i21 i32) + (-0x0010_0000 ..= 0x000f_ffff) + (a: MaxU8, b: MaxU8, c: MaxI5, d: MaxI1) + (d: MaxI1, c: MaxI5, b: MaxU8, a: MaxU8) + + (i22 i32) + (-0x0020_0000 ..= 0x001f_ffff) + (a: MaxU8, b: MaxU8, c: MaxI6, d: MaxI1) + (d: MaxI1, c: MaxI6, b: MaxU8, a: MaxU8) + + (i23 i32) + (-0x0040_0000 ..= 0x003f_ffff) + (a: MaxU8, b: MaxU8, c: MaxI7, d: MaxI1) + (d: MaxI1, c: MaxI7, b: MaxU8, a: MaxU8) + + (i24 i32) + (-0x0080_0000 ..= 0x007f_ffff) + (a: MaxU8, b: MaxU8, c: MaxI8, d: MaxI1) + (d: MaxI1, c: MaxU8, b: MaxU8, a: MaxU8) + + (i25 i32) + (-0x0100_0000 ..= 0x00ff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxI1) + (d: MaxI1, c: MaxU8, b: MaxU8, a: MaxU8) + + (i26 i32) + (-0x0200_0000 ..= 0x01ff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxI2) + (d: MaxI2, c: MaxU8, b: MaxU8, a: MaxU8) + + (i27 i32) + (-0x0400_0000 ..= 0x03ff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxI3) + (d: MaxI3, c: MaxU8, b: MaxU8, a: MaxU8) + + (i28 i32) + (-0x0800_0000 ..= 0x07ff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxI4) + (d: MaxI4, c: MaxU8, b: MaxU8, a: MaxU8) + + (i29 i32) + (-0x1000_0000 ..= 0x0fff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxI5) + (d: MaxI5, c: MaxU8, b: MaxU8, a: MaxU8) + + (i30 i32) + (-0x2000_0000 ..= 0x1fff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxI6) + (d: MaxI6, c: MaxU8, b: MaxU8, a: MaxU8) + + (i31 i32) + (-0x4000_0000 ..= 0x3fff_ffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxI7) + (d: MaxI7, c: MaxU8, b: MaxU8, a: MaxU8) + + // (i32 i32) + // (-0x8000_0000 ..= 0x7fff_ffff) + // (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxI8) + // (d: MaxI8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i33 i64) + (-0x0000000100000000 ..= 0x00000000ffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxI1, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxI1, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i34 i64) + (-0x0000000200000000 ..= 0x00000001ffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxI2, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxI2, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i35 i64) + (-0x0000000400000000 ..= 0x00000003ffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxI3, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxI3, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i36 i64) + (-0x0000000800000000 ..= 0x00000007ffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxI4, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxI4, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i37 i64) + (-0x0000001000000000 ..= 0x0000000fffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxI5, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxI5, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i38 i64) + (-0x0000002000000000 ..= 0x0000001fffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxI6, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxI6, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i39 i64) + (-0x0000004000000000 ..= 0x0000003fffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxI7, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxI7, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i40 i64) + (-0x0000008000000000 ..= 0x0000007fffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxI8, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxI8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i41 i64) + (-0x0000010000000000 ..= 0x000000ffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxI1, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI1, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i42 i64) + (-0x0000020000000000 ..= 0x000001ffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxI2, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI2, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i43 i64) + (-0x0000040000000000 ..= 0x000003ffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxI3, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI3, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i44 i64) + (-0x0000080000000000 ..= 0x000007ffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxI4, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI4, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i45 i64) + (-0x0000100000000000 ..= 0x00000fffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxI5, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI5, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i46 i64) + (-0x0000200000000000 ..= 0x00001fffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxI6, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI6, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i47 i64) + (-0x0000400000000000 ..= 0x00003fffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxI7, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxI7, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i48 i64) + (-0x0000800000000000 ..= 0x00007fffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxI8, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i49 i64) + (-0x0001000000000000 ..= 0x0000ffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxI1, h: MaxI1) + (h: MaxI1, g: MaxI1, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i50 i64) + (-0x0002000000000000 ..= 0x0001ffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxI2, h: MaxI1) + (h: MaxI1, g: MaxI2, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i51 i64) + (-0x0004000000000000 ..= 0x0003ffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxI3, h: MaxI1) + (h: MaxI1, g: MaxI3, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i52 i64) + (-0x0008000000000000 ..= 0x0007ffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxI4, h: MaxI1) + (h: MaxI1, g: MaxI4, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i53 i64) + (-0x0010000000000000 ..= 0x000fffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxI5, h: MaxI1) + (h: MaxI1, g: MaxI5, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i54 i64) + (-0x0020000000000000 ..= 0x001fffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxI6, h: MaxI1) + (h: MaxI1, g: MaxI6, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i55 i64) + (-0x0040000000000000 ..= 0x003fffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxI7, h: MaxI1) + (h: MaxI1, g: MaxI7, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i56 i64) + (-0x0080000000000000 ..= 0x007fffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxI8, h: MaxI1) + (h: MaxI1, g: MaxI8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i57 i64) + (-0x0100000000000000 ..= 0x00ffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxI1) + (h: MaxI1, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i58 i64) + (-0x0200000000000000 ..= 0x01ffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxI2) + (h: MaxI2, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i59 i64) + (-0x0400000000000000 ..= 0x03ffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxI3) + (h: MaxI3, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i60 i64) + (-0x0800000000000000 ..= 0x07ffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxI4) + (h: MaxI4, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i61 i64) + (-0x1000000000000000 ..= 0x0fffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxI5) + (h: MaxI5, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i62 i64) + (-0x2000000000000000 ..= 0x1fffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxI6) + (h: MaxI6, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i63 i64) + (-0x4000000000000000 ..= 0x3fffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxI7) + (h: MaxI7, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + // (i64 i64) + // (-0x8000000000000000 ..= 0x7fffffffffffffff) + // (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxI8) + // (h: MaxI8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i65 i128) + (-0x00000000000000010000000000000000 ..= 0x0000000000000000ffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxI1, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxI1, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i66 i128) + (-0x00000000000000020000000000000000 ..= 0x0000000000000001ffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxI2, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxI2, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i67 i128) + (-0x00000000000000040000000000000000 ..= 0x0000000000000003ffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxI3, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxI3, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i68 i128) + (-0x00000000000000080000000000000000 ..= 0x0000000000000007ffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxI4, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxI4, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i69 i128) + (-0x00000000000000100000000000000000 ..= 0x000000000000000fffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxI5, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxI5, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i70 i128) + (-0x00000000000000200000000000000000 ..= 0x000000000000001fffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxI6, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxI6, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i71 i128) + (-0x00000000000000400000000000000000 ..= 0x000000000000003fffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxI7, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxI7, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i72 i128) + (-0x00000000000000800000000000000000 ..= 0x000000000000007fffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxI8, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxI8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i73 i128) + (-0x00000000000001000000000000000000 ..= 0x00000000000000ffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxI1, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI1, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i74 i128) + (-0x00000000000002000000000000000000 ..= 0x00000000000001ffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxI2, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI2, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i75 i128) + (-0x00000000000004000000000000000000 ..= 0x00000000000003ffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxI3, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI3, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i76 i128) + (-0x00000000000008000000000000000000 ..= 0x00000000000007ffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxI4, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI4, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i77 i128) + (-0x00000000000010000000000000000000 ..= 0x0000000000000fffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxI5, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI5, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i78 i128) + (-0x00000000000020000000000000000000 ..= 0x0000000000001fffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxI6, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI6, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i79 i128) + (-0x00000000000040000000000000000000 ..= 0x0000000000003fffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxI7, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI7, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i80 i128) + (-0x00000000000080000000000000000000 ..= 0x0000000000007fffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxI8, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxI8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i81 i128) + (-0x00000000000100000000000000000000 ..= 0x000000000000ffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxI1, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI1, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i82 i128) + (-0x00000000000200000000000000000000 ..= 0x000000000001ffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxI2, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI2, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i83 i128) + (-0x00000000000400000000000000000000 ..= 0x000000000003ffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxI3, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI3, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i84 i128) + (-0x00000000000800000000000000000000 ..= 0x000000000007ffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxI4, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI4, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i85 i128) + (-0x00000000001000000000000000000000 ..= 0x00000000000fffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxI5, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI5, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i86 i128) + (-0x00000000002000000000000000000000 ..= 0x00000000001fffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxI6, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI6, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i87 i128) + (-0x00000000004000000000000000000000 ..= 0x00000000003fffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxI7, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI7, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i88 i128) + (-0x00000000008000000000000000000000 ..= 0x00000000007fffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxI8, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxI8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i89 i128) + (-0x00000000010000000000000000000000 ..= 0x0000000000ffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxI1, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI1, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i90 i128) + (-0x00000000020000000000000000000000 ..= 0x0000000001ffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxI2, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI2, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i91 i128) + (-0x00000000040000000000000000000000 ..= 0x0000000003ffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxI3, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI3, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i92 i128) + (-0x00000000080000000000000000000000 ..= 0x0000000007ffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxI4, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI4, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i93 i128) + (-0x00000000100000000000000000000000 ..= 0x000000000fffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxI5, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI5, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i94 i128) + (-0x00000000200000000000000000000000 ..= 0x000000001fffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxI6, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI6, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i95 i128) + (-0x00000000400000000000000000000000 ..= 0x000000003fffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxI7, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI7, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i96 i128) + (-0x00000000800000000000000000000000 ..= 0x000000007fffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxI8, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxI8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i97 i128) + (-0x00000001000000000000000000000000 ..= 0x00000000ffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxI1, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI1, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i98 i128) + (-0x00000002000000000000000000000000 ..= 0x00000001ffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxI2, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI2, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i99 i128) + (-0x00000004000000000000000000000000 ..= 0x00000003ffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxI3, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI3, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i100 i128) + (-0x00000008000000000000000000000000 ..= 0x00000007ffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxI4, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI4, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i101 i128) + (-0x00000010000000000000000000000000 ..= 0x0000000fffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxI5, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI5, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i102 i128) + (-0x00000020000000000000000000000000 ..= 0x0000001fffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxI6, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI6, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i103 i128) + (-0x00000040000000000000000000000000 ..= 0x0000003fffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxI7, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI7, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i104 i128) + (-0x00000080000000000000000000000000 ..= 0x0000007fffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxI8, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxI8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i105 i128) + (-0x00000100000000000000000000000000 ..= 0x000000ffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxI1, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI1, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i106 i128) + (-0x00000200000000000000000000000000 ..= 0x000001ffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxI2, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI2, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i107 i128) + (-0x00000400000000000000000000000000 ..= 0x000003ffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxI3, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI3, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i108 i128) + (-0x00000800000000000000000000000000 ..= 0x000007ffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxI4, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI4, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i109 i128) + (-0x00001000000000000000000000000000 ..= 0x00000fffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxI5, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI5, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i110 i128) + (-0x00002000000000000000000000000000 ..= 0x00001fffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxI6, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI6, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i111 i128) + (-0x00004000000000000000000000000000 ..= 0x00003fffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxI7, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI7, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i112 i128) + (-0x00008000000000000000000000000000 ..= 0x00007fffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxI8, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxI8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i113 i128) + (-0x00010000000000000000000000000000 ..= 0x0000ffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxI1, p: MaxI1) + (p: MaxI1, o: MaxI1, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i114 i128) + (-0x00020000000000000000000000000000 ..= 0x0001ffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxI2, p: MaxI1) + (p: MaxI1, o: MaxI2, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i115 i128) + (-0x00040000000000000000000000000000 ..= 0x0003ffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxI3, p: MaxI1) + (p: MaxI1, o: MaxI3, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i116 i128) + (-0x00080000000000000000000000000000 ..= 0x0007ffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxI4, p: MaxI1) + (p: MaxI1, o: MaxI4, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i117 i128) + (-0x00100000000000000000000000000000 ..= 0x000fffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxI5, p: MaxI1) + (p: MaxI1, o: MaxI5, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i118 i128) + (-0x00200000000000000000000000000000 ..= 0x001fffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxI6, p: MaxI1) + (p: MaxI1, o: MaxI6, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i119 i128) + (-0x00400000000000000000000000000000 ..= 0x003fffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxI7, p: MaxI1) + (p: MaxI1, o: MaxI7, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i120 i128) + (-0x00800000000000000000000000000000 ..= 0x007fffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxI8, p: MaxI1) + (p: MaxI1, o: MaxI8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i121 i128) + (-0x01000000000000000000000000000000 ..= 0x00ffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxI1) + (p: MaxI1, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i122 i128) + (-0x02000000000000000000000000000000 ..= 0x01ffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxI2) + (p: MaxI2, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i123 i128) + (-0x04000000000000000000000000000000 ..= 0x03ffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxI3) + (p: MaxI3, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i124 i128) + (-0x08000000000000000000000000000000 ..= 0x07ffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxI4) + (p: MaxI4, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i125 i128) + (-0x10000000000000000000000000000000 ..= 0x0fffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxI5) + (p: MaxI5, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i126 i128) + (-0x20000000000000000000000000000000 ..= 0x1fffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxI6) + (p: MaxI6, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + (i127 i128) + (-0x40000000000000000000000000000000 ..= 0x3fffffffffffffffffffffffffffffff) + (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxI7) + (p: MaxI7, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) + + // (i128 i128) + // (-0x80000000000000000000000000000000 ..= 0x7fffffffffffffffffffffffffffffff) + // (a: MaxU8, b: MaxU8, c: MaxU8, d: MaxU8, e: MaxU8, f: MaxU8, g: MaxU8, h: MaxU8, i: MaxU8, j: MaxU8, k: MaxU8, l: MaxU8, m: MaxU8, n: MaxU8, o: MaxU8, p: MaxI8) + // (p: MaxI8, o: MaxU8, n: MaxU8, m: MaxU8, l: MaxU8, k: MaxU8, j: MaxU8, i: MaxU8, h: MaxU8, g: MaxU8, f: MaxU8, e: MaxU8, d: MaxU8, c: MaxU8, b: MaxU8, a: MaxU8) +}