From 50197035822142c871f65b41f584fde225359e4f Mon Sep 17 00:00:00 2001
From: Erwan Jahier <jahier@imag.fr>
Date: Fri, 6 Jan 2017 10:40:03 +0100
Subject: [PATCH] Returns a message (instead of assert false) when an extern
 node is used from the interpreters.

also:
 -2cw7: fix the generated script
 arduino dir: minor fixes
---
 _oasis                                 |   2 +-
 arduino/led_puzlle/arduino_puzzle1.lus |   2 +-
 arduino/led_puzlle/arduino_puzzle2.lus |   2 +-
 arduino/led_puzlle/arduino_puzzle3.lus |   2 +-
 arduino/led_puzlle/arduino_puzzle4.lus |   2 +-
 arduino/led_puzlle/arduino_puzzle5.lus |   2 +-
 arduino/led_puzlle/arduino_puzzle6.lus |   2 +-
 arduino/led_puzlle/led.lus             |   7 +-
 lv6-ref-man/lv6-ref-man.tex            |  18 +-
 src/lv6version.ml                      |   4 +-
 src/soc2c.ml                           |   4 +-
 src/socExec.ml                         | 267 +++++++++++++------------
 src/socExecDbg.ml                      |   9 +-
 test/lus2lic.sum                       |  26 +--
 14 files changed, 178 insertions(+), 171 deletions(-)

diff --git a/_oasis b/_oasis
index 7ec67509..de764e3c 100644
--- a/_oasis
+++ b/_oasis
@@ -1,6 +1,6 @@
 OASISFormat: 0.4
 Name:        lustre-v6
-Version:     1.676
+Version:     1.677
 Synopsis:    The Lustre V6 Verimag compiler
 Description: This package contains:
    (1) lus2lic: the (current) name of the compiler (and interpreter via -exec).
diff --git a/arduino/led_puzlle/arduino_puzzle1.lus b/arduino/led_puzlle/arduino_puzzle1.lus
index 7d8c0d95..579fbe14 100644
--- a/arduino/led_puzlle/arduino_puzzle1.lus
+++ b/arduino/led_puzlle/arduino_puzzle1.lus
@@ -1,4 +1,4 @@
 node arduino_puzzle(red,blue:bool) returns (led1,led2,led3,led4,led5:bool);
 let
-  led1,led2,led3,led4,led5=puzzle1(pulse(red), pulse(blue));
+  led1,led2,led3,led4,led5=puzzle1(edge(red), edge(blue));
 tel
diff --git a/arduino/led_puzlle/arduino_puzzle2.lus b/arduino/led_puzlle/arduino_puzzle2.lus
index b02e9281..70c232a8 100644
--- a/arduino/led_puzlle/arduino_puzzle2.lus
+++ b/arduino/led_puzlle/arduino_puzzle2.lus
@@ -1,4 +1,4 @@
 node arduino_puzzle(red,blue:bool) returns (led1,led2,led3,led4,led5:bool);
 let
-  led1,led2,led3,led4,led5=puzzle2(pulse(red), pulse(blue));
+  led1,led2,led3,led4,led5=puzzle2(edge(red), edge(blue));
 tel
diff --git a/arduino/led_puzlle/arduino_puzzle3.lus b/arduino/led_puzlle/arduino_puzzle3.lus
index ae1664d7..f7429d22 100644
--- a/arduino/led_puzlle/arduino_puzzle3.lus
+++ b/arduino/led_puzlle/arduino_puzzle3.lus
@@ -1,4 +1,4 @@
 node arduino_puzzle(red,blue:bool) returns (led1,led2,led3,led4,led5:bool);
 let
-  led1,led2,led3,led4,led5=puzzle3(pulse(red), pulse(blue));
+  led1,led2,led3,led4,led5=puzzle3(edge(red), edge(blue));
 tel
