// Copyright © 2024 Mikhail Hogrefe // // This file is part of Malachite. // // Malachite is free software: you can redistribute it and/or modify it under the terms of the GNU // Lesser General Public License (LGPL) as published by the Free Software Foundation; either version // 3 of the License, or (at your option) any later version. See . use malachite_base::num::basic::integers::PrimitiveInt; use malachite_base::num::basic::signeds::PrimitiveSigned; use malachite_base::num::basic::unsigneds::PrimitiveUnsigned; use malachite_base::num::conversion::traits::{OverflowingFrom, WrappingFrom}; use malachite_base::test_util::generators::{signed_gen, unsigned_gen}; use std::fmt::Debug; #[test] pub fn test_wrapping_from() { fn test_single>(n: T) { assert_eq!(T::wrapping_from(n), n); } test_single(0u8); test_single(5u64); test_single(1000u32); test_single(123u8); test_single(-123i16); test_single(i64::MIN); test_single(usize::MAX); fn test_double>(n_in: T, n_out: U) { assert_eq!(U::wrapping_from(n_in), n_out); } test_double(0u8, 0u16); test_double(1000u16, 1000i32); test_double(-5i16, -5i8); test_double(255u8, 255u64); test_double(-1i8, u32::MAX); test_double(u32::MAX, u16::MAX); test_double(i32::MIN, 0x80000000u32); test_double(i32::MIN, 0u16); test_double(i32::MIN, 0i16); test_double(-5i32, 0xfffffffbu32); test_double(3000000000u32, -1294967296i32); test_double(-1000i16, 24i8); } fn wrapping_from_helper_primitive_int_unsigned< T: OverflowingFrom + WrappingFrom + PrimitiveInt, U: PrimitiveUnsigned, >() { unsigned_gen::().test_properties(|u| { let result = T::wrapping_from(u); assert_eq!(result, T::overflowing_from(u).0); }); } fn wrapping_from_helper_primitive_int_signed< T: OverflowingFrom + WrappingFrom + PrimitiveInt, U: PrimitiveSigned, >() { signed_gen::().test_properties(|i| { let result = T::wrapping_from(i); assert_eq!(result, T::overflowing_from(i).0); }); } #[test] fn wrapping_from_properties() { apply_fn_to_primitive_ints_and_unsigneds!(wrapping_from_helper_primitive_int_unsigned); apply_fn_to_primitive_ints_and_signeds!(wrapping_from_helper_primitive_int_signed); }