diff_priv/test/
tests.rs

1use crate::data_manipulation::anonymizable::Anonymizable;
2use crate::test::adult::Adult;
3use crate::test::adult_large::AdultLarge;
4use crate::test::csv_importer::{CsvImporter, EnrichedRow};
5use crate::test::environment::{Dataset, Datasets, Environment};
6
7use crate::config::Config;
8use csv::Reader;
9use serde::de::DeserializeOwned;
10
11/**
12    This file contains the main test architecture to run all the different possible
13    sets of parameters defined in the `application.conf`
14**/
15
16pub fn start_tests(conf_file: &String) {
17    let config = Config::new(conf_file);
18    let environments = prepare_environments(&config);
19    environments.into_iter().for_each(|env| match env.dataset {
20        Datasets::Adult(dataset) => create_test::<Adult>(env, dataset),
21        Datasets::AdultLarge(dataset) => create_test::<AdultLarge>(env, dataset),
22        Datasets::Mueller(dataset) => create_test::<EnrichedRow>(env, dataset),
23    });
24}
25
26fn create_test<A: Anonymizable + DeserializeOwned>(env: Environment, dataset: Dataset) {
27    println!("Reading file {}", dataset.path);
28    let file = Reader::from_path(dataset.path).unwrap();
29    let mut csv_importer = CsvImporter::new(file);
30    match csv_importer.convert::<A>(env) {
31        Ok(_) => {}
32        Err(e) => {
33            println!("{}", e)
34        }
35    }
36}
37
38const DATASETS: [Datasets; 3] = [
39    Datasets::Adult(Dataset {
40        path: "datasets/Adult_1_numeric_only_class_50K.csv",
41        export: "exports/adult",
42    }),
43    Datasets::AdultLarge(Dataset {
44        path: "datasets/Adult_2_numerical_categorical_class_50K_drift.csv",
45        export: "exports/adultLarge",
46    }),
47    Datasets::Mueller(Dataset {
48        path: "datasets/steps-converted.csv",
49        export: "exports/steps",
50    }),
51];
52
53fn prepare_environments(config: &Config) -> Vec<Environment> {
54    let mut environments: Vec<Environment> = vec![];
55    DATASETS.iter().copied().for_each(|dataset| {
56        config.k.iter().copied().for_each(|k| {
57            config.l.iter().copied().for_each(|l| {
58                config.c.iter().copied().for_each(|c| {
59                    config.diff_thres.iter().copied().for_each(|diff_thres| {
60                        config.eps.iter().copied().for_each(|eps| {
61                            config.delta.iter().copied().for_each(|delta| {
62                                config.noise_thr.iter().copied().for_each(|noise_thr| {
63                                    environments.push(Environment::new(
64                                        k,
65                                        k * 4,
66                                        l,
67                                        c,
68                                        diff_thres,
69                                        eps,
70                                        delta as u128,
71                                        noise_thr,
72                                        dataset,
73                                        config.publish_remaining_tuples,
74                                    ))
75                                })
76                            })
77                        })
78                    })
79                })
80            })
81        })
82    });
83
84    environments
85}