diff --git a/src/lus2licRun.ml b/src/lus2licRun.ml index 3e6096372ba4769172527fbac923419c1278ba8d..95dae55525ca203992d8efc5017af459e99f8217 100644 --- a/src/lus2licRun.ml +++ b/src/lus2licRun.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 26/03/2014 (at 16:12) by Erwan Jahier> *) +(* Time-stamp: <modified the 10/06/2014 (at 10:46) by Erwan Jahier> *) (*----------------------------------------------------------------------- ** Copyright (C) - Verimag. *) @@ -44,8 +44,8 @@ let make argv = ) in let soc = try Soc.SocMap.find sk soc_tbl with Not_found -> assert false in - let soc_inputs = (SocExec.expand_profile false (fst soc.profile)) in - let soc_outputs = (SocExec.expand_profile true (snd soc.profile)) in + let soc_inputs = (SocVar.expand_profile false false (fst soc.profile)) in + let soc_outputs = (SocVar.expand_profile true false (snd soc.profile)) in let (vntl_i:Data.vntl) = (fst soc.profile) in let (vntl_o:Data.vntl) = (snd soc.profile) in let oc = stdout in @@ -57,7 +57,7 @@ let make argv = fun ctx vl -> (* let sl = List.map (fun var -> fst var, SocExecValue.get_value ctx (Var var)) vl in *) let sl = SocExecValue.filter_top_subst ctx.s in - let sl = List.flatten (List.map SocExec.expand_subst sl) in + let sl = List.flatten (List.map SocVar.expand_subst sl) in (* If the order ever matters, I could try the following. : try List.map (fun v -> fst v, List.assoc (fst v) sl) vl with Not_found -> assert false @@ -66,7 +66,7 @@ let make argv = in let (add_subst : Data.subst list -> SocExecValue.substs -> SocExecValue.substs) = fun s ctx_s -> - let s = SocExec.unexpand_profile s (fst soc.profile) in + let s = SocVar.unexpand_profile s (fst soc.profile) in List.fold_left (fun acc (id,v) -> SocExecValue.sadd acc [id] v) ctx_s s in let ctx_ref = ref (SocExecValue.create_ctx soc_tbl soc) in diff --git a/src/main.ml b/src/main.ml index e54e4d27a61315cbf1a9bbf7ec091b03dbc03a2d..ae05589b972a4aae72e92517b82eb129ce5a8a5e 100644 --- a/src/main.ml +++ b/src/main.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 02/06/2014 (at 10:50) by Erwan Jahier> *) +(* Time-stamp: <modified the 10/06/2014 (at 10:46) by Erwan Jahier> *) open Verbose open AstV6 @@ -63,8 +63,8 @@ let (gen_rif_interface : LicPrg.t -> Ident.idref option -> Lv6MainArgs.t -> unit in let soc = try Soc.SocMap.find msk zesoc with Not_found -> assert false in let invars,outvars=soc.Soc.profile in - let invars = SocExec.expand_profile false invars in - let outvars = SocExec.expand_profile true outvars in + let invars = SocVar.expand_profile false false invars in + let outvars = SocVar.expand_profile true false outvars in let invars_str = List.map (fun (n,t) -> n^":"^(my_type_to_string t)) invars in let outvars_str = List.map (fun (n,t) -> n^":"^(my_type_to_string t)) outvars in print_string ("#inputs "^ (String.concat " " invars_str) ^"\n"); @@ -110,8 +110,8 @@ let (gen_autotest_files : LicPrg.t -> Ident.idref option -> Lv6MainArgs.t -> uni in let soc = try Soc.SocMap.find msk zesoc with Not_found -> assert false in let invars,outvars=soc.Soc.profile in - let invars = SocExec.expand_profile false invars in - let outvars = SocExec.expand_profile true outvars in + let invars = SocVar.expand_profile false false invars in + let outvars = SocVar.expand_profile true false outvars in let invars_str = List.map (fun (n,t) -> n^":"^(my_type_to_string true t)) invars in let outvars_str = List.map (fun (n,t) -> n^":"^(my_type_to_string false t)) outvars in let name = main_node.Ident.id_id in diff --git a/src/soc2c.ml b/src/soc2c.ml index dd6126ee14310ccbabd76ad90d34d0015545df56..bf18aae7568a10788e94135d06dfdbe35396a568 100644 --- a/src/soc2c.ml +++ b/src/soc2c.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 06/06/2014 (at 10:41) by Erwan Jahier> *) +(* Time-stamp: <modified the 10/06/2014 (at 10:55) by Erwan Jahier> *) (* let put (os: out_channel) (fmt:('a, unit, string, unit) format4) : 'a = *) @@ -14,9 +14,24 @@ let rec (type_to_string : Data.t -> string) = | Bool -> "_boolean" | Int -> "_integer" | Real-> "_real" - | Extern s -> s ^ "/* extern */" + | Extern s -> s | Enum (s, sl) -> id2s s - | Struct (sid,_) -> (id2s sid) ^ "/* struct */" + | Struct (sid,_) -> (id2s sid) + | Array (ty, sz) -> Printf.sprintf "%s^%d" (type_to_string ty) sz + | Alpha nb -> "alpha_"^(string_of_int nb) + in + str + +let rec (type_to_string2 : Data.t -> string) = + fun v -> + let str = + match v with + | Bool -> "bool" + | Int -> "int" + | Real-> "real" + | Extern s -> s + | Enum (s, sl) -> id2s s + | Struct (sid,_) -> (id2s sid) | Array (ty, sz) -> Printf.sprintf "%s^%d" (type_to_string ty) sz | Alpha nb -> "alpha_"^(string_of_int nb) in @@ -233,7 +248,7 @@ let rec (lic_type_to_c: Lic.type_ -> string) = let field_to_c (id,(tf,_opt)) = Printf.sprintf " %s %s;\n" (lic_type_to_c tf) (id2s id) in - Printf.sprintf "struct %s { \n %s }" + Printf.sprintf "struct %s { %s }" (long2s name) (String.concat "" (List.map field_to_c fl)) | TypeVar Any -> assert false @@ -312,9 +327,9 @@ let (typedef : LicPrg.t -> Soc.tbl -> Soc.t -> string) = let to_c k t = Printf.sprintf "typedef %s %s;\n" (lic_type_to_c t) (long2s k) in - LicPrg.fold_types (fun k t acc -> acc ^ (to_c k t)) licprg "// Type definitions \n" + LicPrg.fold_types (fun k t acc -> acc ^ (to_c k t)) licprg "" in - "// user type def \n"^user_typedef + "// User typedef \n"^user_typedef ^"// Memoryless soc ctx typedef \n"^soc_ctx_typedef_without ^"// Memoryfull soc ctx typedef \n"^soc_ctx_typedef_with @@ -489,9 +504,10 @@ int main(){ ++s; "); let inputs,outputs = soc.profile in - (* XXX do something for arrays and struct ! *) + let inputs = SocVar.expand_profile true true inputs in + let outputs = SocVar.expand_profile true true outputs in List.iter (fun (id,t) -> - let t = Data.type_to_string t in + let t = type_to_string2 t in let str = Printf.sprintf " ctx->%s = _get_%s(\"%s\");\n" id t id in putc str ) diff --git a/src/socExec.ml b/src/socExec.ml index ff9989a9b8c6b39e9050089715b80c2f0c65d160..b6dafe187255938be5e3d2288f7eb3242e2a8dcb 100644 --- a/src/socExec.ml +++ b/src/socExec.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 27/02/2014 (at 17:32) by Erwan Jahier> *) +(* Time-stamp: <modified the 10/06/2014 (at 10:47) by Erwan Jahier> *) open Soc open Data @@ -188,110 +188,11 @@ and (filter_params : Soc.t -> Soc.var list -> int list -> Soc.var list) = let res = List.map (fun i -> local_nth i el) il in res -(* exported *) -let rec (expand_profile : bool -> Soc.var list -> Soc.var list) = - fun enum_flag vl -> - let res = List.flatten (List.map (expand_var enum_flag) vl) in - (* fix point. now useless ? *) - if List.length res = List.length vl then res else - expand_profile enum_flag res -and expand_var enum_flag var = match var with - | (vn,(Bool| Int | Real)) -> [var] - | (vn,Enum(n,l)) -> if enum_flag then [vn,Int] else [var] - | (vn,Array(vt,i)) -> - let res = ref [] in - for k=i-1 downto 0 do - res := (vn^"_"^(string_of_int k),vt) :: !res; - done; - (expand_profile enum_flag !res) - | (vn,Struct(name,fl)) -> expand_profile enum_flag (List.map (fun (fn,t) -> vn^"_"^fn,t ) fl) - | (vn,Extern id) -> - print_string "Extern node not yet supported, sorry\n"; flush stdout; - assert false (* finish me! *) - | (vn,Alpha _) -> assert false (* should not occur *) - -let (int_to_enum : Data.v -> Soc.ident list -> Data.v) = - fun v el -> - match v with - | I i -> (try E (List.nth el i,i) with _ -> - failwith ("Enum out of the range [0,"^(string_of_int (List.length el))^"]")) - | _ -> assert false (* should not occur *) - -let rec (expand_subst: Data.subst -> Data.subst list) = - fun s -> - let rec aux acc (n,v) = - match v with - | U | I _ | F _ | B _ -> (n,v)::acc - | E(_e,i) -> (n,I i)::acc - | S fl -> - let f (fn,fv) = n^"_"^fn, fv in - let fl = List.map f fl in - List.fold_left aux acc fl - | A a -> - let res = ref acc in - for i=0 to (Array.length a)-1 do - let n_i = n^"_"^(string_of_int i) in - res := aux !res (n_i, a.(i)); - done; - !res - in - aux [] s - -(* A local shortcut to ease the profile def *) -type sl = Data.subst list - -(* Reconstruct the flattenned data *) -let (unexpand_profile : sl -> Soc.var list -> sl) = - fun sl vl -> - let rec (aux : sl -> sl -> Soc.var list -> sl * sl)= - fun sl_done sl_todo vl -> - (* Returns the (accumulated) result and the unused subst - (which should be empty at the top-level call) *) - match sl_todo, vl with - | [],_::_ -> sl_done,[] - | _,[] -> sl_done, sl_todo - | s::sl, (_, (Bool| Int | Real))::vl -> aux (s::sl_done) sl vl - | (id,v)::sl, (_,Enum(n,el))::vl -> - let s = (id, int_to_enum v el) in - aux (s::sl_done) sl vl - | _, (vn, Array(vt,i))::vl -> ( - let sl_todo_ref = ref sl_todo in - let sl_done_ref = ref [] in - let a_fake_value = I 42 in - let res = Array.make i a_fake_value in - for k=0 to i-1 do - let (vk_l:Soc.var list) = [("fake_name",vt)] in - let (sl_done_v, sl_todo_v) = aux !sl_done_ref !sl_todo_ref vk_l in - sl_todo_ref:=sl_todo_v; - sl_done_ref:=sl_done_v; - Array.set res k (snd (List.hd !sl_done_ref)); - done; - let sl_done = (vn, A res)::sl_done in - aux sl_done !sl_todo_ref vl - ) - | _, (vn,Struct(sn,fl))::vl -> - let sl_todo, fl = List.fold_left aux_field (sl_todo,[]) fl in - let sl_done = (vn, S fl)::sl_done in - aux sl_done sl_todo vl - - | _, (vn,Extern id)::_ -> assert false (* finish me! *) - | _, (vn,Alpha _ )::_ -> assert false (* should not occur *) - - and (aux_field : sl * (ident * Data.v) list -> ident * Data.t -> sl * (ident * Data.v) list ) = - fun (sl_todo, fl) (fn, t) -> - let new_sl_done, sl_todo = aux [] sl_todo [fn,t] in - let (_,v) = List.hd new_sl_done in - sl_todo, (fn,v)::fl - - in - let res, remaining = aux [] sl vl in - assert (remaining=[]); - res (* [add_data_subst vtnl data_s s] add the data_s to s; *) let (add_data_subst : var list -> Data.subst list -> SocExecValue.substs -> SocExecValue.substs) = fun vntl_i s ctx_s -> - let s = unexpand_profile s vntl_i in + let s = SocVar.unexpand_profile s vntl_i in List.fold_left (fun acc (id,v) -> sadd acc [id] v) ctx_s s let (read_soc_input : Lv6MainArgs.t -> var list -> Data.vntl -> out_channel -> substs -> substs) = @@ -310,7 +211,7 @@ let rec (loop_step : Lv6MainArgs.t -> Soc.tbl -> Soc.var list -> Data.vntl -> Da let ctx = soc_step step soc_tbl soc ctx in let ctx = { ctx with s = sadd ctx.s ("$first_step"::ctx.cpath) (B false)} in let s = SocExecValue.filter_top_subst ctx.s in - let s = List.flatten(List.map expand_subst s) in + let s = List.flatten(List.map SocVar.expand_subst s) in let f2s = SocUtils.my_string_of_float_precision opt.Lv6MainArgs.precision in if not opt.rif then RifIO.write oc " #outs "; RifIO.write_outputs oc f2s exp_vntl_o_str s; @@ -323,8 +224,8 @@ let (f : Lv6MainArgs.t -> Soc.tbl -> Soc.key -> unit) = fun opt soc_tbl sk -> let soc = try SocMap.find sk soc_tbl with Not_found -> assert false in let ctx = SocExecValue.create_ctx soc_tbl soc in - let exp_vntl_i = expand_profile true (fst soc.profile) in - let exp_vntl_o = expand_profile true (snd soc.profile) in + let exp_vntl_i = SocVar.expand_profile true false (fst soc.profile) in + let exp_vntl_o = SocVar.expand_profile true false (snd soc.profile) in let oc = if opt.Lv6MainArgs.outfile = "" then stdout else let rif_file = diff --git a/src/socExec.mli b/src/socExec.mli index 649cbb0c78edd382101a09cc3301f9c6e0cf2eab..6eabf8cee2e7c0080eebe0c024009e1182b0a617 100644 --- a/src/socExec.mli +++ b/src/socExec.mli @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 26/04/2013 (at 15:39) by Erwan Jahier> *) +(* Time-stamp: <modified the 06/06/2014 (at 15:09) by Erwan Jahier> *) (* The entry point for lus2lic -exec *) val f : Lv6MainArgs.t -> Soc.tbl -> Soc.key -> unit @@ -8,9 +8,3 @@ val do_step : Soc.tbl -> Soc.t -> SocExecValue.ctx -> SocExecValue.ctx val do_step_dbg : Soc.tbl -> Soc.t -> Event.ctx -> SocExecValue.ctx -> (SocExecValue.ctx -> Event.t) -> Event.t - -(* Expand struct and arrays when communicating with the outside world *) - (* the bool flag control the enum expansion *) -val expand_profile : bool -> Soc.var list -> Soc.var list -val unexpand_profile : Data.subst list -> Soc.var list -> Data.subst list -val expand_subst: Data.subst -> Data.subst list diff --git a/src/socVar.ml b/src/socVar.ml new file mode 100644 index 0000000000000000000000000000000000000000..251c746446d35262087a64e9854115369e49a0f6 --- /dev/null +++ b/src/socVar.ml @@ -0,0 +1,117 @@ +(* Time-stamp: <modified the 10/06/2014 (at 11:10) by Erwan Jahier> *) + +open Data + +let rec (expand_profile : bool -> bool -> Soc.var list -> Soc.var list) = + fun enum_flag c_access vl -> + let res = List.flatten (List.map (expand_var enum_flag c_access) vl) in + (* fix point. now useless ? *) + if List.length res = List.length vl then res else + expand_profile enum_flag c_access res +and expand_var enum_flag c_access var = match var with + | (vn,(Bool| Int | Real)) -> [var] + | (vn,Enum(n,l)) -> if enum_flag then [vn,Int] else [var] + | (vn,Array(vt,i)) -> + let res = ref [] in + for k=i-1 downto 0 do + let access = + if c_access then "["^(string_of_int k)^"]" else "_"^(string_of_int k) + in + res := (vn^access,vt) :: !res; + done; + (expand_profile enum_flag c_access !res) + | (vn,Struct(name,fl)) -> + expand_profile enum_flag c_access + (List.map (fun (fn,t) -> vn^(if c_access then "." else "_")^fn,t ) fl) + | (vn,Extern id) -> + print_string "*** Extern node not yet supported, sorry\n"; flush stdout; + assert false (* finish me! *) + | (vn,Alpha _) -> assert false (* should not occur *) + +let (int_to_enum : Data.v -> Soc.ident list -> Data.v) = + fun v el -> + match v with + | I i -> (try E (List.nth el i,i) with _ -> + failwith ("Enum out of the range [0,"^(string_of_int (List.length el))^"]")) + | _ -> assert false (* should not occur *) + +let rec (expand_subst: Data.subst -> Data.subst list) = + fun s -> + let rec aux acc (n,v) = + match v with + | U | I _ | F _ | B _ -> (n,v)::acc + | E(_e,i) -> (n,I i)::acc + | S fl -> + let f (fn,fv) = n^"_"^fn, fv in + let fl = List.map f fl in + List.fold_left aux acc fl + | A a -> + let res = ref acc in + for i=0 to (Array.length a)-1 do + let n_i = n^"_"^(string_of_int i) in + res := aux !res (n_i, a.(i)); + done; + !res + in + aux [] s + +(* exported *) + +let (int_to_enum : Data.v -> Soc.ident list -> Data.v) = + fun v el -> + match v with + | I i -> (try E (List.nth el i,i) with _ -> + failwith ("Enum out of the range [0,"^(string_of_int (List.length el))^"]")) + | _ -> assert false (* should not occur *) + + +(* A local shortcut to ease the profile def *) +type sl = Data.subst list + +(* Reconstruct the flattenned data *) +let (unexpand_profile : sl -> Soc.var list -> sl) = + fun sl vl -> + let rec (aux : sl -> sl -> Soc.var list -> sl * sl)= + fun sl_done sl_todo vl -> + (* Returns the (accumulated) result and the unused subst + (which should be empty at the top-level call) *) + match sl_todo, vl with + | [],_::_ -> sl_done,[] + | _,[] -> sl_done, sl_todo + | s::sl, (_, (Bool| Int | Real))::vl -> aux (s::sl_done) sl vl + | (id,v)::sl, (_,Enum(n,el))::vl -> + let s = (id, int_to_enum v el) in + aux (s::sl_done) sl vl + | _, (vn, Array(vt,i))::vl -> ( + let sl_todo_ref = ref sl_todo in + let sl_done_ref = ref [] in + let a_fake_value = I 42 in + let res = Array.make i a_fake_value in + for k=0 to i-1 do + let (vk_l:Soc.var list) = [("fake_name",vt)] in + let (sl_done_v, sl_todo_v) = aux !sl_done_ref !sl_todo_ref vk_l in + sl_todo_ref:=sl_todo_v; + sl_done_ref:=sl_done_v; + Array.set res k (snd (List.hd !sl_done_ref)); + done; + let sl_done = (vn, A res)::sl_done in + aux sl_done !sl_todo_ref vl + ) + | _, (vn,Struct(sn,fl))::vl -> + let sl_todo, fl = List.fold_left aux_field (sl_todo,[]) fl in + let sl_done = (vn, S fl)::sl_done in + aux sl_done sl_todo vl + + | _, (vn,Extern id)::_ -> assert false (* finish me! *) + | _, (vn,Alpha _ )::_ -> assert false (* should not occur *) + + and (aux_field : sl * (ident * Data.v) list -> ident * Data.t -> sl * (ident * Data.v) list ) = + fun (sl_todo, fl) (fn, t) -> + let new_sl_done, sl_todo = aux [] sl_todo [fn,t] in + let (_,v) = List.hd new_sl_done in + sl_todo, (fn,v)::fl + + in + let res, remaining = aux [] sl vl in + assert (remaining=[]); + res diff --git a/src/socVar.mli b/src/socVar.mli new file mode 100644 index 0000000000000000000000000000000000000000..4decbb75b63e2366ead28607ab1a6f0daf4b2f00 --- /dev/null +++ b/src/socVar.mli @@ -0,0 +1,17 @@ +(* Time-stamp: <modified the 10/06/2014 (at 10:44) by Erwan Jahier> *) + + +(** Expand struct and arrays when communicating with the outside world *) + + +(** If the first bool flag is true, enum are translated into integers + + If the second one is true, we generate var name that actually corresponds + to their access in C. For instance, an array element that is itself in a structure + would be named "S.f[3]" instead of "S_f_3" +*) + +val expand_profile : bool -> bool -> Soc.var list -> Soc.var list + +val unexpand_profile : Data.subst list -> Soc.var list -> Data.subst list +val expand_subst: Data.subst -> Data.subst list diff --git a/test/lus2lic.sum b/test/lus2lic.sum index 829d7662703310e72b44f881093643621344e14e..eb5d7927cacd841f1fb003176b0ed7a381ab9dd9 100644 --- a/test/lus2lic.sum +++ b/test/lus2lic.sum @@ -1,4 +1,4 @@ -Test Run By jahier on Fri Jun 6 10:41:47 2014 +Test Run By jahier on Tue Jun 10 11:01:45 2014 Native configuration is i686-pc-linux-gnu === lus2lic tests === @@ -44,7 +44,7 @@ PASS: ./lus2lic {-ec -o /tmp/enum0.ec should_work/enum0.lus} PASS: ./myec2c {-o /tmp/enum0.c /tmp/enum0.ec} FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/enum0.lus PASS: ./lus2lic {-2c should_work/enum0.lus -n enum0} -FAIL: Check that the generated C code compiles : gcc enum0_enum0.c enum0_enum0_loop.c +PASS: gcc enum0_enum0.c enum0_enum0_loop.c PASS: ./lus2lic {-o /tmp/ck6.lic should_work/ck6.lus} PASS: ./lus2lic {-ec -o /tmp/ck6.ec should_work/ck6.lus} PASS: ./myec2c {-o /tmp/ck6.c /tmp/ck6.ec} @@ -352,7 +352,7 @@ PASS: ./lus2lic {-ec -o /tmp/struct_with.ec should_work/struct_with.lus} PASS: ./myec2c {-o /tmp/struct_with.c /tmp/struct_with.ec} PASS: ../utils/test_lus2lic_no_node should_work/struct_with.lus PASS: ./lus2lic {-2c should_work/struct_with.lus -n struct_with} -FAIL: Check that the generated C code compiles : gcc struct_with_struct_with.c struct_with_struct_with_loop.c +PASS: gcc struct_with_struct_with.c struct_with_struct_with_loop.c PASS: ./lus2lic {-o /tmp/test_node_expand.lic should_work/test_node_expand.lus} PASS: ./lus2lic {-ec -o /tmp/test_node_expand.ec should_work/test_node_expand.lus} PASS: ./myec2c {-o /tmp/test_node_expand.c /tmp/test_node_expand.ec} @@ -636,7 +636,7 @@ PASS: ./lus2lic {-ec -o /tmp/mm3.ec should_work/mm3.lus} PASS: ./myec2c {-o /tmp/mm3.c /tmp/mm3.ec} PASS: ../utils/test_lus2lic_no_node should_work/mm3.lus PASS: ./lus2lic {-2c should_work/mm3.lus -n mm3} -FAIL: Check that the generated C code compiles : gcc mm3_mm3.c mm3_mm3_loop.c +PASS: gcc mm3_mm3.c mm3_mm3_loop.c PASS: ./lus2lic {-o /tmp/over2.lic should_work/over2.lus} PASS: ./lus2lic {-ec -o /tmp/over2.ec should_work/over2.lus} PASS: ./myec2c {-o /tmp/over2.c /tmp/over2.ec} @@ -654,7 +654,7 @@ PASS: ./lus2lic {-ec -o /tmp/complex.ec should_work/complex.lus} PASS: ./myec2c {-o /tmp/complex.c /tmp/complex.ec} FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/complex.lus PASS: ./lus2lic {-2c should_work/complex.lus -n complex} -FAIL: Check that the generated C code compiles : gcc complex_complex.c complex_complex_loop.c +PASS: gcc complex_complex.c complex_complex_loop.c PASS: ./lus2lic {-o /tmp/initial.lic should_work/initial.lus} PASS: ./lus2lic {-ec -o /tmp/initial.ec should_work/initial.lus} PASS: ./myec2c {-o /tmp/initial.c /tmp/initial.ec} @@ -936,7 +936,7 @@ PASS: ./lus2lic {-ec -o /tmp/contractForElementSelectionInArray.ec should_work/c PASS: ./myec2c {-o /tmp/contractForElementSelectionInArray.c /tmp/contractForElementSelectionInArray.ec} PASS: ../utils/test_lus2lic_no_node should_work/contractForElementSelectionInArray.lus PASS: ./lus2lic {-2c should_work/contractForElementSelectionInArray.lus -n contractForElementSelectionInArray} -FAIL: Check that the generated C code compiles : gcc contractForElementSelectionInArray_contractForElementSelectionInArray.c contractForElementSelectionInArray_contractForElementSelectionInArray_loop.c +PASS: gcc contractForElementSelectionInArray_contractForElementSelectionInArray.c contractForElementSelectionInArray_contractForElementSelectionInArray_loop.c PASS: ./lus2lic {-o /tmp/iterFibo.lic should_work/iterFibo.lus} PASS: ./lus2lic {-ec -o /tmp/iterFibo.ec should_work/iterFibo.lus} PASS: ./myec2c {-o /tmp/iterFibo.c /tmp/iterFibo.ec} @@ -1094,7 +1094,7 @@ PASS: ./lus2lic {-ec -o /tmp/test_struct.ec should_work/test_struct.lus} PASS: ./myec2c {-o /tmp/test_struct.c /tmp/test_struct.ec} PASS: ../utils/test_lus2lic_no_node should_work/test_struct.lus PASS: ./lus2lic {-2c should_work/test_struct.lus -n test_struct} -FAIL: Check that the generated C code compiles : gcc test_struct_test_struct.c test_struct_test_struct_loop.c +PASS: gcc test_struct_test_struct.c test_struct_test_struct_loop.c PASS: ./lus2lic {-o /tmp/uu.lic should_work/uu.lus} PASS: ./lus2lic {-ec -o /tmp/uu.ec should_work/uu.lus} PASS: ./myec2c {-o /tmp/uu.c /tmp/uu.ec} @@ -1379,7 +1379,7 @@ PASS: ./lus2lic {-o /tmp/simple.lic should_work/simple.lus} PASS: ./lus2lic {-ec -o /tmp/simple.ec should_work/simple.lus} PASS: ./myec2c {-o /tmp/simple.c /tmp/simple.ec} FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/simple.lus -PASS: ./lus2lic {-2c should_work/simple.lus -n simple} +FAIL: Generate c code : ./lus2lic {-2c should_work/simple.lus -n simple} FAIL: Check that the generated C code compiles : gcc simple_simple.c simple_simple_loop.c PASS: ./lus2lic {-o /tmp/func_with_body.lic should_work/func_with_body.lus} PASS: ./lus2lic {-ec -o /tmp/func_with_body.ec should_work/func_with_body.lus} @@ -1468,9 +1468,9 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman === lus2lic Summary === -# of expected passes 1116 -# of unexpected failures 282 +# of expected passes 1121 +# of unexpected failures 277 # of unexpected successes 21 # of expected failures 37 -testcase ./lus2lic.tests/non-reg.exp completed in 113 seconds +testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds testcase ./lus2lic.tests/progression.exp completed in 0 seconds diff --git a/test/lus2lic.time b/test/lus2lic.time index 68f663399e42b00179445c364acd61ef4e423f60..2894b2b808b9bf9dd9f4d005c516f1b39cee73e7 100644 --- a/test/lus2lic.time +++ b/test/lus2lic.time @@ -1,2 +1,2 @@ -testcase ./lus2lic.tests/non-reg.exp completed in 113 seconds +testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds testcase ./lus2lic.tests/progression.exp completed in 0 seconds