trait Reverse: PartialEq + Sized {
fn reverse(&self) -> Self;
fn is_palindrome(self) -> bool {
return self == self.reverse();
}
}
impl Reverse for i32 {
fn reverse(self: &Self) -> Self {
let mut x = *self;
let mut revert = 0;
while x > 0 {
revert = revert * 10 + x % 10;
x /= 10;
}
return revert;
}
}
impl Reverse for String {
fn reverse(self: &Self) -> Self {
return self.to_string().chars().rev().collect();
}
}
fn main() {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_回文奇数() {
assert_eq!(12321.is_palindrome(), true);
}
#[test]
fn test_回文偶数() {
assert_eq!(123321.is_palindrome(), true);
}
#[test]
fn test_回文零() {
assert_eq!(0.is_palindrome(), true);
}
#[test]
fn test_回文非() {
assert_eq!((-1).is_palindrome(), false);
}
#[test]
fn test_回文字符串() {
assert_eq!("12321".to_string().is_palindrome(), true);
assert_eq!("123".to_string().is_palindrome(), false);
assert_eq!("".to_string().is_palindrome(), true);
}
}