diff --git a/arduino/led_puzlle/arduino_puzzle4.lus b/arduino/led_puzlle/arduino_puzzle4.lus
index 131d1684..f604a54a 100644
--- a/arduino/led_puzlle/arduino_puzzle4.lus
+++ b/arduino/led_puzlle/arduino_puzzle4.lus
@@ -1,4 +1,4 @@
 node arduino_puzzle(red,blue:bool) returns (led1,led2,led3,led4,led5:bool);
 let
-  led1,led2,led3,led4,led5=puzzle4(pulse(red), pulse(blue));
+  led1,led2,led3,led4,led5=puzzle4(edge(red), edge(blue));
 tel
diff --git a/arduino/led_puzlle/arduino_puzzle5.lus b/arduino/led_puzlle/arduino_puzzle5.lus
index 8a74c654..b7bd3e2b 100644
--- a/arduino/led_puzlle/arduino_puzzle5.lus
+++ b/arduino/led_puzlle/arduino_puzzle5.lus
@@ -1,4 +1,4 @@
 node arduino_puzzle(red,blue:bool) returns (led1,led2,led3,led4,led5:bool);
 let
-  led1,led2,led3,led4,led5=puzzle5(pulse(red), pulse(blue));
+  led1,led2,led3,led4,led5=puzzle5(edge(red), edge(blue));
 tel
diff --git a/arduino/led_puzlle/arduino_puzzle6.lus b/arduino/led_puzlle/arduino_puzzle6.lus
index 51e89416..eebf8c87 100644
--- a/arduino/led_puzlle/arduino_puzzle6.lus
+++ b/arduino/led_puzlle/arduino_puzzle6.lus
@@ -1,4 +1,4 @@
 node arduino_puzzle(red,blue:bool) returns (led1,led2,led3,led4,led5:bool);
 let
-  led1,led2,led3,led4,led5=puzzle6(pulse(red), pulse(blue));
+  led1,led2,led3,led4,led5=puzzle6(edge(red), edge(blue));
 tel
diff --git a/arduino/led_puzlle/led.lus b/arduino/led_puzlle/led.lus
index 710f1cb1..2093055e 100644
--- a/arduino/led_puzlle/led.lus
+++ b/arduino/led_puzlle/led.lus
@@ -198,12 +198,9 @@ node puzzle5_has_no_solution = puzzle_has_no_solution <<puzzle5>>
 node puzzle6_has_no_solution = puzzle_has_no_solution <<puzzle6>>
 
 
-node pulse(s:bool) returns (res:bool);
-var
-  pressed:bool;
+node edge(s:bool) returns (res:bool);
 let
-  pressed = false -> s;
-  res=pre(pressed) and not(s);
+  res= false -> not pre(s) and s;
 tel
 
   
diff --git a/lv6-ref-man/lv6-ref-man.tex b/lv6-ref-man/lv6-ref-man.tex
index 670b422c..90489532 100644
--- a/lv6-ref-man/lv6-ref-man.tex
+++ b/lv6-ref-man/lv6-ref-man.tex
@@ -1171,9 +1171,10 @@ external items are effectively launched from a Lustre program depends
 on the  back-ends of the compiler.
 
 
-\begin{example}[]
-\input{complex.lus}
-\end{example}
+%\begin{example}[]
+%\input{}
+%\end{example}
+
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1182,12 +1183,6 @@ on the  back-ends of the compiler.
 A Lustre-core program is a  set of constant, types, function and node
 Declarations.
 
-
-
-
-
-
-
 \cleardoublepage
 
 
@@ -1827,6 +1822,11 @@ functions.
 \end{alltt}
 \end{example}
 
+\begin{example}[]
+\input{complex.lus}
+\end{example}
+
+
 %     \kwd{node} foo( a : a_user_type) \kwd{returns} (x, y: real);
 %     \kwd{const} n : int;
 %     \kwd{type} a_user_type;
diff --git a/src/lv6version.ml b/src/lv6version.ml
index edbaa0dd..e70b02ba 100644
--- a/src/lv6version.ml
+++ b/src/lv6version.ml
@@ -1,7 +1,7 @@
 (** Automatically generated from Makefile *) 
 let tool = "lus2lic"
 let branch = "master"
