oxihuman_morph/
body_water_morph.rs1#![allow(dead_code)]
4
5pub struct BodyWaterMorph {
6 pub hydration: f32,
7 pub skin_turgor: f32,
8}
9
10pub fn new_body_water_morph() -> BodyWaterMorph {
11 BodyWaterMorph {
12 hydration: 0.6,
13 skin_turgor: 0.5,
14 }
15}
16
17pub fn body_water_set_hydration(m: &mut BodyWaterMorph, v: f32) {
18 m.hydration = v.clamp(0.0, 1.0);
19}
20
21pub fn body_water_is_dehydrated(m: &BodyWaterMorph) -> bool {
22 m.hydration < 0.3
23}
24
25pub fn body_water_overall_weight(m: &BodyWaterMorph) -> f32 {
26 (m.hydration + m.skin_turgor) * 0.5
27}
28
29pub fn body_water_blend(a: &BodyWaterMorph, b: &BodyWaterMorph, t: f32) -> BodyWaterMorph {
30 let t = t.clamp(0.0, 1.0);
31 BodyWaterMorph {
32 hydration: a.hydration + (b.hydration - a.hydration) * t,
33 skin_turgor: a.skin_turgor + (b.skin_turgor - a.skin_turgor) * t,
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_new() {
43 let m = new_body_water_morph();
45 assert!(m.hydration > 0.0);
46 }
47
48 #[test]
49 fn test_set_hydration() {
50 let mut m = new_body_water_morph();
52 body_water_set_hydration(&mut m, 0.2);
53 assert!((m.hydration - 0.2).abs() < 1e-5);
54 }
55
56 #[test]
57 fn test_is_dehydrated() {
58 let mut m = new_body_water_morph();
60 body_water_set_hydration(&mut m, 0.1);
61 assert!(body_water_is_dehydrated(&m));
62 }
63
64 #[test]
65 fn test_not_dehydrated_by_default() {
66 let m = new_body_water_morph();
68 assert!(!body_water_is_dehydrated(&m));
69 }
70
71 #[test]
72 fn test_blend() {
73 let a = BodyWaterMorph {
75 hydration: 0.0,
76 skin_turgor: 0.0,
77 };
78 let b = BodyWaterMorph {
79 hydration: 1.0,
80 skin_turgor: 1.0,
81 };
82 let c = body_water_blend(&a, &b, 0.5);
83 assert!((c.hydration - 0.5).abs() < 1e-5);
84 }
85}