40 lines
740 B
Rust
40 lines
740 B
Rust
// Define a trait named `IsEven` that has a method `is_even` that returns a `true` if `self` is
|
|
// even, otherwise `false`.
|
|
//
|
|
// Then implement the trait for `u32` and `i32`.
|
|
|
|
trait IsEven {
|
|
fn is_even(self) -> bool;
|
|
}
|
|
|
|
impl IsEven for u32 {
|
|
fn is_even(self) -> bool {
|
|
self % 2 == 0
|
|
}
|
|
}
|
|
|
|
impl IsEven for i32 {
|
|
fn is_even(self) -> bool {
|
|
self % 2 == 0
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_u32_is_even() {
|
|
assert!(42u32.is_even());
|
|
assert!(!43u32.is_even());
|
|
}
|
|
|
|
#[test]
|
|
fn test_i32_is_even() {
|
|
assert!(42i32.is_even());
|
|
assert!(!43i32.is_even());
|
|
assert!(0i32.is_even());
|
|
assert!(!(-1i32).is_even());
|
|
}
|
|
}
|