Project

General

Profile

Download (6.65 KB) Statistics
| Branch: | Tag: | Revision:
1
open Basetypes
2
open Corelang
3
open Datatype
4
open Json_parser
5
open LustreSpec
6
open OUnit2
7

    
8
module ParseExt = struct
9
  let parse_condition _ = Condition.tru
10

    
11
  let parse_action _ = Action.nil
12

    
13
  let parse_event json = Some Yojson.Basic.(json |> to_string)
14
end
15

    
16
module Parse = Parser (ParseExt)
17

    
18
let location = Location.dummy_loc
19

    
20
let string_of_var_type var_type =
21
  match var_type with
22
  | Tydec_bool ->
23
    "bool"
24
  | Tydec_int ->
25
    "int"
26
  | Tydec_real ->
27
    "real"
28
  | _ ->
29
    "other"
30

    
31
let string_of_var_value value =
32
  match value with
33
  | Expr_const (Const_tag label) ->
34
    label
35
  | Expr_const (Const_int v) ->
36
    string_of_int v
37
  | Expr_const (Const_real (n, l, s)) ->
38
    Num.string_of_num n ^ " x 10^-" ^ string_of_int l ^ " (" ^ s ^ ")"
39
  | _ ->
40
    "other value (not possible)"
41

    
42
let test_var_skeleton var id var_type value =
43
  assert_bool "orig for user variables should be true" var.var_orig;
44
  assert_bool "user variables are considered as constants" var.var_dec_const;
45
  assert_equal
46
    ~msg:("problem with variable " ^ var.var_id ^ " clock type")
47
    Ckdec_any var.var_dec_clock.ck_dec_desc;
48
  assert_equal
49
    ~msg:("problem with variable " ^ var.var_id ^ " ident")
50
    ~printer:(fun x -> x)
51
    id var.var_id;
52
  assert_equal
53
    ~msg:("problem with variable " ^ var.var_id ^ " type")
54
    ~printer:string_of_var_type var_type var.var_dec_type.ty_dec_desc;
55
  match var.var_dec_value with
56
  | Some { expr_desc = d } ->
57
    assert_equal
58
      ~msg:("problem with variable " ^ var.var_id ^ " value")
59
      ~printer:string_of_var_value value d
60
  | _ ->
61
    raise
62
      (OUnitTest.OUnit_failure "User variables should have an initial value")
63

    
64
let test_simple_var_bool_false tests_ctxt =
65
  let prog =
66
    Parse.parse_prog
67
      (Yojson.Basic.from_file "../data-test/simple-var-bool-false.json")
68
  in
69
  match prog with
70
  | Program ("simple_var_bool_false", [], [ x ]) ->
71
    test_var_skeleton x "my_bool_var_false" Tydec_bool
72
      (Expr_const (Const_tag tag_false))
73
  | _ ->
74
    raise
75
      (OUnitTest.OUnit_failure
76
         "Program obtained from simple-var-bool-false.json is not correct")
77

    
78
let test_simple_var_bool_true tests_ctxt =
79
  let prog =
80
    Parse.parse_prog
81
      (Yojson.Basic.from_file "../data-test/simple-var-bool-true.json")
82
  in
83
  match prog with
84
  | Program ("simple_var_bool_true", [], [ x ]) ->
85
    test_var_skeleton x "my_bool_var_true" Tydec_bool
86
      (Expr_const (Const_tag tag_true))
87
  | _ ->
88
    raise
89
      (OUnitTest.OUnit_failure
90
         "Program obtained from simple-var-bool-true.json is not correct")
91

    
92
let test_simple_var_int_zero tests_ctxt =
93
  let prog =
94
    Parse.parse_prog
95
      (Yojson.Basic.from_file "../data-test/simple-var-int-zero.json")
96
  in
97
  match prog with
98
  | Program ("simple_var_int_zero", [], [ x ]) ->
99
    test_var_skeleton x "my_int_var_zero" Tydec_int (Expr_const (Const_int 0))
100
  | _ ->
101
    raise
102
      (OUnitTest.OUnit_failure
103
         "Program obtained from simple-var-int-zero.json is not correct")
104

    
105
let test_simple_var_int_pos tests_ctxt =
106
  let prog =
107
    Parse.parse_prog
108
      (Yojson.Basic.from_file "../data-test/simple-var-int-pos.json")
109
  in
110
  match prog with
111
  | Program ("simple_var_int_pos", [], [ x ]) ->
112
    test_var_skeleton x "my_int_var_pos" Tydec_int (Expr_const (Const_int 2))
113
  | _ ->
114
    raise
