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