param_opt/
lib.rs

1pub mod parameter;
2pub mod selector;
3
4#[cfg(test)]
5mod tests {
6    use std::collections::HashMap;
7
8    use crate::{
9        parameter::{
10            dataset::{strings::Strings, ParameterDataset},
11            table::ParameterTable,
12        },
13        selector::grid_search::GridSearch,
14    };
15
16    #[test]
17    fn test_param_on_grid() {
18        let mut datasets = HashMap::new();
19        let dataset = ParameterDataset::Strings(
20            Strings::new(
21                ["foo", "bar"]
22                    .into_iter()
23                    .map(ToString::to_string)
24                    .collect(),
25            )
26            .unwrap(),
27        );
28        datasets.insert(String::from("hello"), dataset);
29        let dataset = ParameterDataset::Strings(
30            Strings::new(["1", "2"].into_iter().map(ToString::to_string).collect()).unwrap(),
31        );
32        datasets.insert(String::from("world"), dataset);
33        let table = ParameterTable::new_unordered(datasets);
34
35        let grid_search = GridSearch::new(table.spaces());
36        for indices in grid_search {
37            for (k, v) in table.values(indices.into_iter()) {
38                print!("({k}, {v}), ");
39            }
40            println!();
41        }
42
43        let mut grid_search = GridSearch::new(table.spaces());
44
45        let indices = grid_search.next().unwrap();
46        assert_eq!(indices, [0, 0]);
47
48        let indices = grid_search.next().unwrap();
49        assert_eq!(indices, [0, 1]);
50
51        let indices = grid_search.next().unwrap();
52        assert_eq!(indices, [1, 0]);
53
54        let indices = grid_search.next().unwrap();
55        assert_eq!(indices, [1, 1]);
56
57        assert!(grid_search.next().is_none());
58    }
59}