let check ec param =
if ec.assertion param then
(* assertion succeeded *)
if ec.num_fail_alerts = 0 then
(* and it succeeded last time too -- no change *)
None
else
(* it did not succeed last time -- change to success *)
begin
ec.num_fail_alerts <- 0;
Some (ec.success_alert param)
end
else
(* assertion failed *)
if ec.num_fail_alerts = ec.max_fail_alerts then
(* we're at max_fail_alerts now *)
begin
ec.num_fail_alerts <- ec.num_fail_alerts + 1;
Some (ec.final_fail_alert param)
end
else if ec.num_fail_alerts < ec.max_fail_alerts then
(* haven't reached max fail alerts yet *)
begin
ec.num_fail_alerts <- ec.num_fail_alerts + 1;
Some (ec.fail_alert param)
end
else
(* we're beyond max_fail_alerts *)
None