Skip to content
Snippets Groups Projects
Commit 4ba1afe6 authored by erwan's avatar erwan
Browse files

Fix: the move number was wrong! (I was counting the enabled instead of the activated!)

also, start the first step at 0  instead of 1. Otherwise, with -cd, we
get more  steps than  moves. Indeed,  the first step  is not  really a
step; it just contain the initial state values.
parent aaaa14ee
No related branches found
No related tags found
No related merge requests found
...@@ -8,13 +8,13 @@ let (print_step : int -> int -> SasArg.t -> 'v Env.t -> 'v Process.t list -> str ...@@ -8,13 +8,13 @@ let (print_step : int -> int -> SasArg.t -> 'v Env.t -> 'v Process.t list -> str
(List.flatten enab_ll)) (List.flatten enab_ll))
in in
if args.no_data_file then ( if args.no_data_file then (
Printf.printf "\n#step %s\n%!" (string_of_int (n-i+1)) Printf.printf "\n#step %s\n%!" (string_of_int (n-i))
) else ( ) else (
if args.daemon = Daemon.Custom then ( if args.daemon = Daemon.Custom then (
(* in custom mode, to be able to talk with lurette, this should not be (* in custom mode, to be able to talk with lurette, this should not be
printed on stdout printed on stdout
*) *)
Printf.eprintf "\n#step %s\n" (string_of_int (n-i+1)) ; Printf.eprintf "\n#step %s\n" (string_of_int (n-i)) ;
Printf.eprintf "%s #outs " activate_val; flush stderr; Printf.eprintf "%s #outs " activate_val; flush stderr;
Printf.printf "%s %s\n" (StringOf.env_rif e pl) enable_val; Printf.printf "%s %s\n" (StringOf.env_rif e pl) enable_val;
) else ( ) else (
...@@ -22,7 +22,7 @@ let (print_step : int -> int -> SasArg.t -> 'v Env.t -> 'v Process.t list -> str ...@@ -22,7 +22,7 @@ let (print_step : int -> int -> SasArg.t -> 'v Env.t -> 'v Process.t list -> str
if args.rif then if args.rif then
Printf.printf " %s %s %s\n%!" (StringOf.env_rif e pl) enable_val activate_val Printf.printf " %s %s %s\n%!" (StringOf.env_rif e pl) enable_val activate_val
else ( else (
Printf.printf "\n#step %s\n" (string_of_int (n-i+1)); Printf.printf "\n#step %s\n" (string_of_int (n-i));
Printf.printf "#outs %s %s %s\n%!" (StringOf.env_rif e pl) enable_val activate_val Printf.printf "#outs %s %s %s\n%!" (StringOf.env_rif e pl) enable_val activate_val
); );
); );
...@@ -45,21 +45,23 @@ let (update_round : bool list list -> bool list list -> unit) = ...@@ -45,21 +45,23 @@ let (update_round : bool list list -> bool list list -> unit) =
incr rounds incr rounds
); );
() ()
let bool_ll_to_string bll =
String.concat " "
(List.map (fun b -> if b then "t" else "f") (List.flatten bll))
let (simustep: int -> int -> SasArg.t -> string -> let (simustep: int -> int -> SasArg.t -> string ->
('v Process.t * 'v Register.neighbor list) list -> 'v Env.t -> 'v Env.t * string) = ('v Process.t * 'v Register.neighbor list) list -> 'v Env.t -> 'v Env.t * string) =
fun n i args activate_val pl_n e -> fun n i args activate_val pl_n e ->
(* 1: Get enable processes *) (* 1: Get enable processes *)
let all, enab_ll = Sasacore.Main.get_enable_processes pl_n e in let all, enab_ll = Sasacore.Main.get_enable_processes pl_n e in
let pl = fst(List.split pl_n) in let pl = fst(List.split pl_n) in
List.iter (List.iter (fun b -> if b then incr moves)) enab_ll;
if if
not (args.rif) && List.for_all (fun b -> not b) (List.flatten enab_ll) not (args.rif) && List.for_all (fun b -> not b) (List.flatten enab_ll)
then ( then (
print_step n i args e pl activate_val enab_ll; print_step n i args e pl (bool_ll_to_string enab_ll) enab_ll;
incr rounds; incr rounds;
raise (Silent (n-i+1)) raise (Silent (n-i))
) else ) else
if args.daemon = Daemon.Custom then if args.daemon = Daemon.Custom then
print_step n i args e pl activate_val enab_ll; print_step n i args e pl activate_val enab_ll;
...@@ -68,18 +70,14 @@ let (simustep: int -> int -> SasArg.t -> string -> ...@@ -68,18 +70,14 @@ let (simustep: int -> int -> SasArg.t -> string ->
let next_activate_val, pnal = Daemon.f args.dummy_input let next_activate_val, pnal = Daemon.f args.dummy_input
(args.verbose > 1) args.daemon pl all enab_ll get_action_value (args.verbose > 1) args.daemon pl all enab_ll get_action_value
in in
List.iter (List.iter (fun b -> if b then incr moves)) next_activate_val;
update_round next_activate_val enab_ll; update_round next_activate_val enab_ll;
let next_activate_val = let next_activate_val = bool_ll_to_string next_activate_val in
String.concat " "
(List.map
(fun b -> if b then "t" else "f")
(List.flatten next_activate_val)
)
in
(* 3: Do the steps *) (* 3: Do the steps *)
let ne = Sasacore.Main.do_step pnal e in let ne = Sasacore.Main.do_step pnal e in
if args.daemon <> Daemon.Custom then if args.daemon <> Daemon.Custom then
print_step n i args e pl next_activate_val enab_ll; print_step n i args e pl next_activate_val enab_ll;
ne, next_activate_val ne, next_activate_val
...@@ -91,6 +89,9 @@ let rec (simuloop: int -> int -> SasArg.t -> string -> ...@@ -91,6 +89,9 @@ let rec (simuloop: int -> int -> SasArg.t -> string ->
print_string "#q\n"; flush stdout print_string "#q\n"; flush stdout
) )
let plur i = if i>1 then "s" else ""
let () = let () =
let args, pl_n, e = Sasacore.Main.make true Sys.argv in let args, pl_n, e = Sasacore.Main.make true Sys.argv in
try try
...@@ -100,8 +101,8 @@ let () = ...@@ -100,8 +101,8 @@ let () =
| Failure msg -> Printf.eprintf " [sasa] Error: %s\n%!" msg | Failure msg -> Printf.eprintf " [sasa] Error: %s\n%!" msg
| Silent i -> | Silent i ->
let str = if args.rif then "#" else "" in let str = if args.rif then "#" else "" in
Printf.eprintf "\n%sThis algo is silent after %i moves, %i steps, %i rounds.\n" Printf.eprintf "\n%sThis algo is silent after %i move%s, %i step%s, %i round%s.\n"
str !moves i !rounds; str !moves (plur !moves) i (plur i) !rounds (plur !rounds);
flush stderr; flush stderr;
flush stdout; flush stdout;
print_string "\n#quit\n"; print_string "\n#quit\n";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment