diff options
author | Carl Lerche <me@carllerche.com> | 2015-02-21 14:33:27 -0800 |
---|---|---|
committer | Carl Lerche <me@carllerche.com> | 2015-02-21 14:33:27 -0800 |
commit | 60ccee778b2adca488706c586bd61c5affa90de3 (patch) | |
tree | d8738241a4e5fa8fe02331f33ab190b980d507fd /nix-test/src/lib.rs | |
parent | b2454c9d793dfeb946d5e12f51ad571d32fa9987 (diff) | |
download | nix-60ccee778b2adca488706c586bd61c5affa90de3.zip |
Cleanup readv & writev + tests
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>()); } } } |