poulpy/poulpy-hal/src/test_suite/serialization.rs
poulpy-hal/src/test_suite/serialization.rsRaw
1use std::fmt::Debug;
2
3use crate::{
4 layouts::{FillUniform, ReaderFrom, WriterTo},
5 source::Source,
6};
7
8/// Generic test for serialization and deserialization.
9///
10/// - `T` must implement I/O traits, zeroing, cloning, and random filling.
11pub fn test_reader_writer_interface<T>(mut original: T)
12where
13 T: WriterTo + ReaderFrom + PartialEq + Eq + Debug + Clone + FillUniform,
14{
15 // Fill original with uniform random data
16 let mut source = Source::new([0u8; 32]);
17 original.fill_uniform(50, &mut source);
18
19 // Serialize into a buffer
20 let mut buffer = Vec::new();
21 original.write_to(&mut buffer).expect("write_to failed");
22
23 // Prepare receiver: same shape, but randomized
24 let mut receiver = original.clone();
25 receiver.fill_uniform(50, &mut source);
26
27 // Deserialize from buffer
28 let mut reader: &[u8] = &buffer;
29 receiver.read_from(&mut reader).expect("read_from failed");
30
31 // Ensure serialization round-trip correctness
32 assert_eq!(&original, &receiver, "Deserialized object does not match the original");
33}
34
35#[test]
36fn scalar_znx_serialize() {
37 let original: crate::layouts::ScalarZnx<Vec<u8>> = crate::layouts::ScalarZnx::alloc(1024, 3);
38 test_reader_writer_interface(original);
39}
40
41#[test]
42fn vec_znx_serialize() {
43 let original: crate::layouts::VecZnx<Vec<u8>> = crate::layouts::VecZnx::alloc(1024, 3, 4);
44 test_reader_writer_interface(original);
45}
46
47#[test]
48fn mat_znx_serialize() {
49 let original: crate::layouts::MatZnx<Vec<u8>> = crate::layouts::MatZnx::alloc(1024, 3, 2, 2, 4);
50 test_reader_writer_interface(original);
51}