diff --git a/README.txt b/README.txt index 9601a14168efc751ed0b6ce8a0e1e2465d17bc67..50acdeb5bdc3334d7e162038eac334c4c3a2ff5e 100644 --- a/README.txt +++ b/README.txt @@ -1,13 +1,12 @@ (* OASIS_START *) -(* DO NOT EDIT (digest: 7ab3176d34ae05ec7be56f340d54ead0) *) +(* DO NOT EDIT (digest: 7018be8ddc148ce8fff24df3fef8d341) *) lustre-v6 - The Lustre V6 Verimag compiler ========================================== -This package contains: - lus2lic: the (current) name of the compiler (and -interpreter via -exec). - lustre-v6 ocaml lib: allows to call the Lustre v6 -interpreter - from rdbg (and ocaml as a side effect) +This package contains: (1) lus2lic: the (current) name of the compiler (and +interpreter via -exec). (2) the lustre-v6 ocaml lib: allows to call the +Lustre v6 interpreter ocaml See the file [INSTALL.txt](INSTALL.txt) for building and installation instructions. diff --git a/_oasis b/_oasis index c7b4bb6992421dadf2c33a46a3d4dd3d90efc312..8d5e46504a2e3129ed0518bd7fd0b6ee93c73bee 100644 --- a/_oasis +++ b/_oasis @@ -1,11 +1,10 @@ OASISFormat: 0.4 Name: lustre-v6 -Version: 1.648 +Version: 1.649 Synopsis: The Lustre V6 Verimag compiler Description: This package contains: - - lus2lic: the (current) name of the compiler (and interpreter via -exec). - - lustre-v6 ocaml lib: allows to call the Lustre v6 interpreter - from rdbg (and ocaml as a side effect) + (1) lus2lic: the (current) name of the compiler (and interpreter via -exec). + (2) the lustre-v6 ocaml lib: allows to call the Lustre v6 interpreter ocaml Authors: Erwan Jahier and Pascal Raymond Maintainers: erwan.jahier@imag.fr License: PROP diff --git a/src/evalConst.ml b/src/evalConst.ml index 7e6b08e1b63d5ed825ab66f0a43d4cf0ba2a529c..af1d0f9b4087664db62a8d5f64c6af9293385b10 100644 --- a/src/evalConst.ml +++ b/src/evalConst.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 26/02/2015 (at 11:21) by Erwan Jahier> *) +(* Time-stamp: <modified the 27/05/2016 (at 16:01) by Erwan Jahier> *) open Printf @@ -110,7 +110,7 @@ let make_struct_const (teff : Lic.type_) (id_opt : Lv6Id.idref option) else raise (Compile_error( lxm , sprintf "\n*** type error in struct %s, %s instead of %s" - (Lv6Id.string_of_long2 tnm) + (Lv6Id.string_of_long tnm) (Lic.string_of_type vt) (Lic.string_of_type ft) )) with Not_found -> @@ -427,10 +427,10 @@ and eval_array_index | [Int_const_eff i] | [Abstract_const_eff(_,_, (Int_const_eff i), true)] -> int_of_string i | [Abstract_const_eff(id,_,_,false)] -> - raise(EvalArray_error("The const " ^ (Lv6Id.string_of_long2 id) ^ + raise(EvalArray_error("The const " ^ (Lv6Id.string_of_long id) ^ " is abstract")) | [Extern_const_eff(id,_)] -> - raise(EvalArray_error("The const " ^ (Lv6Id.string_of_long2 id) ^ + raise(EvalArray_error("The const " ^ (Lv6Id.string_of_long id) ^ " is extern")) | [x] -> raise(EvalArray_error(sprintf "bad array index, int expected but get %s" diff --git a/src/l2lExpandArrays.ml b/src/l2lExpandArrays.ml index d82b7c0fbb4bc98dae834e9a9bb9e5ba3c124162..ee249e93c2083943b70bf783f102b7de6cf0c287 100644 --- a/src/l2lExpandArrays.ml +++ b/src/l2lExpandArrays.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 14/01/2016 (at 10:40) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2016 (at 16:01) by Erwan Jahier> *) (* Replace structures and arrays by as many variables as necessary. Since structures can be nested, it migth be a lot of new variables... @@ -320,7 +320,7 @@ and (var_trees_of_val_exp : do_const acc lctx lxm const with _ -> let msg = - "\n*** during Array expansion: '"^ (Lv6Id.string_of_long2 idl)^ + "\n*** during Array expansion: '"^ (Lv6Id.string_of_long idl)^ "': Unknown constant.\n*** Current constants are: "^ (LicPrg.fold_consts (fun k c acc -> acc^(Printf.sprintf "\n\t%s" (Lic.string_of_const c))) diff --git a/src/lic.ml b/src/lic.ml index a7a92a41b865fc2ae0d78c965d40630e6af0bfca..8f9a225fcb19685e0b09710bada58e9867f078b2 100644 --- a/src/lic.ml +++ b/src/lic.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 14/01/2016 (at 10:41) by Erwan Jahier> *) +(* Time-stamp: <modified the 27/05/2016 (at 16:01) by Erwan Jahier> *) (** Define the Data Structure representing Compiled programs. By compiled we mean that constant are propagated, packages are @@ -603,7 +603,7 @@ let (clock_of_left: left -> clock) = snd (var_info_of_left left).var_clock_eff -let string_of_ident = Lv6Id.string_of_long2 +let string_of_ident = Lv6Id.string_of_long let rec string_of_type = function | Bool_type_eff -> "bool" diff --git a/src/licDump.ml b/src/licDump.ml index 8b14890459f83540b01888788116599b314ffcb3..af22d41e578a6eedeb4ab892eed1f37a6453c5a4 100644 --- a/src/licDump.ml +++ b/src/licDump.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 23/06/2015 (at 17:03) by Erwan Jahier> *) +(* Time-stamp: <modified the 27/05/2016 (at 16:01) by Erwan Jahier> *) open Lv6errors open Printf @@ -57,7 +57,7 @@ let string_of_ident x = else if global_opt.no_prefix then Lv6Id.no_pack_string_of_long x - else Lv6Id.string_of_long2 x + else Lv6Id.string_of_long x diff --git a/src/licTab.ml b/src/licTab.ml index d19e4e1b917f6035c3ecdcbd46fa78a35eeafc93..d2a22a0114e2a83ceaf69174d1c48be1f466dac9 100644 --- a/src/licTab.ml +++ b/src/licTab.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 03/02/2016 (at 15:10) by Erwan Jahier> *) +(* Time-stamp: <modified the 27/05/2016 (at 16:02) by Erwan Jahier> *) open Lxm @@ -193,7 +193,7 @@ let x_check let x_def = match find_x x_pack_symbols xn lxm with | AstTabSymbol.Local x_def -> x_def | AstTabSymbol.Imported (lid,_) -> - print_string ("*** " ^ (Lv6Id.string_of_long2 lid) ^ "???\n" ^ + print_string ("*** " ^ (Lv6Id.string_of_long lid) ^ "???\n" ^ (Lxm.details lxm)); assert false (* should not occur *) in @@ -399,7 +399,7 @@ let rec type_check (lxm: Lxm.t) : Lic.type_ = Lv6Verbose.exe ~flag:dbg (fun () -> - Printf.printf "#DBG: licTab.type_check '%s'\n" (Lv6Id.string_of_long2 key)); + Printf.printf "#DBG: licTab.type_check '%s'\n" (Lv6Id.string_of_long key)); x_check this.types AstTabSymbol.find_type type_check_do type_builtin lookup_type_eff Lv6Id.pack_of_long Lv6Id.of_long this key lxm @@ -411,7 +411,7 @@ and const_check (lxm: Lxm.t) : Lic.const = Lv6Verbose.exe ~flag:dbg (fun() -> Printf.printf - "#DBG: licTab.const_check '%s'\n" (Lv6Id.string_of_long2 key)); + "#DBG: licTab.const_check '%s'\n" (Lv6Id.string_of_long key)); x_check this.consts AstTabSymbol.find_const const_check_do const_builtin lookup_const_eff Lv6Id.pack_of_long Lv6Id.of_long this @@ -424,7 +424,7 @@ and type_check_interface (lxm: Lxm.t) : Lic.type_ = Lv6Verbose.exe ~flag:dbg (fun() -> Printf.printf - "#DBG: licTab.type_check_interface '%s'\n" (Lv6Id.string_of_long2 key)); + "#DBG: licTab.type_check_interface '%s'\n" (Lv6Id.string_of_long key)); x_check_interface this.prov_types AstTabSymbol.find_type type_check type_check_interface_do type_builtin lookup_type_eff Lv6Id.pack_of_long Lv6Id.of_long this @@ -437,7 +437,7 @@ and const_check_interface (lxm: Lxm.t) : Lic.const = Lv6Verbose.exe ~flag:dbg (fun () -> Printf.printf - "#DBG: licTab.const_check_interface '%s'\n" (Lv6Id.string_of_long2 key)); + "#DBG: licTab.const_check_interface '%s'\n" (Lv6Id.string_of_long key)); x_check_interface this.prov_consts AstTabSymbol.find_const const_check const_check_interface_do const_builtin lookup_const_eff Lv6Id.pack_of_long Lv6Id.of_long this @@ -720,7 +720,7 @@ and (node_check_interface_do: t -> Lic.node_key -> Lxm.t -> if t1 = t2 or t1 is abstract and and t2. *) let msg_prefix = - ("provided node for " ^ (Lv6Id.string_of_long2 (fst nk)) ^ + ("provided node for " ^ (Lv6Id.string_of_long (fst nk)) ^ " is not compatible with its implementation: ") in let str_of_var = Lic.string_of_var_info in @@ -1270,8 +1270,8 @@ and (node_check_interface_do: t -> Lic.node_key -> Lxm.t -> ) with Recursion_error (n, stack) -> let msg = "Recursion loop detected in node " ^ - (Lv6Id.string_of_long2 (fst nk)) in - let msg = msg ^ "\n*** "^ (Lv6Id.string_of_long2 n) ^ " depends on itself\n " + (Lv6Id.string_of_long (fst nk)) in + let msg = msg ^ "\n*** "^ (Lv6Id.string_of_long n) ^ " depends on itself\n " ^ (String.concat "\n*****" stack) in raise (Compile_error (lxm, msg)) @@ -1305,11 +1305,11 @@ let compile_all_item this label x_check_interface string_of_x_key | AstTabSymbol.Imported(item_def,_) -> () (* Printf.printf "\t\t%s %s = %s (imported)\n" *) -(* label (string_of_x_key (to_key id)) (Lv6Id.string_of_long2 item_def) *) +(* label (string_of_x_key (to_key id)) (Lv6Id.string_of_long item_def) *) let compile_all_types pack_name this = - compile_all_item this "type" type_check_interface Lv6Id.string_of_long2 + compile_all_item this "type" type_check_interface Lv6Id.string_of_long Lic.string_of_type (fun id -> Lv6Id.make_long pack_name id) let compile_all_constants pack_name this = @@ -1390,7 +1390,7 @@ let compile_all (this:t) : t = this with Recursion_error (n, stack) -> - let msg = "Recursion loop detected in node " ^ (Lv6Id.string_of_long2 n) in + let msg = "Recursion loop detected in node " ^ (Lv6Id.string_of_long n) in let msg = msg ^ "\n*****" ^ (String.concat "\n*****" stack) in raise (Compile_error (Lxm.dummy "", msg)) diff --git a/src/lv6Id.ml b/src/lv6Id.ml index 26c192c6750529391d781ccd6739590edc6cd9cf..de3edeb79c1313cade52d9f8f477c13b792ff3cd 100644 --- a/src/lv6Id.ml +++ b/src/lv6Id.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 26/05/2014 (at 10:44) by Erwan Jahier> *) +(* Time-stamp: <modified the 27/05/2016 (at 16:02) by Erwan Jahier> *) (* J'ai appele ca symbol (mais ca remplace le ident) : c'est juste une couche qui garantit l'unicite en memoire @@ -69,24 +69,20 @@ let (string_of_long : long -> string) = if Lv6MainArgs.global_opt.Lv6MainArgs.ec || Lv6MainArgs.global_opt.Lv6MainArgs.lv4 then "__" else "::" in - match pn with - | "" -> id - | _ -> + match pn,id with + | "",id -> id + | "Lustre","true" -> "true" + | "Lustre","false" -> "false" + | _,_ -> (* if Lv6MainArgs.global_opt.Lv6MainArgs.no_prefix then id else *) Printf.sprintf "%s%s%s" pn sep id -let (string_of_long2 : long -> string) = - function - | "Lustre","true" -> "true" - | "Lustre","false" -> "false" - | (pn, id) -> pn ^"::"^ id - let (no_pack_string_of_long : long -> string) = fun (pn, id) -> id let (long_to_string : long -> string) = - string_of_long2 + string_of_long let (make_long : pack_name -> t -> long) = fun pn id -> (pn,id) diff --git a/src/lv6Id.mli b/src/lv6Id.mli index 2712b9feb5c13293c82b9f4911275aa64bdc31a9..dcf4369971881ae812072b9ee358244f9a834776 100644 --- a/src/lv6Id.mli +++ b/src/lv6Id.mli @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 26/02/2015 (at 13:45) by Erwan Jahier> *) +(* Time-stamp: <modified the 27/05/2016 (at 16:01) by Erwan Jahier> *) (** *) @@ -14,12 +14,13 @@ val pack_name_of_string : string -> pack_name val pack_name_to_string : pack_name -> string val pack_of_long : long -> pack_name +(* both are the same*) val string_of_long : long -> string -val string_of_long2 : long -> string +val long_of_string : string -> long + (** To ignore pack name (meaningful when generating ec code for exemple *) val no_pack_string_of_long : long -> string val long_to_string : long -> string -val long_of_string : string -> long val make_long : pack_name -> t -> long diff --git a/src/lv6version.ml b/src/lv6version.ml index 29f93db10eea2b177e1f8fd509c1641d3c99acca..dba3854422eaabc3a5944bafcb3d1be60d7f22dd 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 = "648" -let sha_1 = "7a1821319f3451f3e7c4d3bfbe96dd3ba15fd8d5" +let commit = "649" +let sha_1 = "c803b44e75834ebd66d7bef1f4979f11be3f661c" let str = (branch ^ "." ^ commit ^ " (" ^ sha_1 ^ ")") let maintainer = "jahier@imag.fr" diff --git a/src/soc2c.ml b/src/soc2c.ml index 4fb82c2762b0a6f37a032c4d02554e4cde461575..3639e7d7ebfa8e6a2adecbec4457cee1ffa7db5d 100644 --- a/src/soc2c.ml +++ b/src/soc2c.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 18/03/2016 (at 10:41) by Erwan Jahier> *) +(* Time-stamp: <modified the 13/05/2016 (at 16:11) by Erwan Jahier> *) (* let put (os: out_channel) (fmt:('a, unit, string, unit) format4) : 'a = *) @@ -690,7 +690,7 @@ let (gen_loop_file4ogensim : Soc.t -> string -> out_channel -> Soc.tbl -> unit) "); List.iteri define_define (inputs_io@ outputs_io); - putc ("\n/* int main(){\n" ^ gen_main_loop_body inputs outputs soc ctx); + putc ("\n int main(){\n" ^ gen_main_loop_body inputs outputs soc ctx); let to_rif_decl (n,t) = ("\\\""^n^"\\\":" ^(type_to_string t)) in @@ -872,6 +872,11 @@ if [ $# -gt 0 ] ogensim=\"true\" xpdf=\"false\" ;; + \"both\") + otawa=\"true\" + ogensim=\"true\" + xpdf=\"false\" + ;; esac fi cfile="^cfile^ " @@ -886,8 +891,16 @@ then # Let's compile the c files for otawa\n" ^ gcc ^ " > \\\n\t$n_n.owcet.log 2>&1 &&\n\n"^ "orange $cfile ${n_n}_step -o $n_n.ffx > $n_n.orange.log 2>&1 &&\n" ^ - "# Let's run otawa (owcet.arm)\n" ^ - "owcet.arm $execfile $main_step -f $n_n.ffx \\\n\t>"^ + +" +IDIR=`readlink -f fixffx` +IDIR=`dirname \"$IDIR\"` +ARM_LOOPLOC=\"$IDIR/arm.looploc\" + +mkff -x $execfile > $n_n.ff +fixffx $ARM_LOOPLOC -i $n_n.ff > $n_n.fixed.ffx +# Let's run otawa (owcet.arm)\n" ^ + "owcet.arm $execfile $main_step -f $n_n.fixed.ffx -f $n_n.ffx \\\n\t>"^ "$n_n.owcet.arm.log 2>&1 && \n"^ "grep WCET $n_n.owcet.arm.log | cut -d \" \" -f 3 > "^ "$n.wcet &&\n\n" ^ @@ -909,7 +922,7 @@ then "(lurettetop -l 1000 -go -ns2c -o ogensim.rif \\\n\t \ -rp \"sut:socket:127.0.0.1:$freeport:\" \\\n\t \ -rp \"env:lutin:_${n}_env.lut:${n}_env\" || true)) &&\n\n"^ - "getstat.r $n.cycles $WCET + "getstat.r $n.cycles $WCET > $n.stat fi if [ \"$xpdf\" = \"true\" ] then diff --git a/src/socPredef.ml b/src/socPredef.ml index ddd48c8ccbeea2f601e77b465842ea1a7dd554e2..26d6ccae1788a9bc74973618ff3ecac82a5ea3ab 100644 --- a/src/socPredef.ml +++ b/src/socPredef.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 18/03/2016 (at 10:14) by Erwan Jahier> *) +(* Time-stamp: <modified the 27/05/2016 (at 16:02) by Erwan Jahier> *) (** Synchronous Object Code for Predefined operators. *) @@ -193,7 +193,7 @@ let of_soc_key : Soc.key -> Soc.t = impl = Gaol([], [Case((fst cv),[ - (Lv6Id.string_of_long2 cc, [Call([Var(mem)], + (Lv6Id.string_of_long cc, [Call([Var(mem)], Assign, [Var(vin)])])]); Call([Var(vout)], Assign, [Var(mem)])]) }; diff --git a/src/socUtils.ml b/src/socUtils.ml index 91e6ba0c28bf4f22c51d2702bc8dc1d49f47f9c4..a009800a1a8e0ce8e79267b37275ae2330f986fc 100644 --- a/src/socUtils.ml +++ b/src/socUtils.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 18/06/2015 (at 15:08) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2016 (at 16:02) by Erwan Jahier> *) open Soc @@ -81,7 +81,7 @@ let string_of_soc_key_ff: (Soc.key -> Format.formatter -> unit) = (String.concat " -> " (List.map string_of_type_ref types))); (match si_opt with | Nomore -> () - | Curr(cc) -> fprintf ff "%s" (Lv6Id.string_of_long2 cc) + | Curr(cc) -> fprintf ff "%s" (Lv6Id.string_of_long cc) | Slic(f,l,step) -> fprintf ff "[%d .. %d step %d]" f l step | MemInit ve -> string_of_filter_ff ve ff ) diff --git a/src/sortActions.ml b/src/sortActions.ml index e8ff65d017eed369167a5a39876c01750f686c9b..95278cba6ae7b09768cc2ec3fbf72afcab65e50e 100644 --- a/src/sortActions.ml +++ b/src/sortActions.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 03/02/2016 (at 15:09) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2016 (at 16:02) by Erwan Jahier> *) (** topological sort of actions (that may optimize test openning) *) @@ -34,7 +34,7 @@ let rec (gao_of_action: Action.t -> Soc.gao) = | Lic.BaseLic -> acc | Lic.ClockVar i -> acc (* should not occur? *) | Lic.On((value, cvar, _ctyp), outter_clock) -> - let cc = Lv6Id.string_of_long2 value in + let cc = Lv6Id.string_of_long value in let acc = Soc.Case (cvar, [cc, [acc]]) in unpack_clock acc outter_clock in diff --git a/src/unifyType.ml b/src/unifyType.ml index ff9d2d7940892f753558b2ba93b694a2248f9c16..5065c1d9d36e2c82e4388cf625cae2a76839c6ec 100644 --- a/src/unifyType.ml +++ b/src/unifyType.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 14/01/2016 (at 10:51) by Erwan Jahier> *) +(* Time-stamp: <modified the 27/05/2016 (at 16:02) by Erwan Jahier> *) (* 12/07. Premier pas vers une méthode un peu plus standard : @@ -269,7 +269,7 @@ let (profile_is_compatible: node_key -> Lxm.t -> Lic.type_ list * Lic.type_ list | Abstract_type_eff(name, _) -> (TypeVar Any) | t -> t in - let msg_prefix = ("provided node for " ^ (Lv6Id.string_of_long2 (fst nk)) ^ + let msg_prefix = ("provided node for " ^ (Lv6Id.string_of_long (fst nk)) ^ " is not compatible with its implementation: ") in let apply_subst s t = try List.assoc t s with Not_found -> t in diff --git a/test/lus2lic.sum b/test/lus2lic.sum index 4b34c447027ad0d7fa6c93d5556a9f8ab22e0000..09a41cf3b318a88d6baf9dd7dbcd592106bfbae8 100644 --- a/test/lus2lic.sum +++ b/test/lus2lic.sum @@ -1,5 +1,5 @@ ==> lus2lic0.sum <== -Test Run By jahier on Fri Mar 18 10:52:09 +Test Run By jahier on Fri May 27 15:58:52 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 Fri Mar 18 10:52:13 +Test Run By jahier on Fri May 27 15:58:53 Native configuration is x86_64-unknown-linux-gnu === lus2lic1 tests === @@ -396,7 +396,7 @@ PASS: gcc -o multipar.exec multipar_multipar.c multipar_multipar_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c multipar.lus {} ==> lus2lic2.sum <== -Test Run By jahier on Fri Mar 18 10:52:11 +Test Run By jahier on Fri May 27 15:59:08 Native configuration is x86_64-unknown-linux-gnu === lus2lic2 tests === @@ -741,7 +741,7 @@ PASS: gcc -o zzz2.exec zzz2_zzz2.c zzz2_zzz2_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c zzz2.lus {} ==> lus2lic3.sum <== -Test Run By jahier on Fri Mar 18 10:52:15 +Test Run By jahier on Fri May 27 15:59:46 Native configuration is x86_64-unknown-linux-gnu === lus2lic3 tests === @@ -1243,7 +1243,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 Fri Mar 18 10:52:09 +Test Run By jahier on Fri May 27 15:59:59 Native configuration is x86_64-unknown-linux-gnu === lus2lic4 tests === @@ -1764,12 +1764,14 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node zzz2.lus {} # of unexpected failures 4 =============================== # Total number of failures: 23 -lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 0 seconds -lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 21 seconds -lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 42 seconds -lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 15 seconds -lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 44 seconds +lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 1 seconds +lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 15 seconds +lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 38 seconds +lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 13 seconds +lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 40 seconds * Ref time: +0.02user 0.05system 1:46.74elapsed 0%CPU (0avgtext+0avgdata 5120maxresident)k +32inputs+0outputs (0major+5584minor)pagefaults 0swaps * Quick time (-j 4): -0.03user 0.02system 0:44.16elapsed 0%CPU (0avgtext+0avgdata 5228maxresident)k -64inputs+0outputs (0major+5617minor)pagefaults 0swaps +0.02user 0.03system 0:44.48elapsed 0%CPU (0avgtext+0avgdata 5260maxresident)k +32inputs+0outputs (0major+5615minor)pagefaults 0swaps