aboutsummaryrefslogtreecommitdiffstats
path: root/modelica-parser-lalrpop/tests/parser.rs
blob: 1a0f46f0a1b10e95d1d02f134c98159a28b41afa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

extern crate modelica_parser;

use modelica_parser::parser::{parse_integer, parse_float, parse_model};

#[test]
fn test_lexical() {
    assert_eq!(&format!("{:?}", parse_integer("+123").unwrap()),
               "123");
    assert_eq!(&format!("{:?}", parse_integer("-9").unwrap()),
               "-9");
    assert_eq!(&format!("{:?}", parse_float("-1.0e0").unwrap()),
               "-1");
    assert_eq!(&format!("{:?}", parse_float("123.456").unwrap()),
               "123.456");
}

#[test]
fn test_parse() {
    let example1 =
r#"model MinimalModel
  Real x;
equation
  x = 1;
end MinimalModel;
"#;
    assert_eq!(&format!("{:?}", parse_model(example1).unwrap()), example1);

    let example2 =
r#"model MinimalModel
  parameter Real a;
  Real b;
equation
  connect(a, b);
  a = 1;
  b = ((abs(a) + 2) / 4);
end MinimalModel;
"#;
    assert_eq!(&format!("{:?}", parse_model(example2).unwrap()), example2);
}

// TODO: the following are illegal in Modelica
// 2*-2 = -4
// --2 = 2
// ++2 = 2
// 2--2 = 4
// x^y^z (needs parens)