diff options
Diffstat (limited to 'nix-test/src/lib.rs')
-rw-r--r-- | nix-test/src/lib.rs | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/nix-test/src/lib.rs b/nix-test/src/lib.rs index 6cd3a1f4..26d7cd4d 100644 --- a/nix-test/src/lib.rs +++ b/nix-test/src/lib.rs @@ -6,24 +6,41 @@ use std::ffi::CString; use libc::{c_int}; mod ffi { - use libc::{c_int, c_char}; + use libc::{c_int, c_char, size_t}; #[link(name = "nixtest", kind = "static")] extern { pub fn assert_errno_eq(errno: *const c_char) -> c_int; + pub fn size_of(ty: *const c_char) -> size_t; } } -pub fn assert_errno_eq(err: &str, val: c_int) { +pub fn assert_errno_eq(name: &str, actual: c_int) { unsafe { - let name = CString::new(err).unwrap(); - let actual = ffi::assert_errno_eq(name.as_ptr()); + let cstr = CString::new(name).unwrap(); + let expect = ffi::assert_errno_eq(cstr.as_ptr()); - assert!(actual > 0); + assert!(expect > 0, "undefined errno {}", name); - if val != actual { - panic!("incorrect value for errno {}; got={}; expected={}", - err, val, actual); + if actual != expect { + panic!("incorrect value for errno {}; expect={}; actual={}", + name, expect, actual); + } + } +} + +pub fn assert_size_of<T>(name: &str) { + use std::mem; + + unsafe { + let cstr = CString::new(name).unwrap(); + let expect = ffi::size_of(cstr.as_ptr()) as usize; + + assert!(expect > 0, "undefined type {}", name); + + if mem::size_of::<T>() != expect { + panic!("incorrectly sized type; expect={}; actual={}", + expect, mem::size_of::<T>()); } } } |