vet/src/tests.rs

58 lines
1.1 KiB
Rust
Raw Normal View History

2022-07-09 13:06:29 -07:00
use super::*;
#[derive(Debug, PartialEq)]
struct EvenUsize(usize);
#[derive(Debug)]
struct OddUsize;
impl Vet for EvenUsize {
type VetError = OddUsize;
fn is_valid(&self) -> Result<(), Self::VetError> {
if self.0 % 2 == 0 {
Ok(())
} else {
Err(OddUsize)
}
}
}
#[test]
fn vet_type() {
let foo = EvenUsize(2);
assert!(foo.is_valid().is_ok());
let foo = EvenUsize(3);
assert!(foo.is_valid().is_err());
}
#[test]
fn vet_option() {
let foo = None::<EvenUsize>;
assert!(foo.is_valid().is_ok());
let foo = Some(EvenUsize(4));
assert!(foo.is_valid().is_ok());
let foo = Some(EvenUsize(5));
assert!(foo.is_valid().is_err());
}
#[test]
#[cfg(feature = "alloc")]
fn vet_vec() {
use alloc::{vec, vec::Vec};
let foo = Vec::<EvenUsize>::new();
assert!(foo.is_valid().is_ok());
let foo = vec![EvenUsize(8)];
assert!(foo.is_valid().is_ok());
let foo = vec![EvenUsize(7)];
assert!(foo.is_valid().is_err());
let foo = vec![EvenUsize(8), EvenUsize(7)];
assert!(foo.is_valid().is_err());
}