Add tests to test_weakref.py to bring code coverage in _weakref.c up to 100%.

Port test_md5.py to PyUnit.

(Written by Neal Norwitz; from SF patch 736962)

(Backport candidate)
diff --git a/Lib/test/test_md5.py b/Lib/test/test_md5.py
index 92cd568..bd0fb2e 100644
--- a/Lib/test/test_md5.py
+++ b/Lib/test/test_md5.py
@@ -1,9 +1,11 @@
 # Testing md5 module
 
-import string
+import unittest
 from md5 import md5
+from test import test_support
 
 def hexstr(s):
+    import string
     h = string.hexdigits
     r = ''
     for c in s:
@@ -11,20 +13,46 @@
         r = r + h[(i >> 4) & 0xF] + h[i & 0xF]
     return r
 
-def md5test(s):
-    return 'MD5 ("' + s + '") = ' + hexstr(md5(s).digest())
+class MD5_Test(unittest.TestCase):
 
-print 'MD5 test suite:'
-print md5test('')
-print md5test('a')
-print md5test('abc')
-print md5test('message digest')
-print md5test('abcdefghijklmnopqrstuvwxyz')
-print md5test('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
-print md5test('12345678901234567890123456789012345678901234567890123456789012345678901234567890')
+    def md5test(self, s, expected):
+        self.assertEqual(hexstr(md5(s).digest()), expected)
+        self.assertEqual(md5(s).hexdigest(), expected)
 
-# hexdigest is new with Python 2.0
-m = md5('testing the hexdigest method')
-h = m.hexdigest()
-if hexstr(m.digest()) != h:
-    print 'hexdigest() failed'
+    def test_basics(self):
+        eq = self.md5test
+        eq('', 'd41d8cd98f00b204e9800998ecf8427e')
+        eq('a', '0cc175b9c0f1b6a831c399e269772661')
+        eq('abc', '900150983cd24fb0d6963f7d28e17f72')
+        eq('message digest', 'f96b697d7cb7938d525a2f31aaf161d0')
+        eq('abcdefghijklmnopqrstuvwxyz', 'c3fcd3d76192e4007dfb496cca67e13b')
+        eq('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 
+           'd174ab98d277d9f5a5611c2c9f419d9f')
+        eq('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 
+           '57edf4a22be3c955ac49da2e2107b67a')
+
+    def test_hexdigest(self):
+        # hexdigest is new with Python 2.0
+        m = md5('testing the hexdigest method')
+        h = m.hexdigest()
+        self.assertEqual(hexstr(m.digest()), h)
+
+    def test_large_update(self):
+        aas = 'a' * 64
+        bees = 'b' * 64
+        cees = 'c' * 64
+
+        m1 = md5()
+        m1.update(aas)
+        m1.update(bees)
+        m1.update(cees)
+
+        m2 = md5()
+        m2.update(aas + bees + cees)
+        self.assertEqual(m1.digest(), m2.digest())
+
+def test_main():
+    test_support.run_unittest(MD5_Test)
+
+if __name__ == '__main__':
+    test_main()