diff --git a/Lib/test/test_bool.py b/Lib/test/test_bool.py
index b797e0c..e342d7b 100644
--- a/Lib/test/test_bool.py
+++ b/Lib/test/test_bool.py
@@ -7,12 +7,6 @@
 
 class BoolTest(unittest.TestCase):
 
-    def assertIs(self, a, b):
-        self.assertTrue(a is b)
-
-    def assertIsNot(self, a, b):
-        self.assertTrue(a is not b)
-
     def test_subclass(self):
         try:
             class C(bool):
diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py
index a2f4ed5..199caf0 100644
--- a/Lib/test/test_complex.py
+++ b/Lib/test/test_complex.py
@@ -72,9 +72,6 @@
         self.assertCloseAbs(x.real, y.real, eps)
         self.assertCloseAbs(x.imag, y.imag, eps)
 
-    def assertIs(self, a, b):
-        self.assertTrue(a is b)
-
     def check_div(self, x, y):
         """Compute complex z=x*y, and check that z/x==y and z/y==x."""
         z = x * y
diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py
index c8f359d..bfd38d9 100644
--- a/Lib/test/test_genericpath.py
+++ b/Lib/test/test_genericpath.py
@@ -5,9 +5,6 @@
 
 class AllCommonTest(unittest.TestCase):
 
