poulpy/poulpy-hal/src/tests/vec_znx/encoding.rs
poulpy-hal/src/tests/vec_znx/encoding.rsRaw
1use crate::{
2 layouts::{VecZnx, ZnxInfos, ZnxViewMut},
3 source::Source,
4};
5
6pub fn test_vec_znx_encode_vec_i64_lo_norm() {
7 let n: usize = 32;
8 let basek: usize = 17;
9 let size: usize = 5;
10 let k: usize = size * basek - 5;
11 let mut a: VecZnx<Vec<u8>> = VecZnx::alloc(n, 2, size);
12 let mut source: Source = Source::new([0u8; 32]);
13 let raw: &mut [i64] = a.raw_mut();
14 raw.iter_mut().enumerate().for_each(|(i, x)| *x = i as i64);
15 (0..a.cols()).for_each(|col_i| {
16 let mut have: Vec<i64> = vec![i64::default(); n];
17 have.iter_mut()
18 .for_each(|x| *x = (source.next_i64() << 56) >> 56);
19 a.encode_vec_i64(basek, col_i, k, &have, 10);
20 let mut want: Vec<i64> = vec![i64::default(); n];
21 a.decode_vec_i64(basek, col_i, k, &mut want);
22 assert_eq!(have, want, "{:?} != {:?}", &have, &want);
23 });
24}
25
26pub fn test_vec_znx_encode_vec_i64_hi_norm() {
27 let n: usize = 32;
28 let basek: usize = 17;
29 let size: usize = 5;
30 for k in [1, basek / 2, size * basek - 5] {
31 let mut a: VecZnx<Vec<u8>> = VecZnx::alloc(n, 2, size);
32 let mut source = Source::new([0u8; 32]);
33 let raw: &mut [i64] = a.raw_mut();
34 raw.iter_mut().enumerate().for_each(|(i, x)| *x = i as i64);
35 (0..a.cols()).for_each(|col_i| {
36 let mut have: Vec<i64> = vec![i64::default(); n];
37 have.iter_mut().for_each(|x| {
38 if k < 64 {
39 *x = source.next_u64n(1 << k, (1 << k) - 1) as i64;
40 } else {
41 *x = source.next_i64();
42 }
43 });
44 a.encode_vec_i64(basek, col_i, k, &have, 63);
45 let mut want: Vec<i64> = vec![i64::default(); n];
46 a.decode_vec_i64(basek, col_i, k, &mut want);
47 assert_eq!(have, want, "{:?} != {:?}", &have, &want);
48 })
49 }
50}