arnaucube
arnaucube/poulpyPublic Self-hosted repository
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}