diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -18,3 +18,47 @@ mod ffi include!(concat!(env!("OUT_DIR"), "/bindings.rs")); } + +#[cfg(test)] +mod tests +{ + use std::mem::transmute; + use std::sync::atomic::{AtomicBool, Ordering}; + + use super::*; + + #[test] + fn can_set_and_use_command_function() + { + static HAS_CALLED_FUNC: AtomicBool = AtomicBool::new(false); + + extern "C" fn func(x: GLint, y: GLint, width: GLsizei, height: GLsizei) + { + assert_eq!(x, 123); + assert_eq!(y, 9); + assert_eq!(width, 1920); + assert_eq!(height, 1080); + + HAS_CALLED_FUNC.store(true, Ordering::Relaxed); + } + + unsafe { + functions::glViewport = transmute(func as *const ()); + } + + unsafe { + Viewport(123, 9, 1920, 1080); + } + + assert!(HAS_CALLED_FUNC.load(Ordering::Relaxed)); + } + + #[test] + #[should_panic] + fn no_set_command_function_ptr_panics() + { + unsafe { + AttachShader(2, 30); + } + } +} |