1
use std::cell::RefCell;
2
use std::rc::Rc;
3
use std::thread;
4

            
5
use mcrl2::aterm::TermPool;
6
use mcrl2::data::DataExpression;
7
use mcrl2::data::DataSpecification;
8
use sabre::InnermostRewriter;
9
use sabre::RewriteEngine;
10

            
11
#[test]
12
1
fn test_parallelism() {
13
1
    let mut threads = vec![];
14
1

            
15
1
    let test_case = (
16
1
        include_str!("../../../examples/REC/mcrl2/benchexpr10.dataspec"),
17
1
        include_str!("../../../examples/REC/mcrl2/benchexpr10.expressions"),
18
1
        include_str!("snapshot/result_benchexpr10.txt"),
19
1
    );
20

            
21
3
    for _ in 0..2 {
22
2
        threads.push(thread::spawn(move || {
23
2
            let (data_spec, expressions, expected_result) = test_case;
24
2

            
25
2
            let tp = Rc::new(RefCell::new(TermPool::new()));
26
2
            let spec = DataSpecification::new(data_spec).unwrap();
27
2
            let terms: Vec<DataExpression> = expressions.lines().map(|text| spec.parse(text).unwrap()).collect();
28
2
            let mut expected = expected_result.split('\n');
29
2

            
30
2
            let mut inner = InnermostRewriter::new(tp.clone(), &spec.clone().into());
31
4
            for term in &terms {
32
2
                let result = inner.rewrite(term.clone());
33
2

            
34
2
                let expected_result = spec.parse(expected.next().unwrap()).unwrap();
35
2
                assert_eq!(
36
                    result, expected_result,
37
                    "The inner rewrite result doesn't match the expected result"
38
                );
39
            }
40
2
        }));
41
2
    }
42

            
43
3
    for thread in threads {
44
2
        thread.join().unwrap();
45
2
    }
46
1
}