1
use conjure_cp_essence_parser::parse_essence;
2

            
3
#[test]
4
1
fn parses_sequence_domains_with_size_attributes() {
5
1
    let source = r#"
6
1
language Essence 1.4
7
1
find x : sequence (size 2) of int(1..3)
8
1
find y : sequence (maxSize 2) of int(1..3)
9
1
find z : sequence (minSize 1, maxSize 2) of int(1..3)
10
1
"#;
11
1
    let (model, _) = parse_essence(source).unwrap();
12
1
    let printed = model.to_string();
13
1
    assert!(printed.contains("sequence (size 2) of int(1..3)"));
14
1
    assert!(printed.contains("sequence (maxSize 2) of int(1..3)"));
15
1
    assert!(printed.contains("sequence (minSize 1, maxSize 2) of int(1..3)"));
16
1
}
17

            
18
#[test]
19
1
fn parses_sequence_literals_empty_and_populated() {
20
1
    let source = r#"
21
1
language Essence 1.4
22
1
letting A be sequence()
23
1
letting B be sequence(1, 2, 3)
24
1
"#;
25
1
    let (model, _) = parse_essence(source).unwrap();
26
1
    let printed = model.to_string();
27
1
    assert!(printed.contains("sequence()"));
28
1
    assert!(printed.contains("sequence(1,2,3)"));
29
1
}
30

            
31
#[test]
32
1
fn parses_sequence_domains_with_jectivity_attributes() {
33
1
    let source = r#"
34
1
language Essence 1.4
35
1
find x : sequence (size 2, injective) of int(1..3)
36
1
find y : sequence (maxSize 2, surjective) of int(1..3)
37
1
find z : sequence (size 3, bijective) of int(1..3)
38
1
"#;
39
1
    let (model, _) = parse_essence(source).unwrap();
40
1
    let printed = model.to_string();
41
1
    assert!(printed.contains("sequence (size 2, injective) of int(1..3)"));
42
1
    assert!(printed.contains("sequence (maxSize 2, surjective) of int(1..3)"));
43
1
    assert!(printed.contains("sequence (size 3, bijective) of int(1..3)"));
44
1
}
45

            
46
#[test]
47
1
fn parses_substring_and_subsequence_operators() {
48
1
    let source = r#"
49
1
language Essence 1.4
50
1
find x : sequence (size 2) of int(1..3)
51
1
such that (sequence(1,2) substring x)
52
1
such that (sequence(1,2) subsequence x)
53
1
"#;
54
1
    let (model, _) = parse_essence(source).unwrap();
55
1
    let printed = model.to_string();
56
1
    assert!(printed.contains("sequence(1,2) substring x"));
57
1
    assert!(printed.contains("sequence(1,2) subsequence x"));
58
1
}