let operations_test_treatment_left (name : string) (state : string) : bool =
let rec test t =
let rec test_aux exp =
let decomp = decompose exp in
match decomp with [] -> exp
|x::ls -> if(List.mem x ["not" ; "contains" ; "idequal" ; "equal"])
then (string_of_bool (test (x::ls)))
else (x^"("^(list2string "," (List.map test_aux ls))^")")
in
let rec var2test exp =
let decomp = decompose exp in
if(decomp<>[]) then ((car decomp)^"("^(list2string "," (List.map var2test (cdr decomp)))^")")
else if(is_a_value exp) then exp
else if(is_a_test_var exp) then exp
else if(is_a_var exp) then ("Test_"^exp)
else exp
in
match t with [] -> true
|(x::ls) -> let d = decompose x in
if(d<>[])
then(
if((car d)="contains") then(
in_aggregation name (cadr d) name (caddr d)
)
else if((car d)="equal" || (car d)="idequal") then(
let arg1 = if(is_a_var (cadr d)) then (get_value_of_var name (cadr d))
else if(is_a_value (cadr d)) then (cadr d)
else (string_of_bool (test [(cadr d)] ))in
let arg2 = if(is_a_var (caddr d)) then (get_value_of_var name (caddr d))
else if(is_a_value (caddr d)) then (caddr d)
else (test_aux (caddr d) )in
(prerr_string (arg1^" "^arg2^"\n"));
(match_message name state (var2test arg1) name state (var2test arg2)) && (test ls)
)
else if((car d)="leq") then (
let arg1 = if(is_a_var (cadr d)) then (get_value_of_var name (cadr d)) else (cadr d) in
let arg2 = if(is_a_var (caddr d)) then (get_value_of_var name (caddr d)) else (cadr d) in
((int_of_string arg1)<=(int_of_string arg2)) && (test ls)
)
else if((car d)="not") then (
prerr_string ((cadr d)^"\n");
not(test [(cadr d)]) && (test ls)
)
else (test ls);
)
else (test ls);
in
match (find_operation_of_state name state) with ((gt,_),_) -> (test gt)