1
use std::path::PathBuf;
2
use std::sync::{Arc, RwLock};
3

            
4
use conjure_cp_core::ast::OptimiseDirection;
5
use conjure_cp_core::context::Context;
6
use conjure_cp_essence_parser::parse_essence_file_native;
7

            
8
3
fn workspace_path(relative: &str) -> PathBuf {
9
3
    PathBuf::from(env!("CARGO_MANIFEST_DIR"))
10
3
        .join("../..")
11
3
        .join(relative)
12
3
}
13

            
14
#[test]
15
1
fn parse_savilerow_objective_models() {
16
1
    let context = Arc::new(RwLock::new(Context::default()));
17
1
    let cases = [
18
1
        (
19
1
            workspace_path("test-suite/tests/exhaustive/savilerow/diet/input.essence"),
20
1
            OptimiseDirection::Minimising,
21
1
        ),
22
1
        (
23
1
            workspace_path("test-suite/tests/exhaustive/savilerow/knapsack/input.essence"),
24
1
            OptimiseDirection::Maximising,
25
1
        ),
26
1
        (
27
1
            workspace_path("test-suite/tests/exhaustive/savilerow/graphColouring/input.essence"),
28
1
            OptimiseDirection::Minimising,
29
1
        ),
30
1
    ];
31

            
32
1
    for (path, expected_direction) in cases {
33
3
        let path = path.to_str().unwrap();
34
3
        let model = parse_essence_file_native(path, Arc::clone(&context))
35
            .unwrap_or_else(|err| panic!("failed to parse {path}: {err:?}"));
36
3
        let objective = model
37
3
            .objective
38
3
            .as_ref()
39
            .unwrap_or_else(|| panic!("missing objective in {path}"));
40
3
        assert_eq!(objective.direction, expected_direction, "{path}");
41
    }
42
1
}