arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-core/src/tests/implementation/cpu_spqlios/fft64/ggws.rs
poulpy-core/src/tests/implementation/cpu_spqlios/fft64/ggws.rsRaw
  1use poulpy_backend::{
  2    hal::{api::ModuleNew, layouts::Module},
  3    implementation::cpu_spqlios::FFT64,
  4};
  5
  6use crate::tests::generics::{
  7    automorphism::{test_ggsw_automorphism, test_ggsw_automorphism_inplace},
  8    encryption::{test_ggsw_compressed_encrypt_sk, test_ggsw_encrypt_sk},
  9    external_product::{test_ggsw_external_product, test_ggsw_external_product_inplace},
 10    keyswitch::{test_ggsw_keyswitch, test_ggsw_keyswitch_inplace},
 11};
 12
 13#[test]
 14fn ggsw_encrypt_sk() {
 15    let log_n: usize = 8;
 16    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 17    let basek: usize = 12;
 18    let k_ct: usize = 54;
 19    let digits: usize = k_ct / basek;
 20    (1..4).for_each(|rank| {
 21        (1..digits + 1).for_each(|di| {
 22            println!("test_ggsw_encrypt_sk digits: {} rank: {}", di, rank);
 23            test_ggsw_encrypt_sk(&module, basek, k_ct, di, rank, 3.2);
 24        });
 25    });
 26}
 27
 28#[test]
 29fn ggsw_compressed_encrypt_sk() {
 30    let log_n: usize = 8;
 31    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 32    let basek: usize = 12;
 33    let k_ct: usize = 54;
 34    let digits: usize = k_ct / basek;
 35    (1..4).for_each(|rank| {
 36        (1..digits + 1).for_each(|di| {
 37            println!(
 38                "test_ggsw_compressed_encrypt_sk digits: {} rank: {}",
 39                di, rank
 40            );
 41            test_ggsw_compressed_encrypt_sk(&module, basek, k_ct, di, rank, 3.2);
 42        });
 43    });
 44}
 45
 46#[test]
 47fn ggsw_keyswitch() {
 48    let log_n: usize = 8;
 49    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 50    let basek: usize = 12;
 51    let k_in: usize = 54;
 52    let digits: usize = k_in.div_ceil(basek);
 53    (1..4).for_each(|rank| {
 54        (1..digits + 1).for_each(|di| {
 55            let k_ksk: usize = k_in + basek * di;
 56            let k_tsk: usize = k_ksk;
 57            println!("test_ggsw_keyswitch digits: {} rank: {}", di, rank);
 58            let k_out: usize = k_ksk; // Better capture noise.
 59            test_ggsw_keyswitch(&module, basek, k_out, k_in, k_ksk, k_tsk, di, rank, 3.2);
 60        });
 61    });
 62}
 63
 64#[test]
 65fn ggsw_keyswitch_inplace() {
 66    let log_n: usize = 8;
 67    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 68    let basek: usize = 12;
 69    let k_ct: usize = 54;
 70    let digits: usize = k_ct.div_ceil(basek);
 71    (1..4).for_each(|rank| {
 72        (1..digits + 1).for_each(|di| {
 73            let k_ksk: usize = k_ct + basek * di;
 74            let k_tsk: usize = k_ksk;
 75            println!("test_ggsw_keyswitch_inplace digits: {} rank: {}", di, rank);
 76            test_ggsw_keyswitch_inplace(&module, basek, k_ct, k_ksk, k_tsk, di, rank, 3.2);
 77        });
 78    });
 79}
 80
 81#[test]
 82fn ggsw_automorphism() {
 83    let log_n: usize = 8;
 84    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
 85    let basek: usize = 12;
 86    let k_in: usize = 54;
 87    let digits: usize = k_in.div_ceil(basek);
 88    (1..4).for_each(|rank| {
 89        (1..digits + 1).for_each(|di| {
 90            let k_ksk: usize = k_in + basek * di;
 91            let k_tsk: usize = k_ksk;
 92            println!("test_ggsw_automorphism rank: {}", rank);
 93            let k_out: usize = k_ksk; // Better capture noise.
 94            test_ggsw_automorphism(-5, &module, basek, k_out, k_in, k_ksk, k_tsk, di, rank, 3.2);
 95        });
 96    });
 97}
 98
 99#[test]
100fn ggsw_automorphism_inplace() {
101    let log_n: usize = 8;
102    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
103    let basek: usize = 12;
104    let k_ct: usize = 54;
105    let digits: usize = k_ct.div_ceil(basek);
106    (1..4).for_each(|rank| {
107        (1..digits + 1).for_each(|di| {
108            let k_ksk: usize = k_ct + basek * di;
109            let k_tsk: usize = k_ksk;
110            println!("test_ggsw_automorphism_inplace rank: {}", rank);
111            test_ggsw_automorphism_inplace(-5, &module, basek, k_ct, k_ksk, k_tsk, di, rank, 3.2);
112        });
113    });
114}
115
116#[test]
117fn ggsw_external_product() {
118    let log_n: usize = 8;
119    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
120    let basek: usize = 12;
121    let k_in: usize = 60;
122    let digits: usize = k_in.div_ceil(basek);
123    (1..4).for_each(|rank| {
124        (1..digits + 1).for_each(|di| {
125            let k_ggsw: usize = k_in + basek * di;
126            println!("test external_product digits: {} ranks: {}", di, rank);
127            let k_out: usize = k_in; // Better capture noise.
128            test_ggsw_external_product(&module, basek, k_in, k_out, k_ggsw, di, rank, 3.2);
129        });
130    });
131}
132
133#[test]
134fn ggsw_external_product_inplace() {
135    let log_n: usize = 8;
136    let module: Module<FFT64> = Module::<FFT64>::new(1 << log_n);
137    let basek: usize = 12;
138    let k_ct: usize = 60;
139    let digits: usize = k_ct.div_ceil(basek);
140    (1..4).for_each(|rank| {
141        (1..digits).for_each(|di| {
142            let k_ggsw: usize = k_ct + basek * di;
143            println!(
144                "test_ggsw_external_product_inplace digits: {} rank: {}",
145                di, rank
146            );
147            test_ggsw_external_product_inplace(&module, basek, k_ct, k_ggsw, di, rank, 3.2);
148        });
149    });
150}