micropelt 1.1.8

Micropelt device communication definitions
Documentation
use super::*;

use base64::Engine as _;

use crate::lorawan::Downlink as _;

#[test]
fn serialise_r_zero() {
    let downlink = DownlinkR {
        user_value: SetValue::ValvePosition(0),
        safety_value: SetValue::AmbientTemperature(0.0),
        ..super::DownlinkR::default()
    };

    let bytes = downlink.serialise().unwrap().payload;

    assert_eq!(vec![0; 6], bytes);
}

#[test]
fn serialise_r_01() {
    let downlink = DownlinkR {
        user_value: SetValue::AmbientTemperature(18.5),
        room_temperature: 17.0,
        safety_value: SetValue::ValvePosition(65),
        radio_communication_interval: RadioCommunicationIntervalR::Minutes120,
        reference_run: false,
    };

    let expected_output = vec![37, 68, 65, 58, 0, 0];

    assert_eq!(expected_output, downlink.serialise().unwrap().payload);
}

#[test]
fn serialise_r_02() {
    let downlink = DownlinkR {
        user_value: SetValue::FlowTemperature(57.5),
        room_temperature: 0.0,
        safety_value: SetValue::FlowTemperature(58.0),
        radio_communication_interval: RadioCommunicationIntervalR::Minutes480,
        reference_run: false,
    };

    let bytes = downlink.serialise().unwrap().payload;

    let b64 = base64::engine::general_purpose::STANDARD.encode(bytes);

    assert_eq!("cwB0RQAA", b64);
}

#[test]
fn serialise_f_zero() {
    let downlink = DownlinkF {
        user_value: SetValue::ValvePosition(0),
        safety_value: SetValue::AmbientTemperature(0.0),
        radio_communication_interval: RadioCommunicationIntervalF::Minutes15,
        k_p: Kp::Kp12,
        reference_run: false,
    };

    let bytes = downlink.serialise().unwrap().payload;

    assert_eq!(vec![0; 6], bytes);
}

#[test]
fn serialise_f_01() {
    let downlink = DownlinkF {
        user_value: SetValue::FlowTemperature(57.5),
        safety_value: SetValue::FlowTemperature(58.0),
        radio_communication_interval: RadioCommunicationIntervalF::Minutes120,
        k_p: Kp::Kp4,
        reference_run: false,
    };

    let bytes = downlink.serialise().unwrap().payload;

    assert_eq!(vec![115, 0, 116, 0b00110101, 0, 0b01000000], bytes);
}

#[test]
fn serialise_4_zero() {
    let downlink = Downlink4 {
        user_value: SetValue::ValvePosition(0),
        room_temperature: 0.0,
        safety_value: SetValue::AmbientTemperature(0.0),
        radio_communication_interval: RadioCommunicationIntervalR::Minutes10,
    };

    let bytes = downlink.serialise().unwrap().payload;

    assert_eq!(vec![0; 4], bytes);
}

#[test]
fn serialise_4_01() {
    let downlink = Downlink4 {
        user_value: SetValue::AmbientTemperature(2.5),
        room_temperature: 16.75,
        safety_value: SetValue::FlowTemperature(76.5),
        radio_communication_interval: RadioCommunicationIntervalR::Minutes120,
    };

    let bytes = downlink.serialise().unwrap().payload;

    assert_eq!(vec![5, 67, 153, 0b00111001], bytes);
}

#[test]
fn test_float_point_two_five_to_bin() {
    assert_eq!(17, float_point_two_five_to_bin(4.25));
}