#![allow(unsafe_code)]
pub(super) fn report_bool(out: *mut bool, value: Option<bool>) -> bool {
match value {
Some(v) => {
if !out.is_null() {
unsafe { *out = v };
}
true
}
None => false,
}
}
pub(super) fn report_i32(out: *mut i32, value: Option<i32>) -> bool {
match value {
Some(v) => {
if !out.is_null() {
unsafe { *out = v };
}
true
}
None => false,
}
}
pub(super) fn report_u64(out: *mut u64, value: Option<u64>) -> bool {
match value {
Some(v) => {
if !out.is_null() {
unsafe { *out = v };
}
true
}
None => false,
}
}
pub(super) fn report_f64(out: *mut f64, value: Option<f64>) -> bool {
match value {
Some(v) => {
if !out.is_null() {
unsafe { *out = v };
}
true
}
None => false,
}
}
#[cfg(test)]
mod tests {
use super::{report_bool, report_f64, report_i32, report_u64};
#[test]
fn report_bool_writes_and_signals_handled() {
let mut out = false;
assert!(report_bool(&raw mut out, Some(true)));
assert!(out);
}
#[test]
fn report_bool_none_leaves_buffer_and_signals_unhandled() {
let mut out = true;
assert!(!report_bool(&raw mut out, None));
assert!(out);
}
#[test]
fn report_i32_writes_and_signals_handled() {
let mut out = 0;
assert!(report_i32(&raw mut out, Some(-5)));
assert_eq!(out, -5);
}
#[test]
fn report_i32_none_leaves_buffer_and_signals_unhandled() {
let mut out = 9;
assert!(!report_i32(&raw mut out, None));
assert_eq!(out, 9);
}
#[test]
fn report_u64_writes_and_signals_handled() {
let mut out = 0;
assert!(report_u64(&raw mut out, Some(42)));
assert_eq!(out, 42);
}
#[test]
fn report_u64_none_leaves_buffer_and_signals_unhandled() {
let mut out = 7;
assert!(!report_u64(&raw mut out, None));
assert_eq!(out, 7);
}
#[test]
fn report_f64_writes_and_signals_handled() {
let mut out = 0.0_f64;
assert!(report_f64(&raw mut out, Some(2.5)));
assert_eq!(out.to_bits(), 2.5_f64.to_bits());
}
#[test]
fn report_f64_none_leaves_buffer_and_signals_unhandled() {
let mut out = 9.0_f64;
assert!(!report_f64(&raw mut out, None));
assert_eq!(out.to_bits(), 9.0_f64.to_bits());
}
#[test]
fn report_helpers_tolerate_null_out() {
assert!(report_bool(core::ptr::null_mut(), Some(true)));
assert!(report_i32(core::ptr::null_mut(), Some(1)));
assert!(report_u64(core::ptr::null_mut(), Some(1)));
assert!(report_f64(core::ptr::null_mut(), Some(1.0)));
}
}