|
| 1 | +"""Tests for builtin functions — adapted from CPython test_builtin.py""" |
| 2 | + |
| 3 | +import unittest |
| 4 | + |
| 5 | + |
| 6 | +class BuiltinTest(unittest.TestCase): |
| 7 | + |
| 8 | + def test_abs(self): |
| 9 | + self.assertEqual(abs(0), 0) |
| 10 | + self.assertEqual(abs(-1), 1) |
| 11 | + self.assertEqual(abs(1), 1) |
| 12 | + self.assertAlmostEqual(abs(-1.5), 1.5) |
| 13 | + |
| 14 | + def test_bool(self): |
| 15 | + self.assertIs(bool(0), False) |
| 16 | + self.assertIs(bool(1), True) |
| 17 | + self.assertIs(bool(""), False) |
| 18 | + self.assertIs(bool("x"), True) |
| 19 | + self.assertIs(bool([]), False) |
| 20 | + self.assertIs(bool([1]), True) |
| 21 | + self.assertIs(bool(None), False) |
| 22 | + |
| 23 | + def test_chr_ord(self): |
| 24 | + self.assertEqual(chr(65), 'A') |
| 25 | + self.assertEqual(chr(97), 'a') |
| 26 | + self.assertEqual(ord('A'), 65) |
| 27 | + self.assertEqual(ord('a'), 97) |
| 28 | + |
| 29 | + def test_divmod(self): |
| 30 | + self.assertEqual(divmod(7, 3), (2, 1)) |
| 31 | + self.assertEqual(divmod(-7, 3), (-3, 2)) |
| 32 | + self.assertEqual(divmod(7, -3), (-3, -2)) |
| 33 | + |
| 34 | + def test_hash(self): |
| 35 | + self.assertEqual(hash(42), hash(42)) |
| 36 | + self.assertEqual(hash("hello"), hash("hello")) |
| 37 | + self.assertIsInstance(hash(42), int) |
| 38 | + |
| 39 | + def test_hex_oct_bin(self): |
| 40 | + self.assertEqual(hex(255), '0xff') |
| 41 | + self.assertEqual(hex(-1), '-0x1') |
| 42 | + self.assertEqual(oct(8), '0o10') |
| 43 | + self.assertEqual(bin(10), '0b1010') |
| 44 | + |
| 45 | + def test_id(self): |
| 46 | + a = [1, 2] |
| 47 | + b = a |
| 48 | + c = [1, 2] |
| 49 | + self.assertEqual(id(a), id(b)) |
| 50 | + self.assertNotEqual(id(a), id(c)) |
| 51 | + |
| 52 | + def test_int(self): |
| 53 | + self.assertEqual(int(), 0) |
| 54 | + self.assertEqual(int(3.5), 3) |
| 55 | + self.assertEqual(int("42"), 42) |
| 56 | + self.assertEqual(int("-10"), -10) |
| 57 | + self.assertEqual(int("ff", 16), 255) |
| 58 | + self.assertEqual(int("10", 2), 2) |
| 59 | + |
| 60 | + def test_isinstance_issubclass(self): |
| 61 | + self.assertTrue(isinstance(1, int)) |
| 62 | + self.assertTrue(isinstance("x", str)) |
| 63 | + self.assertTrue(isinstance([], list)) |
| 64 | + self.assertTrue(issubclass(bool, int)) |
| 65 | + self.assertFalse(issubclass(str, int)) |
| 66 | + |
| 67 | + def test_len(self): |
| 68 | + self.assertEqual(len([]), 0) |
| 69 | + self.assertEqual(len([1, 2, 3]), 3) |
| 70 | + self.assertEqual(len("hello"), 5) |
| 71 | + self.assertEqual(len({}), 0) |
| 72 | + self.assertEqual(len({1: 2}), 1) |
| 73 | + |
| 74 | + def test_max_min(self): |
| 75 | + self.assertEqual(max(1, 2, 3), 3) |
| 76 | + self.assertEqual(min(1, 2, 3), 1) |
| 77 | + self.assertEqual(max([1, 2, 3]), 3) |
| 78 | + self.assertEqual(min([1, 2, 3]), 1) |
| 79 | + |
| 80 | + def test_pow(self): |
| 81 | + self.assertEqual(pow(2, 10), 1024) |
| 82 | + self.assertEqual(pow(3, 3, 8), 3) |
| 83 | + |
| 84 | + def test_range(self): |
| 85 | + self.assertEqual(list(range(5)), [0, 1, 2, 3, 4]) |
| 86 | + self.assertEqual(list(range(1, 5)), [1, 2, 3, 4]) |
| 87 | + self.assertEqual(list(range(0, 10, 2)), [0, 2, 4, 6, 8]) |
| 88 | + self.assertEqual(list(range(5, 0, -1)), [5, 4, 3, 2, 1]) |
| 89 | + |
| 90 | + def test_repr(self): |
| 91 | + self.assertEqual(repr(42), '42') |
| 92 | + self.assertEqual(repr("hello"), "'hello'") |
| 93 | + self.assertEqual(repr([1, 2]), '[1, 2]') |
| 94 | + self.assertEqual(repr(None), 'None') |
| 95 | + |
| 96 | + def test_round(self): |
| 97 | + self.assertEqual(round(3.5), 4) |
| 98 | + self.assertEqual(round(4.5), 4) # banker's rounding |
| 99 | + self.assertEqual(round(3.14159, 2), 3.14) |
| 100 | + |
| 101 | + def test_sorted(self): |
| 102 | + self.assertEqual(sorted([3, 1, 2]), [1, 2, 3]) |
| 103 | + self.assertEqual(sorted("cba"), ['a', 'b', 'c']) |
| 104 | + self.assertEqual(sorted([3, 1, 2], reverse=True), [3, 2, 1]) |
| 105 | + |
| 106 | + def test_str(self): |
| 107 | + self.assertEqual(str(42), '42') |
| 108 | + self.assertEqual(str(3.14), '3.14') |
| 109 | + self.assertEqual(str(True), 'True') |
| 110 | + self.assertEqual(str(None), 'None') |
| 111 | + self.assertEqual(str([1, 2]), '[1, 2]') |
| 112 | + |
| 113 | + def test_sum(self): |
| 114 | + self.assertEqual(sum([1, 2, 3]), 6) |
| 115 | + self.assertEqual(sum([], 10), 10) |
| 116 | + self.assertEqual(sum(range(10)), 45) |
| 117 | + |
| 118 | + def test_type(self): |
| 119 | + self.assertIs(type(42), int) |
| 120 | + self.assertIs(type("x"), str) |
| 121 | + self.assertIs(type([]), list) |
| 122 | + self.assertIs(type({}), dict) |
| 123 | + self.assertIs(type(()), tuple) |
| 124 | + self.assertIs(type(True), bool) |
| 125 | + self.assertIs(type(None), type(None)) |
| 126 | + |
| 127 | + def test_zip(self): |
| 128 | + self.assertEqual(list(zip([1, 2], [3, 4])), [(1, 3), (2, 4)]) |
| 129 | + self.assertEqual(list(zip()), []) |
| 130 | + self.assertEqual(list(zip([1])), [(1,)]) |
| 131 | + |
| 132 | + def test_enumerate(self): |
| 133 | + self.assertEqual(list(enumerate('ab')), [(0, 'a'), (1, 'b')]) |
| 134 | + self.assertEqual(list(enumerate('ab', 5)), [(5, 'a'), (6, 'b')]) |
| 135 | + |
| 136 | + def test_map_filter(self): |
| 137 | + self.assertEqual(list(map(str, [1, 2, 3])), ['1', '2', '3']) |
| 138 | + self.assertEqual(list(filter(lambda x: x > 2, [1, 2, 3, 4])), [3, 4]) |
| 139 | + |
| 140 | + def test_callable(self): |
| 141 | + self.assertTrue(callable(len)) |
| 142 | + self.assertTrue(callable(lambda: None)) |
| 143 | + self.assertFalse(callable(42)) |
| 144 | + |
| 145 | + |
| 146 | +if __name__ == "__main__": |
| 147 | + unittest.main() |
0 commit comments