pub mod convolution;
pub mod serialization;
pub mod svp;
pub mod vec_znx;
pub mod vec_znx_big;
pub mod vec_znx_dft;
pub mod vmp;
#[derive(Clone, Copy, Debug)]
pub struct TestParams {
pub size: usize,
pub base2k: usize,
}
#[macro_export]
macro_rules! backend_test_suite {
(
mod $modname:ident,
backend = $backend:ty,
params = $params:expr,
tests = {
$( $(#[$attr:meta])* $test_name:ident => $impl:path ),+ $(,)?
}
) => {
mod $modname {
use poulpy_hal::{api::ModuleNew, layouts::Module, test_suite::TestParams};
use once_cell::sync::Lazy;
static PARAMS: Lazy<TestParams> = Lazy::new(|| $params);
static MODULE: Lazy<Module<$backend>> =
Lazy::new(|| Module::<$backend>::new(PARAMS.size as u64));
$(
$(#[$attr])*
#[test]
fn $test_name() {
($impl)(&*PARAMS, &*MODULE);
}
)+
}
};
}
#[macro_export]
macro_rules! cross_backend_test_suite {
(
mod $modname:ident,
backend_ref = $backend_ref:ty,
backend_test = $backend_test:ty,
params = $params:expr,
tests = {
$( $(#[$attr:meta])* $test_name:ident => $impl:path ),+ $(,)?
}
) => {
mod $modname {
use poulpy_hal::{api::ModuleNew, layouts::Module, test_suite::TestParams};
use once_cell::sync::Lazy;
static PARAMS: Lazy<TestParams> = Lazy::new(|| $params);
static MODULE_REF: Lazy<Module<$backend_ref>> =
Lazy::new(|| Module::<$backend_ref>::new(PARAMS.size as u64));
static MODULE_TEST: Lazy<Module<$backend_test>> =
Lazy::new(|| Module::<$backend_test>::new(PARAMS.size as u64));
$(
$(#[$attr])*
#[test]
fn $test_name() {
($impl)(&*PARAMS, &*MODULE_REF, &*MODULE_TEST);
}
)+
}
};
}