#![allow(dead_code)]
#[derive(Debug, Clone)]
pub struct PressureFieldView {
pub enabled: bool,
pub pressure_min: f32,
pub pressure_max: f32,
pub show_isobars: bool,
pub isobar_count: usize,
}
pub fn new_pressure_field_view() -> PressureFieldView {
PressureFieldView {
enabled: false,
pressure_min: 0.0,
pressure_max: 1.0,
show_isobars: false,
isobar_count: 5,
}
}
pub fn pfv_set_enabled(v: &mut PressureFieldView, e: bool) {
v.enabled = e;
}
pub fn pfv_set_pressure_min(v: &mut PressureFieldView, m: f32) {
v.pressure_min = m;
}
pub fn pfv_set_pressure_max(v: &mut PressureFieldView, m: f32) {
v.pressure_max = m;
}
pub fn pfv_set_show_isobars(v: &mut PressureFieldView, s: bool) {
v.show_isobars = s;
}
pub fn pfv_set_isobar_count(v: &mut PressureFieldView, n: usize) {
v.isobar_count = n.max(1);
}
pub fn pfv_normalize(v: &PressureFieldView, pressure: f32) -> f32 {
let range = v.pressure_max - v.pressure_min;
if range.abs() < 1e-9 {
return 0.0;
}
((pressure - v.pressure_min) / range).clamp(0.0, 1.0)
}
pub fn pressure_field_view_to_json(v: &PressureFieldView) -> String {
format!(
r#"{{"enabled":{},"pressure_min":{:.4},"pressure_max":{:.4},"show_isobars":{},"isobar_count":{}}}"#,
v.enabled, v.pressure_min, v.pressure_max, v.show_isobars, v.isobar_count
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_new_defaults() {
let v = new_pressure_field_view();
assert!(!v.enabled);
assert_eq!(v.pressure_min, 0.0);
assert!((v.pressure_max - 1.0).abs() < 1e-6);
}
#[test]
fn test_set_enabled() {
let mut v = new_pressure_field_view();
pfv_set_enabled(&mut v, true);
assert!(v.enabled);
pfv_set_enabled(&mut v, false);
assert!(!v.enabled);
}
#[test]
fn test_set_pressure_min() {
let mut v = new_pressure_field_view();
pfv_set_pressure_min(&mut v, -1.0);
assert!((v.pressure_min - (-1.0)).abs() < 1e-6);
}
#[test]
fn test_set_pressure_max() {
let mut v = new_pressure_field_view();
pfv_set_pressure_max(&mut v, 5.0);
assert!((v.pressure_max - 5.0).abs() < 1e-6);
}
#[test]
fn test_set_show_isobars() {
let mut v = new_pressure_field_view();
pfv_set_show_isobars(&mut v, true);
assert!(v.show_isobars);
}
#[test]
fn test_set_isobar_count() {
let mut v = new_pressure_field_view();
pfv_set_isobar_count(&mut v, 10);
assert_eq!(v.isobar_count, 10);
}
#[test]
fn test_normalize_midpoint() {
let v = new_pressure_field_view();
assert!((pfv_normalize(&v, 0.5) - 0.5).abs() < 1e-6);
}
#[test]
fn test_normalize_clamp() {
let v = new_pressure_field_view();
assert_eq!(pfv_normalize(&v, 2.0), 1.0);
assert_eq!(pfv_normalize(&v, -1.0), 0.0);
}
#[test]
fn test_to_json() {
let v = new_pressure_field_view();
assert!(pressure_field_view_to_json(&v).contains("pressure_min"));
}
#[test]
fn test_clone() {
let v = new_pressure_field_view();
let v2 = v.clone();
assert_eq!(v.isobar_count, v2.isobar_count);
}
}