dis_rs/common/collision_elastic/
mod.rs1pub mod builder;
2pub mod model;
3pub mod parser;
4pub mod writer;
5
6#[cfg(test)]
7mod tests {
8    use crate::common::collision_elastic::model::CollisionElastic;
9    use crate::common::model::DisTimeStamp;
10    use crate::common::model::{EventId, Pdu, PduHeader, SimulationAddress};
11    use crate::common::parser::parse_pdu;
12    use crate::enumerations::PduType;
13    use bytes::BytesMut;
14
15    #[test]
16    fn collision_elastic_internal_consistency() {
17        let header = PduHeader::new_v6(1, PduType::CollisionElastic);
18
19        let body = CollisionElastic::builder()
20            .with_mass(88.4f32)
21            .with_coefficient_of_restitution(6.43)
22            .with_event_id(EventId::new(SimulationAddress::new(11, 11), 11))
23            .build()
24            .into_pdu_body();
25        let original_pdu =
26            Pdu::finalize_from_parts(header, body, DisTimeStamp::new_absolute_from_secs(100));
27        let pdu_length = original_pdu.header.pdu_length;
28        let original_length = original_pdu.pdu_length();
29
30        let mut buf = BytesMut::with_capacity(pdu_length as usize);
31
32        let serialized_length = original_pdu.serialize(&mut buf).unwrap();
33
34        assert_eq!(original_length, serialized_length);
35
36        let parsed = parse_pdu(&buf);
37        match parsed {
38            Ok(ref pdu) => {
39                assert_eq!(&original_pdu, pdu);
40            }
41            Err(ref err) => {
42                panic!("Parse error: {err}");
43            }
44        }
45    }
46}