diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
index 6ddd077..b604c28 100644
--- a/Lib/test/test_unicodedata.py
+++ b/Lib/test/test_unicodedata.py
@@ -1,17 +1,89 @@
 """ Test script for the unicodedata module.
 
-Written by Marc-Andre Lemburg (mal@lemburg.com).
+    Written by Marc-Andre Lemburg (mal@lemburg.com).
 
-(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
+    (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
 
 """#"
-from test_support import verbose
-import sys
+import sha
 
-# Test Unicode database APIs
+def test_methods():
+
+    h = sha.sha()
+    for i in range(65536):
+        char = unichr(i)
+        data = [
+            
+            # Predicates (single char)
+            char.isalnum() and u'1' or u'0',
+            char.isalpha() and u'1' or u'0',
+            char.isdecimal() and u'1' or u'0',
+            char.isdigit() and u'1' or u'0',
+            char.islower() and u'1' or u'0',
+            char.isnumeric() and u'1' or u'0',
+            char.isspace() and u'1' or u'0',
+            char.istitle() and u'1' or u'0',
+            char.isupper() and u'1' or u'0',
+            
+            # Predicates (multiple chars)
+            (char + u'abc').isalnum() and u'1' or u'0',
+            (char + u'abc').isalpha() and u'1' or u'0',
+            (char + u'123').isdecimal() and u'1' or u'0',
+            (char + u'123').isdigit() and u'1' or u'0',
+            (char + u'abc').islower() and u'1' or u'0',
+            (char + u'123').isnumeric() and u'1' or u'0',
+            (char + u' \t').isspace() and u'1' or u'0',
+            (char + u'abc').istitle() and u'1' or u'0',
+            (char + u'ABC').isupper() and u'1' or u'0',
+
+            # Mappings (single char)
+            char.lower(),
+            char.upper(),
+            char.title(),
+            
+            # Mappings (multiple chars)
+            (char + u'abc').lower(),
+            (char + u'ABC').upper(),
+            (char + u'abc').title(),
+            (char + u'ABC').title(),
+            
+            ]
+        h.update(u''.join(data).encode('unicode-internal'))
+    return h.hexdigest()
+
+def test_unicodedata():
+
+    h = sha.sha()
+    for i in range(65536):
+        char = unichr(i)
+        data = [
+            # Properties
+            str(unicodedata.digit(char, -1)),
+            str(unicodedata.numeric(char, -1)),
+            str(unicodedata.decimal(char, -1)),
+            unicodedata.category(char),
+            unicodedata.bidirectional(char),
+            unicodedata.decomposition(char),
+            str(unicodedata.mirrored(char)),
+            str(unicodedata.combining(char)),
+            ] 
+        h.update(''.join(data))
+    return h.hexdigest()
+
+### Run tests
+
+print 'Testing Unicode Database...'
+print 'Methods:',
+print test_methods()
+
+# In case unicodedata is not available, this will raise an ImportError,
+# but still test the above cases...
 import unicodedata
+print 'Functions:',
+print test_unicodedata()
 
-print 'Testing unicodedata module...',
+# Some additional checks of the API:
+print 'API:',
 
 assert unicodedata.digit(u'A',None) is None
 assert unicodedata.digit(u'9') == 9
@@ -47,4 +119,4 @@
 assert unicodedata.combining(u'a') == 0
 assert unicodedata.combining(u'\u20e1') == 230
 
-print 'done.'
+print 'ok'
