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}