-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_type.ml
65 lines (49 loc) · 2.33 KB
/
test_type.ml
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
open Syntax
open Type
open Formula
let list a r p :Type.t = TScalar (TData ("list", [a], [r]),p )
let len l :Formula.t= UF (IntS, "len",[l])
let v = Var (DataS ("list",[AnyS "a"]),(Id.valueVar_id ))
let a_t_cons = TScalar (TVar (M.empty,"b"),Bool true)
let a_t_rx_cons = TScalar
(TVar (M.empty, "b"),
UF(BoolS,"r",[Var(AnyS "a","x"); Var(AnyS "a",Id.valueVar_id)] ))
let r_pa:pa = [("_0",AnyS "a");("_1",AnyS "a")],
UF (BoolS,"r",[Var (AnyS "a", "_0");Var (AnyS "a","_1")])
let r_rev_pa:pa = [("_0",AnyS "a");("_1",AnyS "a")],
UF (BoolS,"r",[Var (AnyS "a", "_1");Var (AnyS "a","_0")])
let cons_t = (["b"],[("r",([AnyS "a";AnyS "a"],BoolS))], (* パラメタ *)
TFun(("x",a_t_cons),
TFun(("xs",(list a_t_rx_cons r_pa (Bool true))),
list
a_t_cons
r_pa
(Eq (len v, Plus
(len (Var (DataS ("list",[AnyS "a"]),"xs")),
Int 1)
)))))
(*-----------------------------------------input-------------------------------------- *)
let input1 = TFun(("xs",(list a_t_rx_cons r_pa (Bool true))),
list
a_t_cons
r_pa
(Eq (len v, Plus
(len (Var (DataS ("list",[AnyS "a"]),"xs")),
Int 1)
)))
(*-----------------------------------------output-------------------------------------- *)
let a_t_rx_cons' = TScalar
(TVar (M.empty, "b"),
UF(BoolS,"r",[Var(AnyS "a","x'"); Var(AnyS "a",Id.valueVar_id)] ))
let output1 = TFun(("xs",(list a_t_rx_cons' r_pa (Bool true))),
list
a_t_cons
r_pa
(Eq (len v, Plus
(len (Var (DataS ("list",[AnyS "a"]),"xs")),
Int 1)
)))
(* replace_F のテスト *)
let _ =
(print_string (t2string (replace_F "x" "x'" input1)));
assert (output1 = replace_F "x" "x'" input1)