diff options
author | Nikita Sobolev <mail@sobolevn.me> | 2023-01-11 17:14:41 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-11 17:14:41 (GMT) |
commit | 729ab9b622957fef0e9b494af9a71ab02986c741 (patch) | |
tree | 490f0bc8f8c6782d91142eb760d1559174c54623 | |
parent | 762745a124cbc297cf2fe6f3ec9ca1840bb2e873 (diff) | |
download | cpython-729ab9b622957fef0e9b494af9a71ab02986c741.zip cpython-729ab9b622957fef0e9b494af9a71ab02986c741.tar.gz cpython-729ab9b622957fef0e9b494af9a71ab02986c741.tar.bz2 |
gh-100871: Improve `copy` module tests (GH-100872)
CC @AlexWaygood as the reviewer of https://github.com/python/cpython/pull/100818
Automerge-Triggered-By: GH:AlexWaygood
-rw-r--r-- | Lib/test/test_copy.py | 10 | ||||
-rw-r--r-- | Lib/test/test_slice.py | 36 |
2 files changed, 44 insertions, 2 deletions
diff --git a/Lib/test/test_copy.py b/Lib/test/test_copy.py index cc95a31..826e468 100644 --- a/Lib/test/test_copy.py +++ b/Lib/test/test_copy.py @@ -51,6 +51,9 @@ class TestCopy(unittest.TestCase): self.assertRaises(TypeError, copy.copy, x) copyreg.pickle(C, pickle_C, C) y = copy.copy(x) + self.assertIsNot(x, y) + self.assertEqual(type(y), C) + self.assertEqual(y.foo, x.foo) def test_copy_reduce_ex(self): class C(object): @@ -311,6 +314,9 @@ class TestCopy(unittest.TestCase): self.assertRaises(TypeError, copy.deepcopy, x) copyreg.pickle(C, pickle_C, C) y = copy.deepcopy(x) + self.assertIsNot(x, y) + self.assertEqual(type(y), C) + self.assertEqual(y.foo, x.foo) def test_deepcopy_reduce_ex(self): class C(object): @@ -352,8 +358,8 @@ class TestCopy(unittest.TestCase): pass def f(): pass - tests = [None, 42, 2**100, 3.14, True, False, 1j, - "hello", "hello\u1234", f.__code__, + tests = [None, ..., NotImplemented, 42, 2**100, 3.14, True, False, 1j, + b"bytes", "hello", "hello\u1234", f.__code__, NewStyle, range(10), max, property()] for x in tests: self.assertIs(copy.deepcopy(x), x) diff --git a/Lib/test/test_slice.py b/Lib/test/test_slice.py index c4bc8c8..03fde32 100644 --- a/Lib/test/test_slice.py +++ b/Lib/test/test_slice.py @@ -5,6 +5,7 @@ import operator import sys import unittest import weakref +import copy from pickle import loads, dumps from test import support @@ -244,6 +245,41 @@ class SliceTest(unittest.TestCase): self.assertEqual(s.indices(15), t.indices(15)) self.assertNotEqual(id(s), id(t)) + def test_copy(self): + s = slice(1, 10) + c = copy.copy(s) + self.assertIs(s, c) + + s = slice(1, 10, 2) + c = copy.copy(s) + self.assertIs(s, c) + + # Corner case for mutable indices: + s = slice([1, 2], [3, 4], [5, 6]) + c = copy.copy(s) + self.assertIs(s, c) + self.assertIs(s.start, c.start) + self.assertIs(s.stop, c.stop) + self.assertIs(s.step, c.step) + + def test_deepcopy(self): + s = slice(1, 10) + c = copy.deepcopy(s) + self.assertEqual(s, c) + + s = slice(1, 10, 2) + c = copy.deepcopy(s) + self.assertEqual(s, c) + + # Corner case for mutable indices: + s = slice([1, 2], [3, 4], [5, 6]) + c = copy.deepcopy(s) + self.assertIsNot(s, c) + self.assertEqual(s, c) + self.assertIsNot(s.start, c.start) + self.assertIsNot(s.stop, c.stop) + self.assertIsNot(s.step, c.step) + def test_cycle(self): class myobj(): pass o = myobj() |