#[repr(transparent)]
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub struct LVBool(u8);
pub const LV_FALSE: LVBool = LVBool(0);
pub const LV_TRUE: LVBool = LVBool(1);
impl From<bool> for LVBool {
fn from(value: bool) -> Self {
match value {
true => LV_TRUE,
false => LV_FALSE,
}
}
}
impl From<LVBool> for bool {
fn from(value: LVBool) -> Self {
!matches!(value.0, 0)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_boolean_false_to_lv_bool() {
let value: LVBool = false.into();
assert_eq!(value, LV_FALSE)
}
#[test]
fn test_boolean_true_to_lv_bool() {
let value: LVBool = true.into();
assert_eq!(value, LV_TRUE)
}
#[test]
fn test_boolean_lvfalse_to_bool() {
let value: bool = LV_FALSE.into();
assert!(!value)
}
#[test]
fn test_boolean_lvtrue_to_bool() {
let value: bool = LV_TRUE.into();
assert!(value)
}
#[test]
fn test_any_non_zero_to_bool() {
let value: bool = LVBool(23).into();
assert!(value)
}
#[test]
fn lv_bool_in_if_statement() {
let true_bool: bool = LV_TRUE.into();
let false_bool: bool = LV_FALSE.into();
assert!(true_bool);
assert!(!false_bool);
}
}