summaryrefslogtreecommitdiff
path: root/nix-test/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'nix-test/src/lib.rs')
-rw-r--r--nix-test/src/lib.rs33
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>());
}
}
}