cursor-rs 0.1.4

Getter & Setter cursor position on VGA(0xB8000) in freestanding Rust.
Documentation
#![allow(dead_code)]

#[cfg(test)]
mod tests {
    use std::mem::size_of;

    #[test]
    fn test_sizeoftype_equal_sucess() {
        assert_eq!(size_of::<u8>(), 8 / 8);
        assert_eq!(size_of::<i8>(), 8 / 8);

        assert_eq!(size_of::<i16>(), 16 / 8);
        assert_eq!(size_of::<u16>(), 16 / 8);

        assert_eq!(size_of::<i32>(), 32 / 8);
        assert_eq!(size_of::<u32>(), 32 / 8);

        assert_eq!(size_of::<i64>(), 64 / 8);
        assert_eq!(size_of::<u64>(), 64 / 8);

        assert_eq!(size_of::<i128>(), 128 / 8);
        assert_eq!(size_of::<u128>(), 128 / 8);

        assert_eq!(size_of::<f32>(), 32 / 8);
        assert_eq!(size_of::<f64>(), 64 / 8);
    }

    #[test]
    fn test_option_work_success() {
        assert_eq!(1u32.checked_div(0u32), None);
        assert_eq!(10i32.checked_div(3i32), Some(10i32 / 3i32));
        assert_eq!(Some(100).unwrap(), 100);

        #[repr(transparent)]
        struct Sam {
            num: u64,
        }

        assert_eq!(size_of::<Sam>(), size_of::<u64>());

        assert_eq!(size_of::<Option<&()>>(), std::mem::size_of::<&()>());
        assert_eq!(size_of::<Option<fn()>>(), std::mem::size_of::<fn()>());
        assert_eq!(
            size_of::<Option<std::ptr::NonNull<()>>>(),
            std::mem::size_of::<std::ptr::NonNull<()>>()
        );
        assert_eq!(
            size_of::<Option<extern "C" fn()>>(),
            std::mem::size_of::<extern "C" fn()>()
        );

        assert_ne!(
            size_of::<Option<*const ()>>(),
            std::mem::size_of::<*const ()>()
        );

        {
            let o: Option<std::ptr::NonNull<()>> =
                unsafe { std::mem::transmute(std::ptr::null::<()>()) };
            assert_eq!(o, None);
        }

        {
            let num = 2;
            let o: Option<std::ptr::NonNull<i32>> =
                unsafe { std::mem::transmute(&num as *const i32) };

            assert_ne!(o, Some(std::ptr::NonNull::from(&2)));
            assert_eq!(o, Some(std::ptr::NonNull::from(&num)));
        }
    }

    #[test]
    fn test_result_work_success() {
        let rok: Result<i32, &str> = Ok(2);
        let rerr: Result<i32, &str> = Err("Error");

        assert_eq!(rok, Ok(2));
        assert_eq!(rerr, Err("Error"));
    }

    #[test]
    fn test_integer_work_success() {
        assert_eq!(0 + 0, 0);
        assert_eq!(1 + 0, 1);
        assert_eq!(0 + 1, 1);
        assert_eq!(0 + 1, 1 + 0);

        assert_eq!(0 - 0, 0);
        assert_eq!(1 - 0, 1);
        assert_eq!(0 - 1, -1);

        assert_eq!(1 * 0, 0);
        assert_eq!(0 * 1, 0);
        assert_eq!(1 * 0, 0 * 1);
        assert_eq!(1 * 1, 1);

        assert_eq!(1 / 1, 1);
        assert_eq!(1 / 2, 0);
        assert_eq!(1 / 3, 0);

        assert_eq!(1 % 1, 0);
        assert_eq!(1 % 2, 1);
        assert_eq!(1 % 3, 1);
    }

    #[test]
    fn test_float_work_success() {
        assert_eq!(0f32 + 0.0f32, 0f32);
        assert_eq!(1.5f32 + 0.0f32, 1.5f32);
        assert_eq!(0.0f32 + 1.5f32, 1.5f32);
        assert_eq!(0.0f32 + 1.5f32, 1.5f32 + 0.0f32);

        assert_eq!(0.0f64 - 0.0f64, 0f64);
        assert_eq!(1.5f64 - 0.0f64, 1.5f64);
        assert_eq!(0.0f64 - 1.5f64, -1.5f64);

        assert_eq!(1.0f32 * 0.0f32, 0.0f32);
        assert_eq!(0.0f32 * 1.0f32, 0.0f32);
        assert_eq!(1.0f32 * 0.0f32, 0.0f32 * 1.0f32);
        assert_eq!(1.0f32 * 1.0f32, 1.0f32);

        assert_eq!(1.0f64 / 1.0f64, 1.0f64);
        assert_eq!(1.0f64 / 2.0f64, 0.5f64);
    }

    #[test]
    #[allow(useless_ptr_null_checks)]
    fn test_reference_work_success() {
        let r = &100;
        assert_eq!((r as *const i32).is_null(), false);
        assert_eq!(r, &100);
        assert_eq!(*r, 100);
    }
    fn test_pointer_work_success() {
        let p = &100 as *const i32;
        assert_eq!(p.is_null(), false);
        assert_eq!(unsafe { *p }, 100);
    }

    #[test]
    fn test_str_work_success() {
        assert_ne!("AAAAAA", "AAAAAB");

        assert_eq!("".len(), 0usize);
        assert_eq!("AAAAAA".len(), 6usize);
        assert_eq!("AAAAAA".len(), "AAAAAA".len());
        assert_eq!("AAAAAA".len(), "AAAAAB".len());

        {
            let a: &str = "AAAAAA";
            let b: &str = "AAAAAA";
            assert_eq!(a.as_ptr(), b.as_ptr());
            assert_ne!(&a as *const _, &b as *const _);
        }

        {
            static A: &str = "AAAAAA";
            static B: &str = "AAAAAA";
            assert_eq!(A.as_ptr(), B.as_ptr());
            assert_ne!(&A as *const _, &B as *const _);
        }

        {
            let a: &str = "AAAAAA";
            static B: &str = "AAAAAA";
            assert_eq!(a.as_ptr(), B.as_ptr());
            assert_ne!(&a as *const _, &B as *const _);
        }

        {
            const A: &str = "AAAAAA";
            const B: &str = "AAAAAA";
            assert_eq!(A.as_ptr(), B.as_ptr());
            assert_eq!(&A as *const _, &B as *const _);
            assert_ne!(A.as_ptr(), &B as *const _ as *const u8);
        }

        {
            let a: &str = "AAAAAA";
            const B: &str = "AAAAAA";
            assert_eq!(a.as_ptr(), B.as_ptr());
            assert_ne!(&a as *const _, &B as *const _);
            assert_ne!(a.as_ptr(), &B as *const _ as *const u8);
        }
        {
            static A: &str = "AAAAAA";
            const B: &str = "AAAAAA";
            assert_eq!(A.as_ptr(), B.as_ptr());
            assert_ne!(&A as *const _, &B as *const _);
        }
    }
}