sunspec_models/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
pub mod models;
pub mod utils;
pub mod types;


#[cfg(test)]
mod tests {
    use crate::models::{SunspecModels, Models, Model, SunspecID};
    use crate::types::{SunspecTypes, DataTypes};

    #[test]
    fn convert_model() {
        let mut new_model = Models::new();

        new_model.models.push(Model::new(1));
        new_model.models.push(Model::new(213));
        new_model.models.push(Model::new(65535));
        
        let idx = new_model.get_model_index(1).unwrap();
        new_model.models[idx].update_data("Mn", &DataTypes::new_string("Manufactor teste"));
        new_model.models[idx].update_data("Md", &DataTypes::new_string("Model"));
        new_model.models[idx].update_data("Ver", &DataTypes::new_string("ABCD1234"));
        new_model.models[idx].update_data("Opt", &DataTypes::new_string("Options"));
    
        let idx = new_model.get_model_index(213).unwrap();
        new_model.models[idx].update_data("A", &DataTypes::new_f32(12.5));
        new_model.models[idx].update_data("Hz", &DataTypes::new_f32(60.05));
        new_model.models[idx].update_data("PF", &DataTypes::new_f32(0.92));
    
        new_model.compute_addr();

        let mut registers: Vec<u16> = new_model.id.into();
        for model in new_model.models.iter() {
            let model_tmp = model.clone();
            registers.extend(Vec::<u16>::from(model_tmp));
        }

        println!("{:?}", registers);
        assert_eq!(registers[72], 16712);
    }

    #[test]
    fn update_model() {
        let mut new_model = Models::new();

        new_model.models.push(Model::new(213));

        new_model.models[0].update_data("A", &DataTypes::new_f32(12.5));
        new_model.models[0].update_data("Hz", &DataTypes::new_f32(60.05));
        new_model.models[0].update_data("PF", &DataTypes::new_f32(0.92));

        assert_eq!(new_model.models[0].get_f32("Hz").unwrap(), 60.05);

        if let Some(a_idx) = new_model.models[0].get_data_index("Hz") {
            new_model.models[0].update_data_by_index(a_idx, &DataTypes::new_f32(60.08));
            assert_eq!(new_model.models[0].get_f32("Hz").unwrap(), 60.08);
        }
    }

    #[test]
    fn convert_sunspec_id() {
        let id_vec: Vec<u16> = vec![21365, 28243];

        let id: SunspecID = id_vec.into();

        println!("{:?}", id);
        assert_eq!(id.id[0], 'S' as u8);
        assert_eq!(id.id[1], 'u' as u8);
        assert_eq!(id.id[2], 'n' as u8);
        assert_eq!(id.id[3], 'S' as u8);
    }
}