Skip to main content

sl/
debug.rs

1use crate::smoke::get_smoke_particles;
2
3pub fn debug_smoke_state() -> String {
4    let particles = get_smoke_particles();
5    
6    let mut output = String::from("\n=== SMOKE STATE ===\n");
7    output.push_str(&format!("Total particles: {}\n", particles.len()));
8    
9    for (i, p) in particles.iter().enumerate() {
10        output.push_str(&format!(
11            "  [{}] x={:3} y={:3} pattern={:2} kind={} \n",
12            i, p.x, p.y, p.pattern, p.kind
13        ));
14    }
15    
16    output.push_str("==================\n");
17    output
18}
19
20#[cfg(test)]
21mod tests {
22
23    #[test]
24    fn test_smoke_patterns() {
25        // Verify all 16 patterns are defined
26        let patterns = vec![
27            "(   )", "(    )", "(    )", "(   )", "(  )",
28            "(  )", "( )", "( )", "()", "()",
29            "O", "O", "O", "O", "O", " "
30        ];
31        
32        assert_eq!(patterns.len(), 16, "Must have 16 smoke patterns");
33    }
34
35    #[test]
36    fn test_dy_dx_arrays() {
37        let dy = vec![2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
38        let dx = vec![-2, -1, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3];
39        
40        assert_eq!(dy.len(), 16, "DY array must have 16 elements");
41        assert_eq!(dx.len(), 16, "DX array must have 16 elements");
42        
43        // Verify expected C version values
44        assert_eq!(dy[0], 2, "dy[0] should be 2 (expand upward)");
45        assert_eq!(dx[0], -2, "dx[0] should be -2 (leftward)");
46        assert_eq!(dy[4], 0, "dy[4] should be 0 (contract stops moving up)");
47        assert_eq!(dx[14], 3, "dx[14] should be 3 (rightward at end)");
48    }
49
50    #[test]
51    fn test_eraser_patterns() {
52        let erasers = vec![
53            "     ", "      ", "      ", "     ", "    ",
54            "    ", "   ", "   ", "  ", "  ",
55            " ", " ", " ", " ", " ", " "
56        ];
57        
58        assert_eq!(erasers.len(), 16, "Must have 16 eraser patterns");
59    }
60}