-let commit = "676"
-let sha_1 = "24a93acc1d2d2d2815902aa67acf26a0a0795c65"
+let commit = "677"
+let sha_1 = "85c5034f2b9a788cc1ab75c18815caae7bdb7d5c"
 let str = (branch ^ "." ^ commit ^ " (" ^ sha_1 ^ ")")
 let maintainer = "jahier@imag.fr"
diff --git a/src/soc2c.ml b/src/soc2c.ml
index 754f1ef1..18fb422c 100644
--- a/src/soc2c.ml
+++ b/src/soc2c.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 22/12/2016 (at 16:14) by jahier> *)
+(* Time-stamp: <modified the 06/01/2017 (at 10:24) by Erwan Jahier> *)
 
 
 (* let put (os: out_channel) (fmt:('a, unit, string, unit) format4) : 'a = *)
@@ -1022,7 +1022,7 @@ fixffx $ARM_LOOPLOC -i $n_n.ff >  $n_n.fixed.ffx
 # Let's  run otawa (owcet.arm)\n" ^
             "$OTAWA $execfile $main_step  -f $n_n.fixed.ffx -f $n_n.ffx --add-prop otawa::ilp::OUTPUT_PATH=$main_step.lp \\\n\t>"^
               "$n_n.owcet.arm.log 2>&1 && \n"^
-              "grep WCET $n_n.owcet.arm.log | cut -d \" \" -f 3 > "^
+              "grep WCET $n_n.owcet.arm.log | cut -d \"=\" -f 2 > "^
               "$n.wcet &&\n\n" ^ 
             "WCET=`cat $n.wcet` \n\n" ^ 
               "# Let's compile the c files for ogensim \n" ^
diff --git a/src/socExec.ml b/src/socExec.ml
index 35af586f..d3a35026 100644
--- a/src/socExec.ml
+++ b/src/socExec.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 30/11/2016 (at 17:10) by Erwan Jahier> *)
+(* Time-stamp: <modified the 02/01/2017 (at 18:11) by Erwan Jahier> *)
 
 open Soc
 open Data
@@ -32,152 +32,157 @@ let (array_index : int -> var -> var_expr) =
 let rec (soc_step : Soc.step_method -> Soc.tbl -> Soc.t -> SocExecValue.ctx
          -> SocExecValue.ctx) =
   fun step soc_tbl soc ctx ->
-  profile_info ("SocExec.soc_step \n");
+    profile_info ("SocExec.soc_step \n");
     let soc_name,_,_ = soc.key in
     let ctx = 
       match step.impl with
-        | Extern -> assert false (* fixme !!! *)
-        | Predef -> (
-          try 
-            let ctx = SocExecEvalPredef.get soc.key ctx in
-            ctx
-          with Not_found -> (* Not a predef op *) print_string (
-            "*** internal error in "^soc_name^". Is it defined in SocExecEvalPredef?\n");
-            flush stdout; assert false
-        )
-        | Gaol(vl,gaol) -> List.fold_left (do_gao step.lxm soc_tbl) ctx gaol
-        | Boolred(i,j,k) -> (
-        (* XXX mettre ce code dans socPredef ? (ou socMetaopPredef)*)
-          let inputs, outputs = soc.profile in
-          let b_array = (List.hd inputs) in
-          let cpt = ref 0 in
-          for i = 0 to k-1 do
-            let a_i = array_index i b_array in
-            let v = SocExecValue.get_value ctx a_i in
-            if v = B true then incr cpt;
-          done;
-          let res = B (!cpt >= i && !cpt <= j) in
-          let res_var = fst (List.hd outputs) in
-          let s = sadd ctx.s (res_var::ctx.cpath) res in
-          { ctx with s = s }
-        )
-        | Condact(node_sk, dft_cst) -> (
-          let clk = SocExecValue.get_value ctx (Var ("activate",Bool)) in
-          let vel_in, vel_out = soc.profile in
-          let vel_in  =  List.map (fun x -> Var x) (List.tl vel_in) in
-          let vel_out =  List.map (fun x -> Var x) vel_out in
-          let node_soc = SocUtils.find step.lxm node_sk soc_tbl in
-          let inst_name =
-            match soc.instances with
-              | [] -> let (proc_name,_,_) = node_soc.key in proc_name
-              | [inst] -> fst inst
+      | Extern ->
+        print_string (
+          "\nextern nodes and functions not yet supported in the interpreter, sorry.\n"^
+            "Please use the C code generator (-2c)."
+        );
+        exit 2
+      | Predef -> (
+        try 
+          let ctx = SocExecEvalPredef.get soc.key ctx in
+          ctx
+        with Not_found -> (* Not a predef op *) print_string (
+          "*** internal error in "^soc_name^". Is it defined in SocExecEvalPredef?\n");
+          flush stdout; assert false
+      )
+      | Gaol(vl,gaol) -> List.fold_left (do_gao step.lxm soc_tbl) ctx gaol
+      | Boolred(i,j,k) -> (
+          (* XXX mettre ce code dans socPredef ? (ou socMetaopPredef)*)
+        let inputs, outputs = soc.profile in
+        let b_array = (List.hd inputs) in
+        let cpt = ref 0 in
+        for i = 0 to k-1 do
+          let a_i = array_index i b_array in
+          let v = SocExecValue.get_value ctx a_i in
+          if v = B true then incr cpt;
+        done;
+        let res = B (!cpt >= i && !cpt <= j) in
+        let res_var = fst (List.hd outputs) in
+        let s = sadd ctx.s (res_var::ctx.cpath) res in
+        { ctx with s = s }
+      )
+      | Condact(node_sk, dft_cst) -> (
+        let clk = SocExecValue.get_value ctx (Var ("activate",Bool)) in
+        let vel_in, vel_out = soc.profile in
+        let vel_in  =  List.map (fun x -> Var x) (List.tl vel_in) in
+        let vel_out =  List.map (fun x -> Var x) vel_out in
+        let node_soc = SocUtils.find step.lxm node_sk soc_tbl in
+        let inst_name =
+          match soc.instances with
+          | [] -> let (proc_name,_,_) = node_soc.key in proc_name
+          | [inst] -> fst inst
+          | _ -> assert false
+        in
+        let path_saved = ctx.cpath in
+        let ctx = { ctx with cpath=inst_name::ctx.cpath } in
+        let ctx =
+          if clk = B true then
+            let node_step = match node_soc.step with
+                [step] -> step
               | _ -> assert false
-          in
-          let path_saved = ctx.cpath in
-          let ctx = { ctx with cpath=inst_name::ctx.cpath } in
-          let ctx =
-            if clk = B true then
-              let node_step = match node_soc.step with
-                  [step] -> step
-                | _ -> assert false
-              in
-              let ctx = do_step inst_name node_step ctx soc_tbl node_soc vel_in vel_out in
-              { ctx with cpath=path_saved }
+            in
+            let ctx = do_step inst_name node_step ctx soc_tbl node_soc vel_in vel_out in
+            { ctx with cpath=path_saved }
+          else
+            let first_step = Var ("_memory",Bool) in
+            let ctx =  { ctx with cpath=path_saved } in
+            let v = get_value ctx first_step in
+            if v = U || v = B true then
+                (* We are on the first step of node_soc;
+                   - we assign the output var to the default values *)
+              (assert (List.length dft_cst = List.length vel_out);
+               List.fold_left2 assign_expr ctx dft_cst vel_out)
             else
-              let first_step = Var ("_memory",Bool) in
-              let ctx =  { ctx with cpath=path_saved } in
-              let v = get_value ctx first_step in
-              if v = U || v = B true then
-              (* We are on the first step of node_soc;
-                 - we assign the output var to the default values *)
-                (assert (List.length dft_cst = List.length vel_out);
-                List.fold_left2 assign_expr ctx dft_cst vel_out)
-              else
-               (* We are not on the first step of node_soc; hence we do nothing 
-                  and the output will keep their previous value. *) 
-                ctx
-          in
-          let ctx = { ctx with s = sadd ctx.s ("_memory"::ctx.cpath) (B false) } in
-          ctx
-        )
-        | Iterator(iter, node_sk, n) -> 
-          let node_soc = SocUtils.find step.lxm node_sk soc_tbl in
-          let node_step = match node_soc.step with [step] -> step | _ ->  assert false in
-          let iter_inputs,iter_outputs = soc.profile in
-          let rctx = ref ctx in
-          let (proc_name,_,_) = node_soc.key in 
-          let inst_name =
-            match soc.instances with
-              | [] -> Array.make n proc_name
-              | _  -> Array.of_list (List.map fst soc.instances)
+                (* We are not on the first step of node_soc; hence we do nothing 
+                   and the output will keep their previous value. *) 
+              ctx
+        in
+        let ctx = { ctx with s = sadd ctx.s ("_memory"::ctx.cpath) (B false) } in
+        ctx
+      )
+      | Iterator(iter, node_sk, n) -> 
+        let node_soc = SocUtils.find step.lxm node_sk soc_tbl in
+        let node_step = match node_soc.step with [step] -> step | _ ->  assert false in
+        let iter_inputs,iter_outputs = soc.profile in
+        let rctx = ref ctx in
+        let (proc_name,_,_) = node_soc.key in 
+        let inst_name =
+          match soc.instances with
+          | [] -> Array.make n proc_name
+          | _  -> Array.of_list (List.map fst soc.instances)
+        in
+        for i = 0 to n-1 do
+          rctx := { !rctx with cpath = inst_name.(i)::ctx.cpath };
+          let vel_in, vel_out =
+            match iter with
+            | "map" -> (List.map (array_index i) iter_inputs,
+                        List.map (array_index i) iter_outputs)
+            | "fold" | "red" | "fill" | "fillred" ->
+              let a_in = Var (List.hd iter_inputs) in
+              ( a_in::(List.map (array_index i) (List.tl iter_inputs)),
+                a_in::(List.map (array_index i) (List.tl iter_outputs)))
+            | _ -> assert false (* should not occur *)
           in
-          for i = 0 to n-1 do
-            rctx := { !rctx with cpath = inst_name.(i)::ctx.cpath };
-            let vel_in, vel_out =
-              match iter with
-                | "map" -> (List.map (array_index i) iter_inputs,
-                            List.map (array_index i) iter_outputs)
-                | "fold" | "red" | "fill" | "fillred" ->
-                  let a_in = Var (List.hd iter_inputs) in
-                  ( a_in::(List.map (array_index i) (List.tl iter_inputs)),
-                    a_in::(List.map (array_index i) (List.tl iter_outputs)))
-                | _ -> assert false (* should not occur *)
-            in
-            rctx := do_step inst_name.(i) node_step !rctx soc_tbl node_soc vel_in vel_out;
-            rctx := { !rctx with cpath = List.tl !rctx.cpath };
-          done;
-          if iter <> "map" then (
-            let a_in  = Var (List.hd iter_inputs) in
-            let a_out = Var (List.hd iter_outputs) in
-            rctx := assign_expr !rctx a_in a_out);  (* a_out=a_n *)
-          !rctx;
+          rctx := do_step inst_name.(i) node_step !rctx soc_tbl node_soc vel_in vel_out;
+          rctx := { !rctx with cpath = List.tl !rctx.cpath };
+        done;
+        if iter <> "map" then (
+          let a_in  = Var (List.hd iter_inputs) in
+          let a_out = Var (List.hd iter_outputs) in
+          rctx := assign_expr !rctx a_in a_out);  (* a_out=a_n *)
+        !rctx;
     in
     ctx
 
 and (do_gao : Lxm.t -> Soc.tbl -> SocExecValue.ctx -> gao -> SocExecValue.ctx) =
   fun lxm soc_tbl ctx gao ->
     match gao with
-      | Case(id, id_gao_l,lxm) -> (
-        try 
-          let id_val = get_enum id ctx in
-          let gaol = List.assoc id_val id_gao_l in
-          let ctx = List.fold_left (do_gao lxm soc_tbl) ctx gaol in
-          ctx
-        with Not_found -> ctx
-      )
-      | Call(vel_out, Assign, vel_in,lxm) -> (
-        let ctx = 
-          assert (List.length vel_in = List.length vel_out);
-          List.fold_left2 assign_expr ctx vel_in vel_out
-        in
+    | Case(id, id_gao_l,lxm) -> (
+      try 
+        let id_val = get_enum id ctx in
+        let gaol = List.assoc id_val id_gao_l in
+        let ctx = List.fold_left (do_gao lxm soc_tbl) ctx gaol in
         ctx
-      )
-      | Call(vel_out, Procedure sk, vel_in,lxm) -> (
-        let (proc_name,_,_) = sk in
-        let path_saved = ctx.cpath in
-        let ctx = { ctx with cpath = proc_name::ctx.cpath } in
-        let soc = SocUtils.find lxm sk soc_tbl in
-        let step = match soc.step with [step] -> step | _ ->  assert false in
-        let ctx = do_step proc_name step ctx soc_tbl soc vel_in vel_out in
-        { ctx with 
-          cpath = path_saved 
-        } 
-      )
-      | Call(vel_out, Method((inst_name,sk),step_name), vel_in,lxm) -> (
-        let path_saved = ctx.cpath in
-        let ctx = { ctx with cpath = inst_name::ctx.cpath } in
-        let soc = SocUtils.find lxm sk soc_tbl in
-        let step = try List.find (fun sm -> sm.name = step_name) soc.step
-          with Not_found -> assert false
-        in
-        let ctx = do_step inst_name step ctx soc_tbl soc vel_in vel_out in
-        let ctx = { ctx with cpath = path_saved } in
-        ctx
-      )
+      with Not_found -> ctx
+    )
+    | Call(vel_out, Assign, vel_in,lxm) -> (
+      let ctx = 
+        assert (List.length vel_in = List.length vel_out);
+        List.fold_left2 assign_expr ctx vel_in vel_out
+      in
+      ctx
+    )
+    | Call(vel_out, Procedure sk, vel_in,lxm) -> (
+      let (proc_name,_,_) = sk in
+      let path_saved = ctx.cpath in
+      let ctx = { ctx with cpath = proc_name::ctx.cpath } in
+      let soc = SocUtils.find lxm sk soc_tbl in
+      let step = match soc.step with [step] -> step | _ ->  assert false in
+      let ctx = do_step proc_name step ctx soc_tbl soc vel_in vel_out in
+      { ctx with 
+        cpath = path_saved 
+      } 
+    )
+    | Call(vel_out, Method((inst_name,sk),step_name), vel_in,lxm) -> (
+      let path_saved = ctx.cpath in
+      let ctx = { ctx with cpath = inst_name::ctx.cpath } in
+      let soc = SocUtils.find lxm sk soc_tbl in
+      let step = try List.find (fun sm -> sm.name = step_name) soc.step
+        with Not_found -> assert false
+      in
+      let ctx = do_step inst_name step ctx soc_tbl soc vel_in vel_out in
+      let ctx = { ctx with cpath = path_saved } in
+      ctx
+    )
 and (do_step : Lv6Id.t -> step_method -> SocExecValue.ctx -> Soc.tbl -> Soc.t -> 
      var_expr list -> var_expr list -> SocExecValue.ctx) =
   fun name step ctx soc_tbl soc vel_in vel_out -> 
-  profile_info ("SocExec.do_step "^name^"\n");
+    profile_info ("SocExec.do_step "^name^"\n");
     let soc_in_vars, soc_out_vars = soc.profile in
     let step_in_vars = filter_params soc soc_in_vars step.idx_ins in 
     let step_out_vars = filter_params soc soc_out_vars step.idx_outs in
diff --git a/src/socExecDbg.ml b/src/socExecDbg.ml
index 4ec3d588..268fb749 100644
--- a/src/socExecDbg.ml
+++ b/src/socExecDbg.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 06/12/2016 (at 14:53) by jahier> *)
+(* Time-stamp: <modified the 02/01/2017 (at 18:11) by Erwan Jahier> *)
 open Soc
 open Data
 open SocExecValue
