use super::*;
use crate::constants::{
SEGMENT_LENGTH_UM, SEGMENT_LENGTH_VOXELS, TICK_DURATION_US, VOXEL_SIZE_UM, V_SEG,
};
#[test]
fn valid_config_from_spec() {
let p = compute_derived_physics(0.5, 100, 25.0, 2).unwrap();
assert_eq!(p.signal_speed_um_tick, 50);
assert_eq!(p.segment_length_um, 50);
assert_eq!(p.v_seg, 1);
}
#[test]
fn derived_matches_compile_time_constants() {
let p = compute_derived_physics(
0.5,
TICK_DURATION_US,
VOXEL_SIZE_UM as f32,
SEGMENT_LENGTH_VOXELS,
)
.unwrap();
assert_eq!(
p.v_seg, V_SEG,
"runtime v_seg must match compile-time V_SEG"
);
assert_eq!(
p.segment_length_um, SEGMENT_LENGTH_UM,
"runtime segment_length_um must match SEGMENT_LENGTH_UM"
);
}
#[test]
fn non_divisible_speed_returns_err() {
let result = compute_derived_physics(0.1, 100, 30.0, 1);
assert!(result.is_err(), "should be error 1.6");
let msg = result.unwrap_err();
assert!(msg.contains("1.6"), "message should refer to 1.6: {msg}");
}
#[test]
fn v_seg_two_is_valid() {
let p = compute_derived_physics(1.0, 100, 25.0, 2).unwrap();
assert_eq!(p.v_seg, 2);
}
#[test]
fn zero_segment_length_is_err() {
let result = compute_derived_physics(0.5, 100, 0.0, 2);
assert!(result.is_err());
}