diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 31444fc..f34b399 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,5 +20,9 @@ jobs: run: cargo build --no-default-features - name: Build no_std with allocator run: cargo build --no-default-features --features alloc - - name: Run tests - run: cargo test \ No newline at end of file + - name: Test + run: cargo test + - name: Test no_std + run: cargo test --no-default-features + - name: Test no_std with allocator + run: cargo test --no-default-features --features alloc \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 05ce3c8..383964d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -67,6 +67,9 @@ #[cfg(feature = "alloc")] extern crate alloc; +#[cfg(test)] +mod tests; + /// A wrapper around a validated instance #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct Valid(T); diff --git a/src/tests.rs b/src/tests.rs new file mode 100644 index 0000000..a9b9f2a --- /dev/null +++ b/src/tests.rs @@ -0,0 +1,57 @@ +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::; + 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::::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()); +}