session_rust/
vector_test.rs

1#[cfg(test)]
2mod tests {
3    use crate::Vector;
4    use std::fs;
5
6    #[test]
7    fn test_vector_constructor() {
8        let vector = Vector::new(1.0, 2.0, 3.0);
9        assert!(!vector.guid.to_string().is_empty());
10        assert_eq!(vector.x, 1.0);
11        assert_eq!(vector.y, 2.0);
12        assert_eq!(vector.z, 3.0);
13    }
14
15    #[test]
16    fn test_vector_equality() {
17        let v1 = Vector::new(1.0, 2.0, 3.0);
18        let mut v2 = Vector::new(1.0, 2.0, 3.0);
19
20        // Set same GUID to make them equal
21        v2.guid = v1.guid.clone();
22        v2.name = v1.name.clone();
23        assert_eq!(v1, v2);
24        assert!(!(v1 != v2));
25
26        let v3 = Vector::new(1.0, 2.0, 3.0);
27        let mut v4 = Vector::new(1.1, 2.0, 3.0);
28        v4.guid = v3.guid.clone();
29        v4.name = v3.name.clone();
30        assert_ne!(v3, v4);
31        assert!(v3 != v4);
32    }
33
34    #[test]
35    fn test_vector_to_json_data() {
36        let mut vector = Vector::new(10.5, 20.7, 30.9);
37        vector.name = "force_vector_X".to_string();
38
39        let json_result = vector.to_json_data();
40        assert!(json_result.is_ok());
41
42        let json_data = json_result.unwrap();
43        assert!(json_data.contains("\"type\": \"Vector\""));
44        assert!(json_data.contains("\"name\": \"force_vector_X\""));
45        assert!(json_data.contains("\"x\": 10.5"));
46        assert!(json_data.contains("\"y\": 20.7"));
47        assert!(json_data.contains("\"z\": 30.9"));
48        assert!(json_data.contains("\"guid\""));
49    }
50
51    #[test]
52    fn test_vector_from_json_data() {
53        let original_vector = Vector::new(45.1, 67.8, 89.2);
54        let json_data = original_vector.to_json_data().unwrap();
55        let restored_vector = Vector::from_json_data(&json_data).unwrap();
56
57        assert_eq!(restored_vector.x, 45.1);
58        assert_eq!(restored_vector.y, 67.8);
59        assert_eq!(restored_vector.z, 89.2);
60        assert_eq!(restored_vector.guid, original_vector.guid);
61    }
62
63    #[test]
64    fn test_vector_to_json_from_json() {
65        let original = Vector::new(100.25, 200.50, 300.75);
66        let filename = "test_vector.json";
67
68        // Save to file
69        let save_result = original.to_json(filename);
70        assert!(save_result.is_ok());
71
72        // Load from file
73        let loaded_result = Vector::from_json(filename);
74        assert!(loaded_result.is_ok());
75
76        let loaded = loaded_result.unwrap();
77        assert_eq!(loaded.x, original.x);
78        assert_eq!(loaded.y, original.y);
79        assert_eq!(loaded.z, original.z);
80        assert_eq!(loaded.name, original.name);
81        assert_eq!(loaded.guid, original.guid);
82
83        // Clean up test file
84        let _ = fs::remove_file(filename);
85    }
86
87    #[test]
88    fn test_vector_default() {
89        let vector = Vector::default();
90        assert_eq!(vector.x, 0.0);
91        assert_eq!(vector.y, 0.0);
92        assert_eq!(vector.z, 0.0);
93        assert!(!vector.guid.to_string().is_empty());
94        assert_eq!(vector.name, "my_vector");
95    }
96
97    #[test]
98    fn test_vector_display() {
99        let vector = Vector::new(1.5, 2.5, 3.5);
100        let display_string = format!("{vector}");
101        assert!(display_string.contains("Vector("));
102        assert!(display_string.contains("1.5"));
103        assert!(display_string.contains("2.5"));
104        assert!(display_string.contains("3.5"));
105        assert!(display_string.contains(&vector.guid.to_string()));
106        assert!(display_string.contains(&vector.name));
107    }
108}