sunspec_models/
lib.rs

1pub mod models;
2pub mod utils;
3pub mod types;
4
5
6#[cfg(test)]
7mod tests {
8    use crate::models::{SunspecModels, Models, Model, SunspecID};
9    use crate::types::{SunspecTypes, DataTypes};
10
11    #[test]
12    fn convert_model() {
13        let mut new_model = Models::new();
14
15        new_model.models.push(Model::new(1));
16        new_model.models.push(Model::new(213));
17        new_model.models.push(Model::new(65535));
18        
19        let idx = new_model.get_model_index(1).unwrap();
20        new_model.models[idx].update_data("Mn", &DataTypes::new_string("Manufactor teste"));
21        new_model.models[idx].update_data("Md", &DataTypes::new_string("Model"));
22        new_model.models[idx].update_data("Ver", &DataTypes::new_string("ABCD1234"));
23        new_model.models[idx].update_data("Opt", &DataTypes::new_string("Options"));
24    
25        let idx = new_model.get_model_index(213).unwrap();
26        new_model.models[idx].update_data("A", &DataTypes::new_f32(12.5));
27        new_model.models[idx].update_data("Hz", &DataTypes::new_f32(60.05));
28        new_model.models[idx].update_data("PF", &DataTypes::new_f32(0.92));
29    
30        new_model.compute_addr();
31
32        let mut registers: Vec<u16> = new_model.id.into();
33        for model in new_model.models.iter() {
34            let model_tmp = model.clone();
35            registers.extend(Vec::<u16>::from(model_tmp));
36        }
37
38        println!("{:?}", registers);
39        assert_eq!(registers[72], 16712);
40    }
41
42    #[test]
43    fn update_model() {
44        let mut new_model = Models::new();
45
46        new_model.models.push(Model::new(213));
47
48        new_model.models[0].update_data("A", &DataTypes::new_f32(12.5));
49        new_model.models[0].update_data("Hz", &DataTypes::new_f32(60.05));
50        new_model.models[0].update_data("PF", &DataTypes::new_f32(0.92));
51
52        assert_eq!(new_model.models[0].get_f32("Hz").unwrap(), 60.05);
53
54        if let Some(a_idx) = new_model.models[0].get_data_index("Hz") {
55            new_model.models[0].update_data_by_index(a_idx, &DataTypes::new_f32(60.08));
56            assert_eq!(new_model.models[0].get_f32("Hz").unwrap(), 60.08);
57        }
58    }
59
60    #[test]
61    fn convert_sunspec_id() {
62        let id_vec: Vec<u16> = vec![21365, 28243];
63
64        let id: SunspecID = id_vec.into();
65
66        println!("{:?}", id);
67        assert_eq!(id.id[0], 'S' as u8);
68        assert_eq!(id.id[1], 'u' as u8);
69        assert_eq!(id.id[2], 'n' as u8);
70        assert_eq!(id.id[3], 'S' as u8);
71    }
72}