1.1 --- a/lib/__builtins__/str.py Fri Dec 02 00:54:32 2016 +0100
1.2 +++ b/lib/__builtins__/str.py Fri Dec 02 00:55:45 2016 +0100
1.3 @@ -27,6 +27,9 @@
1.4
1.5 "The base class for all strings."
1.6
1.7 + _p = 0x03ffffff
1.8 + _a = 31
1.9 +
1.10 def __init__(self):
1.11
1.12 "Initialise the string."
1.13 @@ -37,6 +40,20 @@
1.14
1.15 self.__data__ = None
1.16
1.17 + def __hash__(self):
1.18 +
1.19 + "Return a value for hashing purposes."
1.20 +
1.21 + result = 0
1.22 + l = self.__len__()
1.23 + i = 0
1.24 +
1.25 + while i < l:
1.26 + result = (result * self._a + ord(self.__get_single_item__(i))) % self._p
1.27 + i += 1
1.28 +
1.29 + return result
1.30 +
1.31 def __iadd__(self, other):
1.32
1.33 "Return a new string for the operation."
2.1 --- a/tests/dict.py Fri Dec 02 00:54:32 2016 +0100
2.2 +++ b/tests/dict.py Fri Dec 02 00:55:45 2016 +0100
2.3 @@ -5,9 +5,11 @@
2.4 for key, value in d.items():
2.5 return value
2.6
2.7 -d = {10 : "a", 20 : "b"}
2.8 +d = {10 : "a", 20 : "b", "c" : 30}
2.9 +print d
2.10 print d[10] # a
2.11 print d[20] # b
2.12 +print d["c"] # 30
2.13 try:
2.14 print d[30] # should fail with an exception
2.15 except KeyError, exc:
2.16 @@ -17,20 +19,23 @@
2.17 print l
2.18 print 10 in l # True
2.19 print 20 in l # True
2.20 +print "c" in l # True
2.21 print 30 in l # False
2.22
2.23 l = d.values()
2.24 print l
2.25 print "a" in l # True
2.26 print "b" in l # True
2.27 +print 30 in l # True
2.28 print "c" in l # False
2.29
2.30 -v = g(d) # either "a" or "b"
2.31 +v = g(d) # either "a" or "b" or 30
2.32 print v
2.33 -print v == "a" or v == "b" # True
2.34 -print v == 10 or v == 20 # False
2.35 +print v == "a" or v == "b" or v == 30 # True
2.36 +print v == 10 or v == 20 or v == "c" # False
2.37
2.38 l = d.items()
2.39 print l
2.40 print (10, "a") in l # True
2.41 +print ("c", 30) in l # True
2.42 print (10, "b") in l # False
3.1 --- a/tests/string.py Fri Dec 02 00:54:32 2016 +0100
3.2 +++ b/tests/string.py Fri Dec 02 00:55:45 2016 +0100
3.3 @@ -20,3 +20,5 @@
3.4 print ord(s) # should raise an exception
3.5 except ValueError, exc:
3.6 print "ord(s): value is not appropriate", exc.value
3.7 +
3.8 +print hash(s)