diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
index baf1d6a..3f9c1e2 100644
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -130,7 +130,7 @@
     # The sign of the number is also random.
 
     def getran(self, ndigits):
-        self.assertTrue(ndigits > 0)
+        self.assertGreater(ndigits, 0)
         nbits_hi = ndigits * SHIFT
         nbits_lo = nbits_hi - SHIFT + 1
         answer = 0
@@ -865,21 +865,21 @@
 
     def test_small_ints(self):
         for i in range(-5, 257):
-            self.assertTrue(i is i + 0)
-            self.assertTrue(i is i * 1)
-            self.assertTrue(i is i - 0)
-            self.assertTrue(i is i // 1)
-            self.assertTrue(i is i & -1)
-            self.assertTrue(i is i | 0)
-            self.assertTrue(i is i ^ 0)
-            self.assertTrue(i is ~~i)
-            self.assertTrue(i is i**1)
-            self.assertTrue(i is int(str(i)))
-            self.assertTrue(i is i<<2>>2, str(i))
+            self.assertIs(i, i + 0)
+            self.assertIs(i, i * 1)
+            self.assertIs(i, i - 0)
+            self.assertIs(i, i // 1)
+            self.assertIs(i, i & -1)
+            self.assertIs(i, i | 0)
+            self.assertIs(i, i ^ 0)
+            self.assertIs(i, ~~i)
+            self.assertIs(i, i**1)
+            self.assertIs(i, int(str(i)))
+            self.assertIs(i, i<<2>>2, str(i))
         # corner cases
         i = 1 << 70
-        self.assertTrue(i - i is 0)
-        self.assertTrue(0 * i is 0)
+        self.assertIs(i - i, 0)
+        self.assertIs(0 * i, 0)
 
     def test_bit_length(self):
         tiny = 1e-10
@@ -926,7 +926,7 @@
                 got = round(k+offset, -1)
                 expected = v+offset
                 self.assertEqual(got, expected)
-                self.assertTrue(type(got) is int)
+                self.assertIs(type(got), int)
 
         # larger second argument
         self.assertEqual(round(-150, -2), -200)
@@ -965,7 +965,7 @@
             got = round(10**k + 324678, -3)
             expect = 10**k + 325000
             self.assertEqual(got, expect)
-            self.assertTrue(type(got) is int)
+            self.assertIs(type(got), int)
 
         # nonnegative second argument: round(x, n) should just return x
         for n in range(5):
@@ -973,7 +973,7 @@
                 x = random.randrange(-10000, 10000)
                 got = round(x, n)
                 self.assertEqual(got, x)
-                self.assertTrue(type(got) is int)
+                self.assertIs(type(got), int)
         for huge_n in 2**31-1, 2**31, 2**63-1, 2**63, 2**100, 10**100:
             self.assertEqual(round(8979323, huge_n), 8979323)
 
@@ -982,7 +982,7 @@
             x = random.randrange(-10000, 10000)
             got = round(x)
             self.assertEqual(got, x)
-            self.assertTrue(type(got) is int)
+            self.assertIs(type(got), int)
 
         # bad second argument
         bad_exponents = ('brian', 2.0, 0j, None)
@@ -1187,15 +1187,15 @@
         class myint(int):
             pass
 
-        self.assertTrue(type(myint.from_bytes(b'\x00', 'big')) is myint)
+        self.assertIs(type(myint.from_bytes(b'\x00', 'big')), myint)
         self.assertEqual(myint.from_bytes(b'\x01', 'big'), 1)
-        self.assertTrue(
-            type(myint.from_bytes(b'\x00', 'big', signed=False)) is myint)
+        self.assertIs(
+            type(myint.from_bytes(b'\x00', 'big', signed=False)), myint)
         self.assertEqual(myint.from_bytes(b'\x01', 'big', signed=False), 1)
-        self.assertTrue(type(myint.from_bytes(b'\x00', 'little')) is myint)
+        self.assertIs(type(myint.from_bytes(b'\x00', 'little')), myint)
         self.assertEqual(myint.from_bytes(b'\x01', 'little'), 1)
-        self.assertTrue(type(myint.from_bytes(
-            b'\x00', 'little', signed=False)) is myint)
+        self.assertIs(type(myint.from_bytes(
+            b'\x00', 'little', signed=False)), myint)
         self.assertEqual(myint.from_bytes(b'\x01', 'little', signed=False), 1)
         self.assertEqual(
             int.from_bytes([255, 0, 0], 'big', signed=True), -65536)
