arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-backend/src/hal/tests/vec_znx/encoding.rs
poulpy-backend/src/hal/tests/vec_znx/encoding.rsRaw
 1use crate::hal::{
 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}