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