@@ -64,7 +64,12 @@ let rec (soc_step :  Lxm.t -> Soc.step_method -> Soc.tbl -> Soc.t ->
     let soc_name,_,_ = soc.key in
     let event = 
       match step.impl with
-      | Extern -> assert false (* fixme !!! *)
+      | Extern ->
+        print_string (
+          "\nextern nodes and functions not yet supported in the interpreter, sorry.\n"^
+            "Please use the C code generator (-2c)."
+        );
+        exit 2
       | Predef -> (
         try 
           let val_ctx = SocExecEvalPredef.get soc.key val_ctx in
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index 749ad985..3b50a23e 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,5 +1,5 @@
 ==> lus2lic0.sum <==
-Test Run By jahier on Mon Jan  2 15:47:50 
+Test Run By jahier on Fri Jan  6 10:32:53 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic0 tests ===
@@ -64,7 +64,7 @@ XFAIL: Test bad programs (assert): test_lus2lic_no_node should_fail/assert/lecte
 XFAIL: Test bad programs (assert): test_lus2lic_no_node should_fail/assert/s.lus
 
 ==> lus2lic1.sum <==
-Test Run By jahier on Mon Jan  2 15:47:50 
+Test Run By jahier on Fri Jan  6 10:32:54 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic1 tests ===
@@ -399,7 +399,7 @@ PASS: sh multipar.sh
 PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c multipar.lus  {}
 
 ==> lus2lic2.sum <==
-Test Run By jahier on Mon Jan  2 15:48:09 
+Test Run By jahier on Fri Jan  6 10:33:15 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic2 tests ===
@@ -745,7 +745,7 @@ PASS: sh zzz2.sh
 PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c zzz2.lus  {}
 
 ==> lus2lic3.sum <==
-Test Run By jahier on Mon Jan  2 15:48:48 
+Test Run By jahier on Fri Jan  6 10:33:56 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic3 tests ===
@@ -1251,7 +1251,7 @@ PASS: ./myec2c {-o multipar.c multipar.ec}
 PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node multipar.lus {}
 
 ==> lus2lic4.sum <==
-Test Run By jahier on Mon Jan  2 15:48:59 
+Test Run By jahier on Fri Jan  6 10:34:06 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic4 tests ===
@@ -1776,13 +1776,13 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node zzz2.lus {}
 ===============================
 # Total number of failures: 24
 lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 0 seconds
-lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 19 seconds
-lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 38 seconds
-lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 11 seconds
-lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 30 seconds
+lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 20 seconds
+lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 40 seconds
+lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 10 seconds
+lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 31 seconds
 * Ref time: 
-0.05user 0.04system 1:39.74elapsed 0%CPU (0avgtext+0avgdata 5736maxresident)k
-128inputs+0outputs (0major+6144minor)pagefaults 0swaps
+0.06user 0.02system 1:44.06elapsed 0%CPU (0avgtext+0avgdata 5624maxresident)k
+96inputs+0outputs (0major+6038minor)pagefaults 0swaps
 * Quick time (-j 4):
-0.04user 0.04system 0:48.79elapsed 0%CPU (0avgtext+0avgdata 5648maxresident)k
-96inputs+0outputs (0major+6161minor)pagefaults 0swaps
+0.06user 0.02system 0:49.80elapsed 0%CPU (0avgtext+0avgdata 5716maxresident)k
+96inputs+0outputs (0major+6055minor)pagefaults 0swaps
-- 
GitLab