diff --git a/src/astPredef.ml b/src/astPredef.ml index 1e1dd9d007791c5bf1bc4bddedc38d5fec76d136..61859b4523ba868ca37f37c4f8c0002d6ada7527 100644 --- a/src/astPredef.ml +++ b/src/astPredef.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 28/05/2013 (at 10:47) by Erwan Jahier> *) +(* Time-stamp: <modified the 26/06/2014 (at 18:29) by Erwan Jahier> *) (** Predefined operators Type definition *) @@ -21,10 +21,9 @@ type op = | IMPL_n | EQ_n | NEQ_n - | LT_n - | LTE_n - | GT_n - | GTE_n + | LT_n | LTE_n | GT_n | GTE_n + | ILT_n | ILTE_n| IGT_n| IGTE_n + | RLT_n| RLTE_n| RGT_n| RGTE_n | DIV_n | MOD_n (* ternary *) @@ -55,7 +54,10 @@ type op = let all_op = [ NOT_n; REAL2INT_n; INT2REAL_n; AND_n; OR_n; XOR_n; IMPL_n; - EQ_n; NEQ_n; LT_n; LTE_n; GT_n; GTE_n; DIV_n; MOD_n; IF_n; + EQ_n; NEQ_n; LT_n; LTE_n; GT_n; GTE_n; + LT_n; LTE_n; GT_n; GTE_n ; + ILT_n; ILTE_n; IGT_n; IGTE_n ; + DIV_n; MOD_n; IF_n; NOR_n; DIESE_n; UMINUS_n; MINUS_n; PLUS_n; SLASH_n; TIMES_n; IUMINUS_n; IMINUS_n; IPLUS_n; ISLASH_n; ITIMES_n; RUMINUS_n; RMINUS_n; RPLUS_n; RSLASH_n; RTIMES_n @@ -69,7 +71,10 @@ let iterable_op = [ DIV_n; MOD_n; IUMINUS_n; IMINUS_n; IPLUS_n; ISLASH_n; ITIMES_n; RUMINUS_n; RMINUS_n; RPLUS_n; RSLASH_n; RTIMES_n ; UMINUS_n; MINUS_n; PLUS_n; SLASH_n; TIMES_n ; - EQ_n; NEQ_n; LT_n; LTE_n; GT_n; GTE_n ; + EQ_n; NEQ_n; + LT_n; LTE_n; GT_n; GTE_n ; + ILT_n; ILTE_n; IGT_n; IGTE_n ; + RLT_n; RLTE_n; RGT_n; RGTE_n ; IF_n; ] @@ -89,10 +94,10 @@ let op2string = function | IMPL_n -> "=>" | EQ_n -> "=" | NEQ_n -> "<>" - | LT_n -> "<" - | LTE_n -> "<=" - | GT_n -> ">" - | GTE_n -> ">=" + | LT_n | ILT_n | RLT_n -> "<" + | LTE_n | ILTE_n | RLTE_n -> "<=" + | GT_n | IGT_n | RGT_n -> ">" + | GTE_n | IGTE_n | RGTE_n -> ">=" | DIV_n -> "div" | MOD_n -> "mod" | IF_n -> "if" @@ -119,9 +124,17 @@ let op2string_long = function | NEQ_n -> "neq" | IMPL_n -> "impl" | LT_n -> "lt" + | ILT_n -> "ilt" + | RLT_n -> "rlt" | LTE_n -> "lte" + | ILTE_n -> "ilte" + | RLTE_n -> "rlte" | GT_n -> "gt" + | IGT_n -> "igt" + | RGT_n -> "rgt" | GTE_n -> "gte" + | IGTE_n -> "igte" + | RGTE_n -> "rgte" | DIESE_n -> "diese" | UMINUS_n -> "uminus" | MINUS_n -> "minus" @@ -141,7 +154,10 @@ let op2string_long = function | op -> op2string op let is_infix = function - | AND_n | OR_n | XOR_n | IMPL_n | EQ_n | NEQ_n | LT_n | LTE_n | GT_n | GTE_n | DIV_n + | AND_n | OR_n | XOR_n | IMPL_n | EQ_n | NEQ_n | LT_n | LTE_n | GT_n | GTE_n + | ILT_n | ILTE_n| IGT_n| IGTE_n + | RLT_n| RLTE_n| RGT_n| RGTE_n + | DIV_n | MOD_n | IF_n | MINUS_n | PLUS_n | SLASH_n | TIMES_n | IMINUS_n | IPLUS_n | ISLASH_n | ITIMES_n | RMINUS_n | RPLUS_n | RSLASH_n | RTIMES_n -> true @@ -171,9 +187,17 @@ let (string_to_op : string -> op) = | "eq" -> EQ_n | "neq" -> NEQ_n | "lt" -> LT_n + | "ilt" -> ILT_n + | "rlt" -> RLT_n | "lte" -> LTE_n + | "ilte" -> ILTE_n + | "rlte" -> RLTE_n | "gt" -> GT_n + | "igt" -> IGT_n + | "rgt" -> RGT_n | "gte" -> GTE_n + | "igte" -> IGTE_n + | "rgte" -> RGTE_n | "div" -> DIV_n | "mod" -> MOD_n (* ternary *) diff --git a/src/licEvalConst.ml b/src/licEvalConst.ml index 97a9c4f2a286199836d37e699b67f325dde5882c..f657a4620f1f7ca9fb649bd37e70d832be5d300d 100644 --- a/src/licEvalConst.ml +++ b/src/licEvalConst.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 11/04/2013 (at 15:31) by Erwan Jahier> *) +(* Time-stamp: <modified the 26/06/2014 (at 18:32) by Erwan Jahier> *) open AstPredef open Lic @@ -145,10 +145,10 @@ let f | IMPL_n -> bbb_evaluator (fun a b -> (not a) || b) ll | EQ_n -> aab_evaluator (=) ll | NEQ_n -> aab_evaluator (<>) ll - | LT_n -> aab_evaluator (<) ll - | LTE_n -> aab_evaluator (<=) ll - | GT_n -> aab_evaluator (>) ll - | GTE_n -> aab_evaluator (>=) ll + | LT_n | ILT_n | RLT_n -> aab_evaluator (<) ll + | LTE_n | ILTE_n | RLTE_n -> aab_evaluator (<=) ll + | GT_n | IGT_n | RGT_n -> aab_evaluator (>) ll + | GTE_n | IGTE_n | RGTE_n -> aab_evaluator (>=) ll | DIV_n -> iii_evaluator (/) ll | MOD_n -> iii_evaluator (mod) ll | IF_n -> ite_evaluator ll diff --git a/src/licEvalType.ml b/src/licEvalType.ml index d508230e642f217dde1691cac6bf3da57963619d..ed8865d89fda55b16c26b3c502b962c5ebcca1a8 100644 --- a/src/licEvalType.ml +++ b/src/licEvalType.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 11/04/2013 (at 15:51) by Erwan Jahier> *) +(* Time-stamp: <modified the 26/06/2014 (at 18:31) by Erwan Jahier> *) open AstPredef open Lxm @@ -80,6 +80,9 @@ let baaa_profile = [(id "c", b);(id "b1",(TypeVar Any));(id "b2",(TypeVar Any))] (** overloaded operator profiles *) let oo_profile = [(id "i",(TypeVar AnyNum))], [(id "o",(TypeVar AnyNum))] let ooo_profile = [(id "i1",(TypeVar AnyNum));(id "i2",(TypeVar AnyNum))], [(id "o",(TypeVar AnyNum))] +let oob_profile = [(id "i1",(TypeVar AnyNum));(id "i2",(TypeVar AnyNum))], [(id "o",b)] +let iib_profile = [(id "i1",i);(id "i2",i)], [(id "o",b)] +let rrb_profile = [(id "i1",r);(id "i2",r)], [(id "o",b)] (* let diese_profile = assert false *) @@ -275,8 +278,12 @@ let op2profile | UMINUS_n -> oo_profile | IUMINUS_n -> ii_profile | RUMINUS_n -> rr_profile - | IMPL_n | AND_n | OR_n | XOR_n -> bbb_profile - | NEQ_n | EQ_n | LT_n | LTE_n | GT_n | GTE_n -> aab_profile + | IMPL_n | AND_n | OR_n | XOR_n -> bbb_profile + | NEQ_n + | EQ_n -> aab_profile + | RLT_n | RLTE_n | RGT_n | RGTE_n -> rrb_profile + | ILT_n | ILTE_n | IGT_n | IGTE_n -> iib_profile + | LT_n | LTE_n | GT_n | GTE_n -> oob_profile | MINUS_n | PLUS_n | TIMES_n | SLASH_n | DIV_n -> ooo_profile | RMINUS_n | RPLUS_n | RTIMES_n | RSLASH_n -> rrr_profile | MOD_n | IMINUS_n | IPLUS_n | ISLASH_n | ITIMES_n -> iii_profile diff --git a/test/lus2lic.sum b/test/lus2lic.sum index ca025fce7985dac827b41731bdd3aba8a88c1094..d6727483032444074df23113a0c5d7879f5b74c7 100644 --- a/test/lus2lic.sum +++ b/test/lus2lic.sum @@ -1,4 +1,4 @@ -Test Run By jahier on Thu Jun 26 17:47:00 2014 +Test Run By jahier on Thu Jun 26 18:33:40 2014 Native configuration is i686-pc-linux-gnu === lus2lic tests === @@ -615,10 +615,11 @@ PASS: ./myec2c {-o /tmp/pipeline.c /tmp/pipeline.ec} PASS: ../utils/test_lus2lic_no_node should_work/pipeline.lus PASS: ./lus2lic {-2c should_work/pipeline.lus -n pipeline} PASS: gcc pipeline_pipeline.c pipeline_pipeline_loop.c -FAIL: without any option: ./lus2lic {-o /tmp/mapinf.lic should_work/mapinf.lus} -FAIL: Generate ec code : ./lus2lic {-ec -o /tmp/mapinf.ec should_work/mapinf.lus} -FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/mapinf.lus -FAIL: Generate c code : ./lus2lic {-2c should_work/mapinf.lus -n mapinf} +PASS: ./lus2lic {-o /tmp/mapinf.lic should_work/mapinf.lus} +PASS: ./lus2lic {-ec -o /tmp/mapinf.ec should_work/mapinf.lus} +PASS: ./myec2c {-o /tmp/mapinf.c /tmp/mapinf.ec} +PASS: ../utils/test_lus2lic_no_node should_work/mapinf.lus +PASS: ./lus2lic {-2c should_work/mapinf.lus -n mapinf} PASS: gcc mapinf_mapinf.c mapinf_mapinf_loop.c PASS: ./lus2lic {-o /tmp/integrator.lic should_work/integrator.lus} PASS: ./lus2lic {-ec -o /tmp/integrator.ec should_work/integrator.lus} @@ -1475,11 +1476,9 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman === lus2lic Summary === -# of expected passes 1288 -# of unexpected failures 117 +# of expected passes 1293 +# of unexpected failures 113 # of unexpected successes 21 # of expected failures 37 -testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds -testcase ./lus2lic.tests/progression.exp completed in 1 seconds -testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds -testcase ./lus2lic.tests/progression.exp completed in 1 seconds +testcase ./lus2lic.tests/non-reg.exp completed in 127 seconds +testcase ./lus2lic.tests/progression.exp completed in 0 seconds diff --git a/test/lus2lic.time b/test/lus2lic.time index 1aa21d49f18d621f469fab7e647306d324ff9115..fc37b3d2f3b3c3a058ac4ad29f85e57634d69354 100644 --- a/test/lus2lic.time +++ b/test/lus2lic.time @@ -1,2 +1,2 @@ -testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds -testcase ./lus2lic.tests/progression.exp completed in 1 seconds +testcase ./lus2lic.tests/non-reg.exp completed in 127 seconds +testcase ./lus2lic.tests/progression.exp completed in 0 seconds diff --git a/test/should_work/mapinf.lus b/test/should_work/mapinf.lus index 72de52d1ddf74019f7e3cbdbf669e4fcf655bbe4..501732ba0f5559d762424b09fdbcae11c313cb80 100644 --- a/test/should_work/mapinf.lus +++ b/test/should_work/mapinf.lus @@ -1,5 +1,5 @@ node mapinf (t1, t2: int^10) returns (res : bool^10); let - res = map<< lt, 10>>(t1, t2); + res = map<< Lustre::lt, 10>>(t1, t2); tel