poulpy/core/src/blind_rotation/test_fft64/lut.rs
core/src/blind_rotation/test_fft64/lut.rsRaw
1use std::vec;
2
3use backend::{FFT64, Module, ZnxView};
4
5use crate::blind_rotation::lut::{DivRound, LookUpTable};
6
7#[test]
8fn standard() {
9 let module: Module<FFT64> = Module::<FFT64>::new(32);
10 let basek: usize = 20;
11 let k_lut: usize = 40;
12 let message_modulus: usize = 16;
13 let extension_factor: usize = 1;
14
15 let scale: usize = (1 << (basek - 1)) / message_modulus;
16
17 let mut f: Vec<i64> = vec![0i64; message_modulus];
18 f.iter_mut()
19 .enumerate()
20 .for_each(|(i, x)| *x = (i as i64) - 8);
21
22 let mut lut: LookUpTable = LookUpTable::alloc(&module, basek, k_lut, extension_factor);
23 lut.set(&module, &f, message_modulus);
24
25 let half_step: i64 = lut.domain_size().div_round(message_modulus << 1) as i64;
26 lut.rotate(half_step);
27
28 let step: usize = lut.domain_size().div_round(message_modulus);
29
30 (0..lut.domain_size()).step_by(step).for_each(|i| {
31 (0..step).for_each(|_| {
32 assert_eq!(
33 f[i / step] % message_modulus as i64,
34 lut.data[0].raw()[0] / scale as i64
35 );
36 lut.rotate(-1);
37 });
38 });
39}
40
41#[test]
42fn extended() {
43 let module: Module<FFT64> = Module::<FFT64>::new(32);
44 let basek: usize = 20;
45 let k_lut: usize = 40;
46 let message_modulus: usize = 16;
47 let extension_factor: usize = 4;
48
49 let scale: usize = (1 << (basek - 1)) / message_modulus;
50
51 let mut f: Vec<i64> = vec![0i64; message_modulus];
52 f.iter_mut()
53 .enumerate()
54 .for_each(|(i, x)| *x = (i as i64) - 8);
55
56 let mut lut: LookUpTable = LookUpTable::alloc(&module, basek, k_lut, extension_factor);
57 lut.set(&module, &f, message_modulus);
58
59 let half_step: i64 = lut.domain_size().div_round(message_modulus << 1) as i64;
60 lut.rotate(half_step);
61
62 let step: usize = lut.domain_size().div_round(message_modulus);
63
64 (0..lut.domain_size()).step_by(step).for_each(|i| {
65 (0..step).for_each(|_| {
66 assert_eq!(
67 f[i / step] % message_modulus as i64,
68 lut.data[0].raw()[0] / scale as i64
69 );
70 lut.rotate(-1);
71 });
72 });
73}