uniform_sensor_compensation/
uniform_sensor_compensation.rs1use ph_surfaces::{AxisLookup, BilinearSurface, UniformAxis};
14
15type Compensation = BilinearSurface<3, 3, UniformAxis<3, 0, 100>, UniformAxis<3, 0, 50>>;
17
18static VALUES: [[i32; 3]; 3] = [[0, 20, 40], [10, 30, 50], [20, 40, 60]];
19
20static SURFACE: Compensation =
21 BilinearSurface::from_axes(UniformAxis::new(), UniformAxis::new(), &VALUES);
22
23static X: [u16; 3] = [0, 100, 200];
25static Y: [u16; 3] = [0, 50, 100];
26static DEFAULT: BilinearSurface<3, 3> = BilinearSurface::new(&X, &Y, &VALUES);
27
28fn main() {
29 assert_eq!(SURFACE.x_knot(0), 0);
31 assert_eq!(SURFACE.x_knot(2), 200);
32 assert_eq!(SURFACE.y_knot(1), 50);
33
34 assert_eq!(SURFACE.evaluate(50, 25), Ok(15));
36 assert_eq!(SURFACE.evaluate(200, 100), Ok(60));
37 for x in [0u16, 50, 100, 199, 200] {
38 for y in [0u16, 25, 50, 99, 100] {
39 assert_eq!(SURFACE.evaluate(x, y), DEFAULT.evaluate(x, y));
40 }
41 }
42
43 assert_eq!(<UniformAxis<3, 0, 100>>::KNOT_BYTES, 0);
44 assert_eq!(<UniformAxis<3, 0, 50>>::KNOT_BYTES, 0);
45 assert_eq!(<UniformAxis<3, 0, 100>>::MAX_SEARCH_COMPARISONS, 0);
46 assert_eq!(Compensation::VALUE_BYTES, 36);
47 assert_eq!(Compensation::PAYLOAD_BYTES, 36);
48 assert_eq!(BilinearSurface::<3, 3>::PAYLOAD_BYTES, 48);
49 assert_eq!(
50 Compensation::HANDLE_BYTES,
51 core::mem::size_of::<Compensation>()
52 );
53}