Skip to main content

superinstance_ffi/
laman.rs

1/// Laman graph edge count: 2v - 3
2#[no_mangle]
3pub extern "C" fn si_laman_edges(v: i32) -> i32 {
4    2 * v - 3
5}
6
7/// Check if a graph with v vertices and e edges is rigid (Laman condition)
8#[no_mangle]
9pub extern "C" fn si_is_rigid(v: i32, e: i32) -> bool {
10    e >= 2 * v - 3
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16
17    #[test]
18    fn test_laman_edges_min() {
19        assert_eq!(si_laman_edges(2), 1);
20    }
21
22    #[test]
23    fn test_laman_edges_triangle() {
24        assert_eq!(si_laman_edges(3), 3);
25    }
26
27    #[test]
28    fn test_is_rigid_true() {
29        assert!(si_is_rigid(4, 5)); // 2*4-3 = 5
30    }
31
32    #[test]
33    fn test_is_rigid_false() {
34        assert!(!si_is_rigid(4, 4)); // 2*4-3 = 5, 4 < 5
35    }
36
37    #[test]
38    fn test_is_rigid_exactly() {
39        assert!(si_is_rigid(5, 7)); // 2*5-3 = 7
40    }
41}