Skip to content
Snippets Groups Projects
Select Git revision
  • b0a519004be5aaa761ef38bbcc0950b9e547512f
  • master default protected
2 results

tri_select_ebauche.c

Blame
  • Forked from algorithmique / cours
    Source project has a limited visibility.
    lib.rs 1.67 KiB
    /*!
    Part06 illustrates the concepts of **Ownership** and **Borrowing**. It also
    presents [Clone] and [Copy] traits through derive.
    */
    
    const SIZE: usize = 9;
    
    pub mod io;
    mod minimum;
    pub mod something_or_nothing;
    
    #[cfg(test)]
    mod tests {
        use crate::minimum::Minimum;
        use crate::something_or_nothing::{find_min, SomethingOrNothing};
    
        #[test]
        fn test_creation() {
            let n1: SomethingOrNothing<i32> = SomethingOrNothing::default();
            assert!(n1 == SomethingOrNothing::Nothing);
            let n2: SomethingOrNothing<i32> = SomethingOrNothing::Something(1);
            assert!(n2 == SomethingOrNothing::Something(1));
        }
    
        #[test]
        #[should_panic]
        fn test_failure_creation() {
            let n2: SomethingOrNothing<i32> = SomethingOrNothing::Something(1);
            assert!(n2 == SomethingOrNothing::Nothing);
            assert!(n2 == SomethingOrNothing::Something(2));
        }
    
        #[test]
        fn test_min() {
            let a = [1, 5, -1, 2, 0, 10, 11, 0, 3];
            let min = find_min(&a);
            assert!(min == SomethingOrNothing::Something(-1));
        }
    
        #[test]
        fn test_min_i32() {
            let x = 5;
            let y = 10;
            assert_eq!(Minimum::min(x, y), x);
            assert_eq!(Minimum::min(y, x), x);
            assert_eq!(Minimum::min(x, x), x);
            assert_eq!(Minimum::min(y, y), y);
        }
    
        #[test]
        fn test_min_something_or_nothing() {
            let x = SomethingOrNothing::Something(5i32);
            let y = SomethingOrNothing::Something(10i32);
            let z = SomethingOrNothing::Nothing;
            assert!(x.min(y) == x);
            assert!(y.min(x) == x);
            assert!(z.min(y) == y);
            assert!(y.min(z) == y);
            assert!(z.min(z) == z);
        }
    }