1
use mcrl2::data::DataExpression;
2
use mcrl2::data::DataSpecification;
3
use std::cell::RefCell;
4
use std::rc::Rc;
5
use test_case::test_case;
6

            
7
use mcrl2::aterm::TermPool;
8
use sabre::InnermostRewriter;
9
use sabre::RewriteEngine;
10

            
11
18
#[test_case(include_str!("../../../examples/REC/mcrl2/benchexpr10.dataspec"), include_str!("../../../examples/REC/mcrl2/benchexpr10.expressions"), include_str!("snapshot/result_benchexpr10.txt") ; "benchexpr10")]
12
#[test_case(include_str!("../../../examples/REC/mcrl2/benchsym10.dataspec"), include_str!("../../../examples/REC/mcrl2/benchsym10.expressions"), include_str!("snapshot/result_benchsym10.txt") ; "benchsym10")]
13
#[test_case(include_str!("../../../examples/REC/mcrl2/calls.dataspec"), include_str!("../../../examples/REC/mcrl2/calls.expressions"), include_str!("snapshot/result_calls.txt") ; "calls")]
14
#[test_case(include_str!("../../../examples/REC/mcrl2/check1.dataspec"), include_str!("../../../examples/REC/mcrl2/check1.expressions"), include_str!("snapshot/result_check1.txt") ; "check1")]
15
#[test_case(include_str!("../../../examples/REC/mcrl2/check2.dataspec"), include_str!("../../../examples/REC/mcrl2/check2.expressions"), include_str!("snapshot/result_check2.txt") ; "check2")]
16
#[test_case(include_str!("../../../examples/REC/mcrl2/confluence.dataspec"), include_str!("../../../examples/REC/mcrl2/confluence.expressions"), include_str!("snapshot/result_confluence.txt") ; "confluence")]
17
#[test_case(include_str!("../../../examples/REC/mcrl2/fibonacci05.dataspec"), include_str!("../../../examples/REC/mcrl2/fibonacci05.expressions"), include_str!("snapshot/result_fibonacci05.txt") ; "fibonacci05")]
18
#[test_case(include_str!("../../../examples/REC/mcrl2/garbagecollection.dataspec"), include_str!("../../../examples/REC/mcrl2/garbagecollection.expressions"), include_str!("snapshot/result_garbagecollection.txt") ; "garbagecollection")]
19
#[test_case(include_str!("../../../examples/REC/mcrl2/logic3.dataspec"), include_str!("../../../examples/REC/mcrl2/logic3.expressions"), include_str!("snapshot/result_logic3.txt") ; "logic3")]
20
#[test_case(include_str!("../../../examples/REC/mcrl2/merge.dataspec"), include_str!("../../../examples/REC/mcrl2/merge.expressions"), include_str!("snapshot/result_merge.txt") ; "merge")]
21
#[test_case(include_str!("../../../examples/REC/mcrl2/mergesort10.dataspec"), include_str!("../../../examples/REC/mcrl2/mergesort10.expressions"), include_str!("snapshot/result_mergesort10.txt") ; "mergesort10")]
22
#[test_case(include_str!("../../../examples/REC/mcrl2/missionaries2.dataspec"), include_str!("../../../examples/REC/mcrl2/missionaries2.expressions"), include_str!("snapshot/result_missionaries2.txt") ; "missionaries2")]
23
#[test_case(include_str!("../../../examples/REC/mcrl2/missionaries3.dataspec"), include_str!("../../../examples/REC/mcrl2/missionaries3.expressions"), include_str!("snapshot/result_missionaries3.txt") ; "missionaries3")]
24
#[test_case(include_str!("../../../examples/REC/mcrl2/quicksort10.dataspec"), include_str!("../../../examples/REC/mcrl2/quicksort10.expressions"), include_str!("snapshot/result_quicksort10.txt") ; "quicksort10")]
25
#[test_case(include_str!("../../../examples/REC/mcrl2/revelt.dataspec"), include_str!("../../../examples/REC/mcrl2/revelt.expressions"), include_str!("snapshot/result_revelt.txt") ; "revelt")]
26
#[test_case(include_str!("../../../examples/REC/mcrl2/searchinconditions.dataspec"), include_str!("../../../examples/REC/mcrl2/searchinconditions.expressions"), include_str!("snapshot/result_searchinconditions.txt") ; "searchinconditions")]
27
#[test_case(include_str!("../../../examples/REC/mcrl2/soundnessofparallelengines.dataspec"), include_str!("../../../examples/REC/mcrl2/soundnessofparallelengines.expressions"), include_str!("snapshot/result_soundnessofparallelengines.txt") ; "soundnessofparallelengines")]
28
#[test_case(include_str!("../../../examples/REC/mcrl2/tautologyhard.dataspec"), include_str!("../../../examples/REC/mcrl2/tautologyhard.expressions"), include_str!("snapshot/result_tautologyhard.txt") ; "tautologyhard")]
29
18
fn rewriter_test(data_spec: &str, expressions: &str, expected_result: &str) {
30
18
    let _ = env_logger::builder().is_test(true).try_init();
31
18

            
32
18
    let tp = Rc::new(RefCell::new(TermPool::new()));
33
18
    let spec = DataSpecification::new(data_spec).unwrap();
34
29
    let terms: Vec<DataExpression> = expressions.lines().map(|text| spec.parse(text).unwrap()).collect();
35
18

            
36
18
    // let mut sa = SabreRewriter::new(tp.clone(), &spec.clone().into());
37
18
    let mut inner = InnermostRewriter::new(tp.clone(), &spec.clone().into());
38
18
    let mut expected = expected_result.split('\n');
39

            
40
47
    for term in &terms {
41
29
        let expected_result = spec.parse(expected.next().unwrap()).unwrap();
42
29

            
43
29
        let result = inner.rewrite(term.clone());
44
29
        assert_eq!(
45
            result, expected_result,
46
            "The inner rewrite result doesn't match the expected result"
47
        );
48

            
49
        // let result = sa.rewrite(term.clone());
50
        // assert_eq!(result, expected_result, "The sabre rewrite result doesn't match the expected result");
51
    }
52
18
}
53

            
54
#[cfg(not(debug_assertions))]
55
#[test_case(include_str!("../../../examples/REC/mcrl2/benchexpr20.dataspec"), include_str!("../../../examples/REC/mcrl2/benchexpr20.expressions"), include_str!("snapshot/result_benchexpr20.txt") ; "benchexpr20")]
56
#[test_case(include_str!("../../../examples/REC/mcrl2/benchsym20.dataspec"), include_str!("../../../examples/REC/mcrl2/benchsym20.expressions"), include_str!("snapshot/result_benchsym20.txt") ; "benchsym20")]
57
#[test_case(include_str!("../../../examples/REC/mcrl2/closure.dataspec"), include_str!("../../../examples/REC/mcrl2/closure.expressions"), include_str!("snapshot/result_closure.txt") ; "closure")]
58
#[test_case(include_str!("../../../examples/REC/mcrl2/empty.dataspec"), include_str!("../../../examples/REC/mcrl2/empty.expressions"), include_str!("snapshot/result_empty.txt") ; "empty")]
59
#[test_case(include_str!("../../../examples/REC/mcrl2/evalexpr.dataspec"), include_str!("../../../examples/REC/mcrl2/evalexpr.expressions"), include_str!("snapshot/result_evalexpr.txt") ; "evalexpr")]
60
#[test_case(include_str!("../../../examples/REC/mcrl2/evaltree.dataspec"), include_str!("../../../examples/REC/mcrl2/evaltree.expressions"), include_str!("snapshot/result_evaltree.txt") ; "evaltree")]
61
#[test_case(include_str!("../../../examples/REC/mcrl2/oddeven.dataspec"), include_str!("../../../examples/REC/mcrl2/oddeven.expressions"), include_str!("snapshot/result_oddeven.txt") ; "oddeven")]
62
#[test_case(include_str!("../../../examples/REC/mcrl2/order.dataspec"), include_str!("../../../examples/REC/mcrl2/order.expressions"), include_str!("snapshot/result_order.txt") ; "order")]
63
#[test_case(include_str!("../../../examples/REC/mcrl2/revnat100.dataspec"), include_str!("../../../examples/REC/mcrl2/revnat100.expressions"), include_str!("snapshot/result_revnat100.txt") ; "revnat100")]
64
#[test_case(include_str!("../../../examples/REC/mcrl2/sieve20.dataspec"), include_str!("../../../examples/REC/mcrl2/sieve20.expressions"), include_str!("snapshot/result_sieve20.txt") ; "sieve20")]
65
#[test_case(include_str!("../../../examples/REC/mcrl2/sieve100.dataspec"), include_str!("../../../examples/REC/mcrl2/sieve100.expressions"), include_str!("snapshot/result_sieve100.txt") ; "sieve100")]
66
fn rewriter_test_release(data_spec: &str, expressions: &str, expected_result: &str) {
67
    rewriter_test(data_spec, expressions, expected_result);
68
}
69

            
70
#[cfg(unix)]
71
#[cfg(not(debug_assertions))]
72
// #[test_case(include_str!("../../../examples/REC/mcrl2/add8.dataspec"), include_str!("../../../examples/REC/mcrl2/add8.expressions"), include_str!("snapshot/result_add8.txt") ; "add8")]
73
// #[test_case(include_str!("../../../examples/REC/mcrl2/add16.dataspec"), include_str!("../../../examples/REC/mcrl2/add16.expressions"), include_str!("snapshot/result_add16.txt") ; "add16")]
74
// #[test_case(include_str!("../../../examples/REC/mcrl2/add32.dataspec"), include_str!("../../../examples/REC/mcrl2/add32.expressions"), include_str!("snapshot/result_add32.txt") ; "add32")]
75
// #[test_case(include_str!("../../../examples/REC/mcrl2/bubblesort10.dataspec"), include_str!("../../../examples/REC/mcrl2/bubblesort10.expressions"), include_str!("snapshot/result_bubblesort10.txt") ; "bubblesort10")]
76
// #[test_case(include_str!("../../../examples/REC/mcrl2/bubblesort20.dataspec"), include_str!("../../../examples/REC/mcrl2/bubblesort20.expressions"), include_str!("snapshot/result_bubblesort20.txt") ; "bubblesort20")]
77
// #[test_case(include_str!("../../../examples/REC/mcrl2/bubblesort100.dataspec"), include_str!("../../../examples/REC/mcrl2/bubblesort100.expressions"), include_str!("snapshot/result_bubblesort100.txt") ; "bubblesort100")]
78
// #[test_case(include_str!("../../../examples/REC/mcrl2/dart.dataspec"), include_str!("../../../examples/REC/mcrl2/dart.expressions"), include_str!("snapshot/result_dart.txt") ; "dart")]
79
// #[test_cas//e(include_str!("../../../examples/REC/mcrl2/factorial5.dataspec"), include_str!("../../../examples/REC/mcrl2/factorial5.expressions"), include_str!("snapshot/result_factorial5.txt") ; "factorial5")]
80
// #[test_case(include_str!("../../../examples/REC/mcrl2/factorial6.dataspec"), include_str!("../../../examples/REC/mcrl2/factorial6.expressions"), include_str!("snapshot/result_factorial6.txt") ; "factorial6")]
81
// #[test_case(include_str!("../../../examples/REC/mcrl2/factorial7.dataspec"), include_str!("../../../examples/REC/mcrl2/factorial7.expressions"), include_str!("snapshot/result_factorial7.txt") ; "factorial7")]
82
// #[test_case(include_str!("../../../examples/REC/mcrl2/factorial8.dataspec"), include_str!("../../../examples/REC/mcrl2/factorial8.expressions"), include_str!("snapshot/result_factorial8.txt") ; "factorial8")]
83
// #[test_case(include_str!("../../../examples/REC/mcrl2/factorial9.dataspec"), include_str!("../../../examples/REC/mcrl2/factorial9.expressions"), include_str!("snapshot/result_factorial9.txt") ; "factorial9")]
84
// #[test_case(include_str!("../../../examples/REC/mcrl2/fibonacci18.dataspec"), include_str!("../../../examples/REC/mcrl2/fibonacci18.expressions"), include_str!("snapshot/result_fibonacci18.txt") ; "fibonacci18")]
85
// #[test_case(include_str!("../../../examples/REC/mcrl2/fibonacci19.dataspec"), include_str!("../../../examples/REC/mcrl2/fibonacci19.expressions"), include_str!("snapshot/result_fibonacci19.txt") ; "fibonacci19")]
86
// #[test_case(include_str!("../../../examples/REC/mcrl2/fibonacci20.dataspec"), include_str!("../../../examples/REC/mcrl2/fibonacci20.expressions"), include_str!("snapshot/result_fibonacci20.txt") ; "fibonacci20")]
87
// #[test_case(include_str!("../../../examples/REC/mcrl2/fibonacci21.dataspec"), include_str!("../../../examples/REC/mcrl2/fibonacci21.expressions"), include_str!("snapshot/result_fibonacci21.txt") ; "fibonacci21")]
88
// #[test_case(include_str!("../../../examples/REC/mcrl2/hanoi4.dataspec"), include_str!("../../../examples/REC/mcrl2/hanoi4.expressions"), include_str!("snapshot/result_hanoi4.txt") ; "hanoi4")]
89
// #[test_case(include_str!("../../../examples/REC/mcrl2/hanoi8.dataspec"), include_str!("../../../examples/REC/mcrl2/hanoi8.expressions"), include_str!("snapshot/result_hanoi8.txt") ; "hanoi8")]
90
// #[test_case(include_str!("../../../examples/REC/mcrl2/hanoi12.dataspec"), include_str!("../../../examples/REC/mcrl2/hanoi12.expressions"), include_str!("snapshot/result_hanoi12.txt") ; "hanoi12")]
91
#[test_case(include_str!("../../../examples/REC/mcrl2/permutations6.dataspec"), include_str!("../../../examples/REC/mcrl2/permutations6.expressions"), include_str!("snapshot/result_permutations6.txt") ; "permutations6")]
92
// #[test_case(include_str!("../../../examples/REC/mcrl2/permutations7.dataspec"), include_str!("../../../examples/REC/mcrl2/permutations7.expressions"), include_str!("snapshot/result_permutations7.txt") ; "permutations7")]
93
#[test_case(include_str!("../../../examples/REC/mcrl2/natlist.dataspec"), include_str!("../../../examples/REC/mcrl2/natlist.expressions"), include_str!("snapshot/result_natlist.txt") ; "natlist")]
94
// #[test_case(include_str!("../../../examples/REC/mcrl2/revnat1000.dataspec"), include_str!("../../../examples/REC/mcrl2/revnat1000.expressions"), include_str!("snapshot/result_revnat1000.txt") ; "revnat1000")]
95
// #[test_case(include_str!("../../../examples/REC/mcrl2/sieve1000.dataspec"), include_str!("../../../examples/REC/mcrl2/sieve1000.expressions"), include_str!("snapshot/result_sieve1000.txt") ; "sieve1000")]
96
// #[test_case(include_str!("../../../examples/REC/mcrl2/tak18.dataspec"), include_str!("../../../examples/REC/mcrl2/tak18.expressions"), include_str!("snapshot/result_tak18.txt") ; "tak18")]
97
// #[test_case(include_str!("../../../examples/REC/mcrl2/tricky.dataspec"), include_str!("../../../examples/REC/mcrl2/tricky.expressions"), include_str!("snapshot/result_tricky.txt") ; "tricky")]
98
fn rewriter_test_release_unix(data_spec: &str, expressions: &str, expected_result: &str) {
99
    rewriter_test(data_spec, expressions, expected_result);
100
}