-    def assertIs(self, a, b):
-        self.assertTrue(a is b)
-
     def test_commonprefix(self):
         self.assertEqual(
             genericpath.commonprefix([]),
@@ -50,8 +47,8 @@
             f.close()
             self.assertEqual(d, "foobar")
 
-            self.assertTrue(
-                genericpath.getctime(test_support.TESTFN) <=
+            self.assertLessEqual(
+                genericpath.getctime(test_support.TESTFN),
                 genericpath.getmtime(test_support.TESTFN)
             )
         finally:
diff --git a/Lib/test/test_macpath.py b/Lib/test/test_macpath.py
index ff8da10..c93177f 100644
--- a/Lib/test/test_macpath.py
+++ b/Lib/test/test_macpath.py
@@ -6,7 +6,7 @@
 class MacPathTestCase(unittest.TestCase):
 
     def test_abspath(self):
-        self.assertTrue(macpath.abspath("xx:yy") == "xx:yy")
+        self.assertEqual(macpath.abspath("xx:yy"), "xx:yy")
 
         # Issue 3426: check that abspath retuns unicode when the arg is unicode
         # and str when it's str, with both ASCII and non-ASCII cwds
@@ -31,38 +31,38 @@
 
     def test_commonprefix(self):
         commonprefix = macpath.commonprefix
-        self.assertTrue(commonprefix(["home:swenson:spam", "home:swen:spam"])
-                     == "home:swen")
-        self.assertTrue(commonprefix([":home:swen:spam", ":home:swen:eggs"])
-                     == ":home:swen:")
-        self.assertTrue(commonprefix([":home:swen:spam", ":home:swen:spam"])
-                     == ":home:swen:spam")
+        self.assertEqual(commonprefix(["home:swenson:spam", "home:swen:spam"]),
+                         "home:swen")
+        self.assertEqual(commonprefix([":home:swen:spam", ":home:swen:eggs"]),
+                         ":home:swen:")
+        self.assertEqual(commonprefix([":home:swen:spam", ":home:swen:spam"]),
+                         ":home:swen:spam")
 
     def test_split(self):
         split = macpath.split
-        self.assertEquals(split("foo:bar"),
+        self.assertEqual(split("foo:bar"),
                           ('foo:', 'bar'))
-        self.assertEquals(split("conky:mountpoint:foo:bar"),
+        self.assertEqual(split("conky:mountpoint:foo:bar"),
                           ('conky:mountpoint:foo', 'bar'))
 
-        self.assertEquals(split(":"), ('', ''))
-        self.assertEquals(split(":conky:mountpoint:"),
+        self.assertEqual(split(":"), ('', ''))
+        self.assertEqual(split(":conky:mountpoint:"),
                           (':conky:mountpoint', ''))
 
     def test_splitdrive(self):
         splitdrive = macpath.splitdrive
-        self.assertEquals(splitdrive("foo:bar"), ('', 'foo:bar'))
-        self.assertEquals(splitdrive(":foo:bar"), ('', ':foo:bar'))
+        self.assertEqual(splitdrive("foo:bar"), ('', 'foo:bar'))
+        self.assertEqual(splitdrive(":foo:bar"), ('', ':foo:bar'))
 
     def test_splitext(self):
         splitext = macpath.splitext
-        self.assertEquals(splitext(":foo.ext"), (':foo', '.ext'))
-        self.assertEquals(splitext("foo:foo.ext"), ('foo:foo', '.ext'))
-        self.assertEquals(splitext(".ext"), ('.ext', ''))
-        self.assertEquals(splitext("foo.ext:foo"), ('foo.ext:foo', ''))
-        self.assertEquals(splitext(":foo.ext:"), (':foo.ext:', ''))
-        self.assertEquals(splitext(""), ('', ''))
-        self.assertEquals(splitext("foo.bar.ext"), ('foo.bar', '.ext'))
+        self.assertEqual(splitext(":foo.ext"), (':foo', '.ext'))
+        self.assertEqual(splitext("foo:foo.ext"), ('foo:foo', '.ext'))
+        self.assertEqual(splitext(".ext"), ('.ext', ''))
+        self.assertEqual(splitext("foo.ext:foo"), ('foo.ext:foo', ''))
+        self.assertEqual(splitext(":foo.ext:"), (':foo.ext:', ''))
+        self.assertEqual(splitext(""), ('', ''))
+        self.assertEqual(splitext("foo.bar.ext"), ('foo.bar', '.ext'))
 
 
 def test_main():
diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py
index 2315b25..da5d174 100644
--- a/Lib/test/test_posixpath.py
+++ b/Lib/test/test_posixpath.py
@@ -25,9 +25,6 @@
             test_support.unlink(test_support.TESTFN + suffix)
             safe_rmdir(test_support.TESTFN + suffix)
 
-    def assertIs(self, a, b):
-        self.assertTrue(a is b)
-
     def test_normcase(self):
         # Check that normcase() is idempotent
         p = "FoO/./BaR"
@@ -158,8 +155,8 @@
             f.close()
             self.assertEqual(d, "foobar")
 
-            self.assertTrue(
-                posixpath.getctime(test_support.TESTFN) <=
+            self.assertLessEqual(
+                posixpath.getctime(test_support.TESTFN),
                 posixpath.getmtime(test_support.TESTFN)
             )
         finally:
@@ -384,7 +381,7 @@
         self.assertRaises(TypeError, posixpath.normpath)
 
     def test_abspath(self):
-        self.assertTrue("foo" in posixpath.abspath("foo"))
+        self.assertIn("foo", posixpath.abspath("foo"))
 
         # Issue 3426: check that abspath retuns unicode when the arg is unicode
         # and str when it's str, with both ASCII and non-ASCII cwds
@@ -398,7 +395,7 @@
         self.assertRaises(TypeError, posixpath.abspath)
 
     def test_realpath(self):
-        self.assertTrue("foo" in realpath("foo"))
+        self.assertIn("foo", realpath("foo"))
         self.assertRaises(TypeError, posixpath.realpath)
 
     if hasattr(os, "symlink"):
@@ -470,7 +467,8 @@
                 self.assertEqual(realpath(ABSTFN + "/link-y/.."), ABSTFN + "/k")
                 # Relative path.
                 os.chdir(dirname(ABSTFN))
-                self.assertEqual(realpath(basename(ABSTFN) + "/link-y/.."), ABSTFN + "/k")
+                self.assertEqual(realpath(basename(ABSTFN) + "/link-y/.."),
+                                 ABSTFN + "/k")
             finally:
                 os.chdir(old_path)
                 test_support.unlink(ABSTFN + "/link-y")
diff --git a/Lib/test/test_richcmp.py b/Lib/test/test_richcmp.py
index cc174d8..82a5a6e 100644
--- a/Lib/test/test_richcmp.py
+++ b/Lib/test/test_richcmp.py
@@ -281,9 +281,6 @@
 
 class ListTest(unittest.TestCase):
 
-    def assertIs(self, a, b):
-        self.assertTrue(a is b)
-
     def test_coverage(self):
         # exercise all comparisons for lists
         x = [42]
