# dangan249/Generic-FMAP

Switch branches/tags
Nothing to show
Fetching contributors…
Cannot retrieve contributors at this time
77 lines (48 sloc) 2.2 KB
 /**********************************************************************/ This algebraic Specification was specified by: Professor: William D Clinger Northeastern University - College of Computer Science Implementor: An Dang /**********************************************************************/ Signature: Static methods: emptyMap : -> FMap Dynamic methods (for which the receiver is an FMap): add : K x V -> FMap isEmpty : -> boolean size : -> int containsKey : K -> boolean get : K -> V toString : -> String equals : Object -> boolean hashCode : -> int Values of the FMap ADT shall also implement the public dynamic methods equals(Object) and hashCode() such that If m1 and m2 are values of the FMap ADT, then m1.equals(m2) if and only if for every non-null K k m1.containsKey(k) if and only if m2.containsKey(k) and for every non-null K k if m1.containsKey(k) then m1.get(k).equals(m2.get(k)) If m1 is a value of the FMap ADT, but x is not, then m1.equals(x) returns false. If m1 and m2 are values of the FMap ADT, and m1.equals(m2) then m1.hashCode() == m2.hashCode(). If f1 and f2 are values of the FMap ADT, and !(f1.equals(f2)) then f1.hashCode() is unlikely to be equal to f2.hashCode(). Note: The word "unlikely" will be interpreted as follows. For every type K and V, if both f1 and f2 are selected at random from a set of FMap values such that for every non-negative integer n and int value h the probability of a randomly selected f having n == f.size() is P(n) = 1/(2^(n+1)) and for each key k such that f.containsKey(k) the probability that h == k.hashCode() is at most 1/4 and for each value v such that v.equals(f.get(k)) the probability that h == v.hashCode() is at most 1/4 and the three probabilities above are independent then the probability of f1.hashCode() == f2.hashCode() when f1 and f2 are not equal is less than 6%.