Download The demexp Book - Linux

Transcript
Helper function delegate naming returns true if the given name string corresponds to a
delegate name.
195a
hparticipants.ml 193ai+≡
let delegate_naming name =
(String.length name >= 9)
&& (String.sub name 0 (String.length delegate_string_prefix)
= delegate_string_prefix)
/ 194g 195b .
Function login naming invariant checks that a login starting with "delegate " is
classified as Delegate in entry, otherwise as Individual. previously correct is the
boolean value resulting from previous tests.
195b
hparticipants.ml 193ai+≡
/ 195a 195c .
let login_naming_invariant print_warning login entry previously_correct =
let correct =
((delegate_naming login) && entry.kind = Delegate)
|| (entry.kind = Individual) in
print_warning correct
(Printf.sprintf "naming invariant not verified for login:%s kind:%s"
login (kind_as_string entry.kind));
previously_correct && correct
Function password invariant checks that the password of entry is not empty. It print a
warning message if print warning is true. previously correct is the boolean value resulting from previous tests.
195c
hparticipants.ml 193ai+≡
/ 195b 195d .
let password_invariant print_warning login entry previously_correct =
let correct = entry.password != "" in
print_warning correct
(Printf.sprintf "non empty password invariant not verified for login:%s"
login);
previously_correct && correct
Function login id invariant checks that each login has an identifier.
195d
hparticipants.ml 193ai+≡
/ 195c 195e .
let login_id_invariant print_warning login _entry previously_correct =
let correct = Id.Participant.rev_mem !the_participant_base.ids login in
print_warning correct (Printf.sprintf "login:%s without id" login);
previously_correct && correct
Function check invariants of base check all invariants for base and print warnings if
print warning is true.
195e
hparticipants.ml 193ai+≡
/ 195d 196a .
let check_invariants_of_base print_warning base =
let to_check login entry previously_correct =
(login_naming_invariant print_warning login entry previously_correct)
&& (login_id_invariant print_warning login entry previously_correct)
&& (password_invariant print_warning login entry previously_correct) in
Hashtbl.fold to_check base.attr true
195