pub fn reverse(number: i32) -> i32 { number // Convert to an absolute number without wrapping or panicking. .unsigned_abs() // Convert the number to string, then reverse all its characters. .to_string() .chars() .rev() // Collect the reversed characters back into a string. .collect::() // Parse the string into an i32. .parse() // If it returns an Err then use 0 instead. .unwrap_or(0) // Then multiply by 0, 1 or -1 depending on the sign of the original number. * number.signum() } #[test] fn test_reverse_integer() { assert_eq!(reverse(123), 321); assert_eq!(reverse(-123), -321); assert_eq!(reverse(120), 21); assert_eq!(reverse(i32::MAX), 0); assert_eq!(reverse(i32::MIN), 0); }