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