summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2023-01-11 17:14:41 (GMT)
committerGitHub <noreply@github.com>2023-01-11 17:14:41 (GMT)
commit729ab9b622957fef0e9b494af9a71ab02986c741 (patch)
tree490f0bc8f8c6782d91142eb760d1559174c54623
parent762745a124cbc297cf2fe6f3ec9ca1840bb2e873 (diff)
downloadcpython-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.py10
-rw-r--r--Lib/test/test_slice.py36
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()