arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/core/src/glwe/tests/cpu_spqlios/fft64.rs
core/src/glwe/tests/cpu_spqlios/fft64.rsRaw
  1use backend::{
  2    hal::{api::ModuleNew, layouts::Module},
  3    implementation::cpu_spqlios::FFT64,
  4};
  5
  6use crate::glwe::tests::{
  7    generic_automorphism::{test_automorphism, test_automorphism_inplace},
  8    generic_encryption::{test_encrypt_pk, test_encrypt_sk, test_encrypt_sk_compressed, test_encrypt_zero_sk},
  9    generic_external_product::{test_external_product, test_external_product_inplace},
 10    generic_keyswitch::{test_keyswitch, test_keyswitch_inplace},
 11    packing::test_packing,
 12    trace::test_trace_inplace,
 13};
 14
 15#[test]
 16fn encrypt_sk() {
 17    let log_n: usize = 8;
 18    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 19    (1..4).for_each(|rank| {
 20        println!("test encrypt_sk rank: {}", rank);
 21        test_encrypt_sk(&module, 8, 54, 30, 3.2, rank);
 22    });
 23}
 24
 25#[test]
 26fn encrypt_sk_compressed() {
 27    let log_n: usize = 8;
 28    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 29    (1..4).for_each(|rank| {
 30        println!("test encrypt_sk rank: {}", rank);
 31        test_encrypt_sk_compressed(&module, 8, 54, 30, 3.2, rank);
 32    });
 33}
 34
 35#[test]
 36fn encrypt_zero_sk() {
 37    let log_n: usize = 8;
 38    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 39    (1..4).for_each(|rank| {
 40        println!("test encrypt_zero_sk rank: {}", rank);
 41        test_encrypt_zero_sk(&module, 8, 64, 3.2, rank);
 42    });
 43}
 44
 45#[test]
 46fn encrypt_pk() {
 47    let log_n: usize = 8;
 48    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 49    (1..4).for_each(|rank| {
 50        println!("test encrypt_pk rank: {}", rank);
 51        test_encrypt_pk(&module, 8, 64, 64, 3.2, rank)
 52    });
 53}
 54
 55#[test]
 56fn apply() {
 57    let log_n: usize = 8;
 58    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 59    let basek: usize = 12;
 60    let k_in: usize = 45;
 61    let digits: usize = k_in.div_ceil(basek);
 62    (1..4).for_each(|rank_in| {
 63        (1..4).for_each(|rank_out| {
 64            (1..digits + 1).for_each(|di| {
 65                let k_ksk: usize = k_in + basek * di;
 66                let k_out: usize = k_ksk; // better capture noise
 67                println!(
 68                    "test keyswitch digits: {} rank_in: {} rank_out: {}",
 69                    di, rank_in, rank_out
 70                );
 71                test_keyswitch(
 72                    &module, basek, k_out, k_in, k_ksk, di, rank_in, rank_out, 3.2,
 73                );
 74            })
 75        });
 76    });
 77}
 78
 79#[test]
 80fn apply_inplace() {
 81    let log_n: usize = 8;
 82    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 83    let basek: usize = 12;
 84    let k_ct: usize = 45;
 85    let digits: usize = k_ct.div_ceil(basek);
 86    (1..4).for_each(|rank| {
 87        (1..digits + 1).for_each(|di| {
 88            let k_ksk: usize = k_ct + basek * di;
 89            println!("test keyswitch_inplace digits: {} rank: {}", di, rank);
 90            test_keyswitch_inplace(&module, basek, k_ct, k_ksk, di, rank, 3.2);
 91        });
 92    });
 93}
 94
 95#[test]
 96fn automorphism_inplace() {
 97    let log_n: usize = 8;
 98    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 99    let basek: usize = 12;
100    let k_ct: usize = 60;
101    let digits: usize = k_ct.div_ceil(basek);
102    (1..4).for_each(|rank| {
103        (1..digits + 1).for_each(|di| {
104            let k_ksk: usize = k_ct + basek * di;
105            println!("test automorphism_inplace digits: {} rank: {}", di, rank);
106            test_automorphism_inplace(&module, basek, -5, k_ct, k_ksk, di, rank, 3.2);
107        });
108    });
109}
110
111#[test]
112fn automorphism() {
113    let log_n: usize = 8;
114    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
115    let basek: usize = 12;
116    let k_in: usize = 60;
117    let digits: usize = k_in.div_ceil(basek);
118    (1..4).for_each(|rank| {
119        (1..digits + 1).for_each(|di| {
120            let k_ksk: usize = k_in + basek * di;
121            let k_out: usize = k_ksk; // Better capture noise.
122            println!("test automorphism digits: {} rank: {}", di, rank);
123            test_automorphism(&module, basek, -5, k_out, k_in, k_ksk, di, rank, 3.2);
124        })
125    });
126}
127
128#[test]
129fn external_product() {
130    let log_n: usize = 8;
131    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
132    let basek: usize = 12;
133    let k_in: usize = 45;
134    let digits: usize = k_in.div_ceil(basek);
135    (1..4).for_each(|rank| {
136        (1..digits + 1).for_each(|di| {
137            let k_ggsw: usize = k_in + basek * di;
138            let k_out: usize = k_ggsw; // Better capture noise
139            println!("test external_product digits: {} rank: {}", di, rank);
140            test_external_product(&module, basek, k_out, k_in, k_ggsw, di, rank, 3.2);
141        });
142    });
143}
144
145#[test]
146fn external_product_inplace() {
147    let log_n: usize = 8;
148    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
149    let basek: usize = 12;
150    let k_ct: usize = 60;
151    let digits: usize = k_ct.div_ceil(basek);
152    (1..4).for_each(|rank| {
153        (1..digits + 1).for_each(|di| {
154            let k_ggsw: usize = k_ct + basek * di;
155            println!("test external_product digits: {} rank: {}", di, rank);
156            test_external_product_inplace(&module, basek, k_ct, k_ggsw, di, rank, 3.2);
157        });
158    });
159}
160
161#[test]
162fn trace_inplace() {
163    let log_n: usize = 8;
164    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
165    (1..4).for_each(|rank| {
166        println!("test trace_inplace rank: {}", rank);
167        test_trace_inplace(&module, 8, 54, 3.2, rank);
168    });
169}
170
171#[test]
172fn packing() {
173    let log_n: usize = 5;
174    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
175    test_packing(&module);
176}