From 8007cdabbe9203004a6eb4e0e73f6d41dab2fd2d Mon Sep 17 00:00:00 2001 From: "Gabriel B. Sant'Anna" <baiocchi.gabriel@gmail.com> Date: Mon, 5 Apr 2021 15:57:43 +0200 Subject: [PATCH] Test multiple actions --- coloring/dice5_oracle.lus | 8 ++++---- coloring/p.lus | 11 ++++++----- coloring/p.ml | 3 ++- coloring/state.ml | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/coloring/dice5_oracle.lus b/coloring/dice5_oracle.lus index 356cc51b..f1913087 100644 --- a/coloring/dice5_oracle.lus +++ b/coloring/dice5_oracle.lus @@ -3,8 +3,8 @@ include "../../test/lustre/oracle_utils.lus" node oracle( p0_color:int;p1_color:int;p2_color:int;p3_color:int;p4_color:int; - Enab_p0_recolor,Enab_p1_recolor,Enab_p2_recolor,Enab_p3_recolor,Enab_p4_recolor:bool; - p0_recolor,p1_recolor,p2_recolor,p3_recolor,p4_recolor:bool) + Enab_p0_recolor,Enab_p0_noop,Enab_p1_recolor,Enab_p1_noop,Enab_p2_recolor,Enab_p2_noop,Enab_p3_recolor,Enab_p3_noop,Enab_p4_recolor,Enab_p4_noop:bool; + p0_recolor,p0_noop,p1_recolor,p1_noop,p2_recolor,p2_noop,p3_recolor,p3_noop,p4_recolor,p4_noop:bool) returns (ok:bool); var Acti:bool^actions_number^card; @@ -13,8 +13,8 @@ var nodes : state^card; enables : bool^actions_number^card; let - Acti = [[p0_recolor],[p1_recolor],[p2_recolor],[p3_recolor],[p4_recolor]]; - Enab = [[Enab_p0_recolor],[Enab_p1_recolor],[Enab_p2_recolor],[Enab_p3_recolor],[Enab_p4_recolor]]; + Acti = [[p0_recolor,p0_noop],[p1_recolor,p1_noop],[p2_recolor,p2_noop],[p3_recolor,p3_noop],[p4_recolor,p4_noop]]; + Enab = [[Enab_p0_recolor,Enab_p0_noop],[Enab_p1_recolor,Enab_p1_noop],[Enab_p2_recolor,Enab_p2_noop],[Enab_p3_recolor,Enab_p3_noop],[Enab_p4_recolor,Enab_p4_noop]]; Stat = [ p0_color, p1_color, p2_color, p3_color, p4_color ]; nodes, enables = dice5(pre(Acti), Stat); diff --git a/coloring/p.lus b/coloring/p.lus index 04c27553..7b69e1d2 100644 --- a/coloring/p.lus +++ b/coloring/p.lus @@ -2,13 +2,13 @@ include "bitset.lus" type state = int; -type action = enum { recolor }; -const actions_number = 1; +type action = enum { recolor, noop }; +const actions_number = 2; function action_of_int(i : int) returns (a : action); let assert(i >= 0); - a = recolor; + a = if i = 0 then recolor else noop; tel; const K = max_degree + 1; @@ -18,12 +18,13 @@ returns (enabled : bool^actions_number); var conflict : bool; let conflict = subset<<K>>(one_hot<<K>>(this), bitset_of_list<<K,degree>>(neighbors)); - enabled = [ conflict ]; + enabled = [ conflict, not conflict ]; tel; function p_step<<const degree:int>>(this : state; neighbors : state^degree; action : action) returns (new : state); let - new = first_set<<K>>(diff<<K>>(true^K, bitset_of_list<<K,degree>>(neighbors))); + new = if action = noop then this + else first_set<<K>>(diff<<K>>(true^K, bitset_of_list<<K,degree>>(neighbors))); assert(new >= 0); tel; diff --git a/coloring/p.ml b/coloring/p.ml index 899115be..869d9bf3 100644 --- a/coloring/p.ml +++ b/coloring/p.ml @@ -15,9 +15,10 @@ let init_state : State.t Algo.state_init_fun = fun n _ -> Random.int n let enable_f : State.t Algo.enable_fun = fun state neighbors -> if conflict { color = state; neighbors = List.map Algo.state neighbors } then [ "recolor" ] - else [ ] + else [ "noop" ] let step_f : State.t Algo.step_fun = fun state neighbors action -> match action with | "recolor" -> color { color = state; neighbors = List.map Algo.state neighbors } + | "noop" -> state | _ -> failwith "Invalid action" diff --git a/coloring/state.ml b/coloring/state.ml index df321ce1..42413aa1 100644 --- a/coloring/state.ml +++ b/coloring/state.ml @@ -2,4 +2,4 @@ type t = int let to_string = Printf.sprintf "color=%i" let of_string = None let copy x = x -let actions = [ "recolor" ] +let actions = [ "recolor"; "noop" ] -- GitLab