115
      (OUnitTest.OUnit_failure
116
         "Program obtained from simple-var-int-pos.json is not correct")
117

    
118
let test_simple_var_int_neg tests_ctxt =
119
  let prog =
120
    Parse.parse_prog
121
      (Yojson.Basic.from_file "../data-test/simple-var-int-neg.json")
122
  in
123
  match prog with
124
  | Program ("simple_var_int_neg", [], [ x ]) ->
125
    test_var_skeleton x "my_int_var_neg" Tydec_int (Expr_const (Const_int (-5)))
126
  | _ ->
127
    raise
128
      (OUnitTest.OUnit_failure
129
         "Program obtained from simple-var-int-neg.json is not correct")
130

    
131
let test_simple_var_real_zero tests_ctxt =
132
  let prog =
133
    Parse.parse_prog
134
      (Yojson.Basic.from_file "../data-test/simple-var-real-zero.json")
135
  in
136
  match prog with
137
  | Program ("simple_var_real_zero", [], [ x ]) ->
138
    test_var_skeleton x "my_real_var_zero" Tydec_real
139
      (Expr_const (Const_real (Num.num_of_int 0, 1, "0.0")))
140
  | _ ->
141
    raise
142
      (OUnitTest.OUnit_failure
143
         "Program obtained from simple-var-real-zero.json is not correct")
144

    
145
let test_simple_var_real_pos tests_ctxt =
146
  let prog =
147
    Parse.parse_prog
148
      (Yojson.Basic.from_file "../data-test/simple-var-real-pos.json")
149
  in
150
  match prog with
151
  | Program ("simple_var_real_pos", [], [ x ]) ->
152
    test_var_skeleton x "my_real_var_pos" Tydec_real
153
      (Expr_const (Const_real (Num.num_of_int 2115, 2, "21.15")))
154
  | _ ->
155
    raise
156
      (OUnitTest.OUnit_failure
157
         "Program obtained from simple-var-real-pos.json is not correct")
158

    
159
let test_simple_var_real_neg tests_ctxt =
160
  let prog =
161
    Parse.parse_prog
162
      (Yojson.Basic.from_file "../data-test/simple-var-real-neg.json")
163
  in
164
  match prog with
165
  | Program ("simple_var_real_neg", [], [ x ]) ->
166
    test_var_skeleton x "my_real_var_neg" Tydec_real
167
      (Expr_const (Const_real (Num.num_of_int (-224), 2, "-2.24")))
168
  | _ ->
169
    raise
170
      (OUnitTest.OUnit_failure
171
         "Program obtained from simple-var-real-neg.json is not correct")
172

    
173
let test_simple_var_real_e tests_ctxt =
174
  let prog =
175
    Parse.parse_prog
176
      (Yojson.Basic.from_file "../data-test/simple-var-real-e.json")
177
  in
178
  match prog with
179
  | Program ("simple_var_real_e", [], [ x ]) ->
180
    test_var_skeleton x "my_real_var_e" Tydec_real
181
      (Expr_const (Const_real (Num.num_of_int (-2115), 4, "-21.15e-02")))
182
  | _ ->
183
    raise
184
      (OUnitTest.OUnit_failure
185
         "Program obtained from simple-var-real-e.json is not correct")
186

    
187
let test_simple_var_real_wo_dec tests_ctxt =
188
  assert_raises (Parse.JSON_parse_error "Invalid real constant 2500") (fun _ ->
189
      Parse.parse_prog
190
        (Yojson.Basic.from_file "../data-test/simple-var-real-wo-dec.json"))
191

    
192
let var_suite =
193
  "suite for variables"
194
  >::: [
195
         "simple test for variable (boolean, false)"
196
         >:: test_simple_var_bool_false;
197
         "simple test for variable (boolean, true)"
198
         >:: test_simple_var_bool_true;
199
         "simple test for variable (int, 0)" >:: test_simple_var_int_zero;
200
         "simple test for variable (int, 2)" >:: test_simple_var_int_pos;
201
         "simple test for variable (int, -5)" >:: test_simple_var_int_neg;
202
         "simple test for variable (real, 0.0)" >:: test_simple_var_real_zero;
203
         "simple test for variable (real, 21.15)" >:: test_simple_var_real_pos;
204
         "simple test for variable (real, -2.24)" >:: test_simple_var_real_neg;
205
         "simple test for variable (real, -21.15e-02)"
206
         >:: test_simple_var_real_e;
207
         "simple test for variable (real, 2500)" >:: test_simple_var_real_wo_dec;
208
       ]
209

    
210
let _ = run_test_tt_main var_suite
(3-3/3)