use core::iter::Step;
#[inline(always)]
pub(crate) fn max_value<T: Copy + Default + Step>(_val: &T) -> usize {
if Step::forward_checked(T::default(), usize::MAX).is_some() {
usize::MAX
} else if Step::forward_checked(T::default(), u128::MAX as usize).is_some() {
u128::MAX as usize
} else if Step::forward_checked(T::default(), u64::MAX as usize).is_some() {
u64::MAX as usize
} else if Step::forward_checked(T::default(), u32::MAX as usize).is_some() {
u32::MAX as usize
} else if Step::forward_checked(T::default(), u16::MAX as usize).is_some() {
u16::MAX as usize
} else if Step::forward_checked(T::default(), u8::MAX as usize).is_some() {
u8::MAX as usize
} else if Step::forward_checked(T::default(), isize::MAX as usize).is_some() {
isize::MAX as usize
} else if Step::forward_checked(T::default(), i128::MAX as usize).is_some() {
i128::MAX as usize
} else if Step::forward_checked(T::default(), i64::MAX as usize).is_some() {
i64::MAX as usize
} else if Step::forward_checked(T::default(), i32::MAX as usize).is_some() {
i32::MAX as usize
} else if Step::forward_checked(T::default(), i16::MAX as usize).is_some() {
i16::MAX as usize
} else if Step::forward_checked(T::default(), i8::MAX as usize).is_some() {
i8::MAX as usize
} else {
Default::default()
}
}