1
0
mirror of https://github.com/django/django.git synced 2025-06-08 21:19:13 +00:00

Used subTest in GEOS tests.

This commit is contained in:
David Smith 2024-11-07 21:33:33 +00:00
parent 91d7fd3295
commit a902233d8b
4 changed files with 763 additions and 678 deletions

File diff suppressed because it is too large Load Diff

View File

@ -86,7 +86,8 @@ class GEOSMutationTest(SimpleTestCase):
"Testing Geometry IndexError"
p = Point(1, 2)
for i in range(-2, 2):
p._checkindex(i)
with self.subTest(i=i):
p._checkindex(i)
msg = "invalid index: 2"
with self.assertRaisesMessage(IndexError, msg):
p._checkindex(2)
@ -97,17 +98,18 @@ class GEOSMutationTest(SimpleTestCase):
def test01_PointMutations(self):
"Testing Point mutations"
for p in (Point(1, 2, 3), fromstr("POINT (1 2 3)")):
self.assertEqual(
p._get_single_external(1), 2.0, "Point _get_single_external"
)
with self.subTest(p=p):
self.assertEqual(
p._get_single_external(1), 2.0, "Point _get_single_external"
)
# _set_single
p._set_single(0, 100)
self.assertEqual(p.coords, (100.0, 2.0, 3.0), "Point _set_single")
# _set_single
p._set_single(0, 100)
self.assertEqual(p.coords, (100.0, 2.0, 3.0), "Point _set_single")
# _set_list
p._set_list(2, (50, 3141))
self.assertEqual(p.coords, (50.0, 3141.0), "Point _set_list")
# _set_list
p._set_list(2, (50, 3141))
self.assertEqual(p.coords, (50.0, 3141.0), "Point _set_list")
def test02_PointExceptions(self):
"Testing Point exceptions"
@ -121,9 +123,10 @@ class GEOSMutationTest(SimpleTestCase):
"Testing Point API"
q = Point(4, 5, 3)
for p in (Point(1, 2, 3), fromstr("POINT (1 2 3)")):
p[0:2] = [4, 5]
for f in geos_function_tests:
self.assertEqual(f(q), f(p), "Point " + f.__name__)
with self.subTest(p=p):
p[0:2] = [4, 5]
for f in geos_function_tests:
self.assertEqual(f(q), f(p), "Point " + f.__name__)
def test04_LineStringMutations(self):
"Testing LineString mutations"
@ -131,29 +134,31 @@ class GEOSMutationTest(SimpleTestCase):
LineString((1, 0), (4, 1), (6, -1)),
fromstr("LINESTRING (1 0,4 1,6 -1)"),
):
self.assertEqual(
ls._get_single_external(1),
(4.0, 1.0),
"LineString _get_single_external",
)
with self.subTest(ls=ls):
self.assertEqual(
ls._get_single_external(1),
(4.0, 1.0),
"LineString _get_single_external",
)
# _set_single
ls._set_single(0, (-50, 25))
self.assertEqual(
ls.coords,
((-50.0, 25.0), (4.0, 1.0), (6.0, -1.0)),
"LineString _set_single",
)
# _set_single
ls._set_single(0, (-50, 25))
self.assertEqual(
ls.coords,
((-50.0, 25.0), (4.0, 1.0), (6.0, -1.0)),
"LineString _set_single",
)
# _set_list
ls._set_list(2, ((-50.0, 25.0), (6.0, -1.0)))
self.assertEqual(
ls.coords, ((-50.0, 25.0), (6.0, -1.0)), "LineString _set_list"
)
# _set_list
ls._set_list(2, ((-50.0, 25.0), (6.0, -1.0)))
self.assertEqual(
ls.coords, ((-50.0, 25.0), (6.0, -1.0)), "LineString _set_list"
)
lsa = LineString(ls.coords)
for f in geos_function_tests:
self.assertEqual(f(lsa), f(ls), "LineString " + f.__name__)
lsa = LineString(ls.coords)
for f in geos_function_tests:
with self.subTest(f=f):
self.assertEqual(f(lsa), f(ls), "LineString " + f.__name__)
def test05_Polygon(self):
"Testing Polygon mutations"
@ -164,37 +169,45 @@ class GEOSMutationTest(SimpleTestCase):
),
fromstr("POLYGON ((1 0,4 1,6 -1,8 10,1 0),(5 4,6 4,6 3,5 4))"),
):
self.assertEqual(
pg._get_single_external(0),
LinearRing((1, 0), (4, 1), (6, -1), (8, 10), (1, 0)),
"Polygon _get_single_external(0)",
)
self.assertEqual(
pg._get_single_external(1),
LinearRing((5, 4), (6, 4), (6, 3), (5, 4)),
"Polygon _get_single_external(1)",
)
with self.subTest(pg=pg):
self.assertEqual(
pg._get_single_external(0),
LinearRing((1, 0), (4, 1), (6, -1), (8, 10), (1, 0)),
"Polygon _get_single_external(0)",
)
self.assertEqual(
pg._get_single_external(1),
LinearRing((5, 4), (6, 4), (6, 3), (5, 4)),
"Polygon _get_single_external(1)",
)
# _set_list
pg._set_list(
2,
(
((1, 2), (10, 0), (12, 9), (-1, 15), (1, 2)),
((4, 2), (5, 2), (5, 3), (4, 2)),
),
)
self.assertEqual(
pg.coords,
(
((1.0, 2.0), (10.0, 0.0), (12.0, 9.0), (-1.0, 15.0), (1.0, 2.0)),
((4.0, 2.0), (5.0, 2.0), (5.0, 3.0), (4.0, 2.0)),
),
"Polygon _set_list",
)
# _set_list
pg._set_list(
2,
(
((1, 2), (10, 0), (12, 9), (-1, 15), (1, 2)),
((4, 2), (5, 2), (5, 3), (4, 2)),
),
)
self.assertEqual(
pg.coords,
(
(
(1.0, 2.0),
(10.0, 0.0),
(12.0, 9.0),
(-1.0, 15.0),
(1.0, 2.0),
),
((4.0, 2.0), (5.0, 2.0), (5.0, 3.0), (4.0, 2.0)),
),
"Polygon _set_list",
)
lsa = Polygon(*pg.coords)
for f in geos_function_tests:
self.assertEqual(f(lsa), f(pg), "Polygon " + f.__name__)
lsa = Polygon(*pg.coords)
for f in geos_function_tests:
with self.subTest(f=f):
self.assertEqual(f(lsa), f(pg), "Polygon " + f.__name__)
def test06_Collection(self):
"Testing Collection mutations"
@ -203,17 +216,21 @@ class GEOSMutationTest(SimpleTestCase):
fromstr("MULTIPOINT (3 4,-1 2,5 -4,2 8)"),
)
for mp in points:
self.assertEqual(
mp._get_single_external(2),
Point(5, -4),
"Collection _get_single_external",
)
with self.subTest(mp=mp):
self.assertEqual(
mp._get_single_external(2),
Point(5, -4),
"Collection _get_single_external",
)
mp._set_list(3, map(Point, ((5, 5), (3, -2), (8, 1))))
self.assertEqual(
mp.coords, ((5.0, 5.0), (3.0, -2.0), (8.0, 1.0)), "Collection _set_list"
)
mp._set_list(3, map(Point, ((5, 5), (3, -2), (8, 1))))
self.assertEqual(
mp.coords,
((5.0, 5.0), (3.0, -2.0), (8.0, 1.0)),
"Collection _set_list",
)
lsa = MultiPoint(*map(Point, ((5, 5), (3, -2), (8, 1))))
for f in geos_function_tests:
self.assertEqual(f(lsa), f(mp), "MultiPoint " + f.__name__)
lsa = MultiPoint(*map(Point, ((5, 5), (3, -2), (8, 1))))
for f in geos_function_tests:
with self.subTest(f=f):
self.assertEqual(f(lsa), f(mp), "MultiPoint " + f.__name__)

View File

@ -23,9 +23,8 @@ class GEOSIOTest(SimpleTestCase):
ref = GEOSGeometry(wkt)
g1 = wkt_r.read(wkt.encode())
g2 = wkt_r.read(wkt)
for geom in (g1, g2):
self.assertEqual(ref, geom)
self.assertEqual(g1, ref)
self.assertEqual(g2, ref)
# Should only accept string objects.
msg = "'wkt' must be bytes or str."
@ -71,14 +70,16 @@ class GEOSIOTest(SimpleTestCase):
g1 = wkb_r.read(wkb)
g2 = wkb_r.read(hex_bin)
g3 = wkb_r.read(hex_str)
for geom in (g1, g2, g3):
self.assertEqual(ref, geom)
self.assertEqual(ref, g1)
self.assertEqual(ref, g2)
self.assertEqual(ref, g3)
bad_input = (1, 5.23, None, False)
msg = "'wkb' must be bytes, str or memoryview."
for bad_wkb in bad_input:
with self.assertRaisesMessage(TypeError, msg):
wkb_r.read(bad_wkb)
with self.subTest(bad_wkb=bad_wkb):
with self.assertRaisesMessage(TypeError, msg):
wkb_r.read(bad_wkb)
def test04_wkbwriter(self):
wkb_w = WKBWriter()
@ -96,10 +97,13 @@ class GEOSIOTest(SimpleTestCase):
# Ensuring bad byteorders are not accepted.
for bad_byteorder in (-1, 2, 523, "foo", None):
# Equivalent of `wkb_w.byteorder = bad_byteorder`
msg = "Byte order parameter must be 0 (Big Endian) or 1 (Little Endian)."
with self.assertRaisesMessage(ValueError, msg):
wkb_w._set_byteorder(bad_byteorder)
with self.subTest(bad_byteorder=bad_byteorder):
# Equivalent of `wkb_w.byteorder = bad_byteorder`
msg = (
"Byte order parameter must be 0 (Big Endian) or 1 (Little Endian)."
)
with self.assertRaisesMessage(ValueError, msg):
wkb_w._set_byteorder(bad_byteorder)
# Setting the byteorder to 0 (for Big Endian)
wkb_w.byteorder = 0
@ -122,10 +126,11 @@ class GEOSIOTest(SimpleTestCase):
# Ensuring bad output dimensions are not accepted
for bad_outdim in (-1, 0, 1, 4, 423, "foo", None):
with self.assertRaisesMessage(
ValueError, "WKB output dimension must be 2 or 3"
):
wkb_w.outdim = bad_outdim
with self.subTest(bad_outdim=bad_outdim):
with self.assertRaisesMessage(
ValueError, "WKB output dimension must be 2 or 3"
):
wkb_w.outdim = bad_outdim
# Now setting the output dimensions to be 3
wkb_w.outdim = 3
@ -225,12 +230,15 @@ class GEOSIOTest(SimpleTestCase):
(b"010300000000000000", b"0103000020E610000000000000"),
]
):
wkb_w.byteorder = byteorder
for srid, hex in enumerate(hexes):
wkb_w.srid = srid
self.assertEqual(wkb_w.write_hex(p), hex)
self.assertEqual(
GEOSGeometry(wkb_w.write_hex(p)), p if srid else p_no_srid
)
self.assertEqual(wkb_w.write(p), memoryview(binascii.a2b_hex(hex)))
self.assertEqual(GEOSGeometry(wkb_w.write(p)), p if srid else p_no_srid)
with self.subTest(byteorder=byteorder, hexes=hexes):
wkb_w.byteorder = byteorder
for srid, hex in enumerate(hexes):
wkb_w.srid = srid
self.assertEqual(wkb_w.write_hex(p), hex)
self.assertEqual(
GEOSGeometry(wkb_w.write_hex(p)), p if srid else p_no_srid
)
self.assertEqual(wkb_w.write(p), memoryview(binascii.a2b_hex(hex)))
self.assertEqual(
GEOSGeometry(wkb_w.write(p)), p if srid else p_no_srid
)

View File

@ -78,22 +78,24 @@ class ListMixinTest(SimpleTestCase):
"Slice retrieval"
pl, ul = self.lists_of_len()
for i in self.limits_plus(1):
self.assertEqual(pl[i:], ul[i:], "slice [%d:]" % (i))
self.assertEqual(pl[:i], ul[:i], "slice [:%d]" % (i))
with self.subTest(i=i):
self.assertEqual(pl[i:], ul[i:], "slice [%d:]" % (i))
self.assertEqual(pl[:i], ul[:i], "slice [:%d]" % (i))
for j in self.limits_plus(1):
self.assertEqual(pl[i:j], ul[i:j], "slice [%d:%d]" % (i, j))
for k in self.step_range():
self.assertEqual(
pl[i:j:k], ul[i:j:k], "slice [%d:%d:%d]" % (i, j, k)
)
for j in self.limits_plus(1):
self.assertEqual(pl[i:j], ul[i:j], "slice [%d:%d]" % (i, j))
for k in self.step_range():
self.assertEqual(
pl[i:j:k], ul[i:j:k], "slice [%d:%d:%d]" % (i, j, k)
)
for k in self.step_range():
self.assertEqual(pl[i::k], ul[i::k], "slice [%d::%d]" % (i, k))
self.assertEqual(pl[:i:k], ul[:i:k], "slice [:%d:%d]" % (i, k))
self.assertEqual(pl[i::k], ul[i::k], "slice [%d::%d]" % (i, k))
self.assertEqual(pl[:i:k], ul[:i:k], "slice [:%d:%d]" % (i, k))
for k in self.step_range():
self.assertEqual(pl[::k], ul[::k], "slice [::%d]" % (k))
with self.subTest(k=k):
self.assertEqual(pl[::k], ul[::k], "slice [::%d]" % (k))
def test02_setslice(self):
"Slice assignment"
@ -103,129 +105,136 @@ class ListMixinTest(SimpleTestCase):
pl, ul = self.lists_of_len()
for slen in range(self.limit + 1):
ssl = nextRange(slen)
ul[:] = ssl
pl[:] = ssl
self.assertEqual(pl, ul[:], "set slice [:]")
for i in self.limits_plus(1):
with self.subTest(slen=slen):
ssl = nextRange(slen)
ul[i:] = ssl
pl[i:] = ssl
self.assertEqual(pl, ul[:], "set slice [%d:]" % (i))
ul[:] = ssl
pl[:] = ssl
self.assertEqual(pl, ul[:], "set slice [:]")
ssl = nextRange(slen)
ul[:i] = ssl
pl[:i] = ssl
self.assertEqual(pl, ul[:], "set slice [:%d]" % (i))
for j in self.limits_plus(1):
for i in self.limits_plus(1):
ssl = nextRange(slen)
ul[i:j] = ssl
pl[i:j] = ssl
self.assertEqual(pl, ul[:], "set slice [%d:%d]" % (i, j))
ul[i:] = ssl
pl[i:] = ssl
self.assertEqual(pl, ul[:], "set slice [%d:]" % (i))
for k in self.step_range():
ssl = nextRange(len(ul[i:j:k]))
ul[i:j:k] = ssl
pl[i:j:k] = ssl
self.assertEqual(pl, ul[:], "set slice [%d:%d:%d]" % (i, j, k))
ssl = nextRange(slen)
ul[:i] = ssl
pl[:i] = ssl
self.assertEqual(pl, ul[:], "set slice [:%d]" % (i))
sliceLen = len(ul[i:j:k])
msg = (
f"attempt to assign sequence of size {sliceLen + 1} "
f"to extended slice of size {sliceLen}"
)
with self.assertRaisesMessage(ValueError, msg):
setfcn(ul, i, j, k, sliceLen + 1)
if sliceLen > 2:
for j in self.limits_plus(1):
ssl = nextRange(slen)
ul[i:j] = ssl
pl[i:j] = ssl
self.assertEqual(pl, ul[:], "set slice [%d:%d]" % (i, j))
for k in self.step_range():
ssl = nextRange(len(ul[i:j:k]))
ul[i:j:k] = ssl
pl[i:j:k] = ssl
self.assertEqual(
pl, ul[:], "set slice [%d:%d:%d]" % (i, j, k)
)
sliceLen = len(ul[i:j:k])
msg = (
f"attempt to assign sequence of size {sliceLen - 1} "
f"attempt to assign sequence of size {sliceLen + 1} "
f"to extended slice of size {sliceLen}"
)
with self.assertRaisesMessage(ValueError, msg):
setfcn(ul, i, j, k, sliceLen - 1)
setfcn(ul, i, j, k, sliceLen + 1)
if sliceLen > 2:
msg = (
f"attempt to assign sequence of size {sliceLen - 1}"
f" to extended slice of size {sliceLen}"
)
with self.assertRaisesMessage(ValueError, msg):
setfcn(ul, i, j, k, sliceLen - 1)
for k in self.step_range():
ssl = nextRange(len(ul[i::k]))
ul[i::k] = ssl
pl[i::k] = ssl
self.assertEqual(pl, ul[:], "set slice [%d::%d]" % (i, k))
ssl = nextRange(len(ul[:i:k]))
ul[:i:k] = ssl
pl[:i:k] = ssl
self.assertEqual(pl, ul[:], "set slice [:%d:%d]" % (i, k))
for k in self.step_range():
ssl = nextRange(len(ul[i::k]))
ul[i::k] = ssl
pl[i::k] = ssl
self.assertEqual(pl, ul[:], "set slice [%d::%d]" % (i, k))
ssl = nextRange(len(ul[:i:k]))
ul[:i:k] = ssl
pl[:i:k] = ssl
self.assertEqual(pl, ul[:], "set slice [:%d:%d]" % (i, k))
for k in self.step_range():
ssl = nextRange(len(ul[::k]))
ul[::k] = ssl
pl[::k] = ssl
self.assertEqual(pl, ul[:], "set slice [::%d]" % (k))
ssl = nextRange(len(ul[::k]))
ul[::k] = ssl
pl[::k] = ssl
self.assertEqual(pl, ul[:], "set slice [::%d]" % (k))
def test03_delslice(self):
"Delete slice"
for Len in range(self.limit):
pl, ul = self.lists_of_len(Len)
del pl[:]
del ul[:]
self.assertEqual(pl[:], ul[:], "del slice [:]")
for i in range(-Len - 1, Len + 1):
with self.subTest(Len=Len):
pl, ul = self.lists_of_len(Len)
del pl[i:]
del ul[i:]
self.assertEqual(pl[:], ul[:], "del slice [%d:]" % (i))
pl, ul = self.lists_of_len(Len)
del pl[:i]
del ul[:i]
self.assertEqual(pl[:], ul[:], "del slice [:%d]" % (i))
for j in range(-Len - 1, Len + 1):
del pl[:]
del ul[:]
self.assertEqual(pl[:], ul[:], "del slice [:]")
for i in range(-Len - 1, Len + 1):
pl, ul = self.lists_of_len(Len)
del pl[i:j]
del ul[i:j]
self.assertEqual(pl[:], ul[:], "del slice [%d:%d]" % (i, j))
del pl[i:]
del ul[i:]
self.assertEqual(pl[:], ul[:], "del slice [%d:]" % (i))
pl, ul = self.lists_of_len(Len)
del pl[:i]
del ul[:i]
self.assertEqual(pl[:], ul[:], "del slice [:%d]" % (i))
for j in range(-Len - 1, Len + 1):
pl, ul = self.lists_of_len(Len)
del pl[i:j]
del ul[i:j]
self.assertEqual(pl[:], ul[:], "del slice [%d:%d]" % (i, j))
for k in [*range(-Len - 1, 0), *range(1, Len)]:
pl, ul = self.lists_of_len(Len)
del pl[i:j:k]
del ul[i:j:k]
self.assertEqual(
pl[:], ul[:], "del slice [%d:%d:%d]" % (i, j, k)
)
for k in [*range(-Len - 1, 0), *range(1, Len)]:
pl, ul = self.lists_of_len(Len)
del pl[i:j:k]
del ul[i:j:k]
self.assertEqual(
pl[:], ul[:], "del slice [%d:%d:%d]" % (i, j, k)
)
del pl[:i:k]
del ul[:i:k]
self.assertEqual(pl[:], ul[:], "del slice [:%d:%d]" % (i, k))
pl, ul = self.lists_of_len(Len)
del pl[i::k]
del ul[i::k]
self.assertEqual(pl[:], ul[:], "del slice [%d::%d]" % (i, k))
for k in [*range(-Len - 1, 0), *range(1, Len)]:
pl, ul = self.lists_of_len(Len)
del pl[:i:k]
del ul[:i:k]
self.assertEqual(pl[:], ul[:], "del slice [:%d:%d]" % (i, k))
pl, ul = self.lists_of_len(Len)
del pl[i::k]
del ul[i::k]
self.assertEqual(pl[:], ul[:], "del slice [%d::%d]" % (i, k))
for k in [*range(-Len - 1, 0), *range(1, Len)]:
pl, ul = self.lists_of_len(Len)
del pl[::k]
del ul[::k]
self.assertEqual(pl[:], ul[:], "del slice [::%d]" % (k))
del pl[::k]
del ul[::k]
self.assertEqual(pl[:], ul[:], "del slice [::%d]" % (k))
def test04_get_set_del_single(self):
"Get/set/delete single item"
pl, ul = self.lists_of_len()
for i in self.limits_plus(0):
self.assertEqual(pl[i], ul[i], "get single item [%d]" % i)
with self.subTest(i=i):
self.assertEqual(pl[i], ul[i], "get single item [%d]" % i)
for i in self.limits_plus(0):
pl, ul = self.lists_of_len()
pl[i] = 100
ul[i] = 100
self.assertEqual(pl[:], ul[:], "set single item [%d]" % i)
with self.subTest(i=i):
pl, ul = self.lists_of_len()
pl[i] = 100
ul[i] = 100
self.assertEqual(pl[:], ul[:], "set single item [%d]" % i)
for i in self.limits_plus(0):
pl, ul = self.lists_of_len()
del pl[i]
del ul[i]
self.assertEqual(pl[:], ul[:], "del single item [%d]" % i)
with self.subTest(i=i):
pl, ul = self.lists_of_len()
del pl[i]
del ul[i]
self.assertEqual(pl[:], ul[:], "del single item [%d]" % i)
def test05_out_of_range_exceptions(self):
"Out of range exceptions"
@ -242,12 +251,13 @@ class ListMixinTest(SimpleTestCase):
pl, ul = self.lists_of_len()
for i in (-1 - self.limit, self.limit):
msg = f"invalid index: {i}"
with self.assertRaisesMessage(IndexError, msg): # 'set index %d' % i)
setfcn(ul, i)
with self.assertRaisesMessage(IndexError, msg): # 'get index %d' % i)
getfcn(ul, i)
with self.assertRaisesMessage(IndexError, msg): # 'del index %d' % i)
delfcn(ul, i)
with self.subTest(i=i):
with self.assertRaisesMessage(IndexError, msg): # 'set index %d' % i)
setfcn(ul, i)
with self.assertRaisesMessage(IndexError, msg): # 'get index %d' % i)
getfcn(ul, i)
with self.assertRaisesMessage(IndexError, msg): # 'del index %d' % i)
delfcn(ul, i)
def test06_list_methods(self):
"List methods"
@ -265,15 +275,17 @@ class ListMixinTest(SimpleTestCase):
self.assertEqual(pl[:], ul[:], "reverse")
for i in self.limits_plus(1):
pl, ul = self.lists_of_len()
pl.insert(i, 50)
ul.insert(i, 50)
self.assertEqual(pl[:], ul[:], "insert at %d" % i)
with self.subTest(i=i):
pl, ul = self.lists_of_len()
pl.insert(i, 50)
ul.insert(i, 50)
self.assertEqual(pl[:], ul[:], "insert at %d" % i)
for i in self.limits_plus(0):
pl, ul = self.lists_of_len()
self.assertEqual(pl.pop(i), ul.pop(i), "popped value at %d" % i)
self.assertEqual(pl[:], ul[:], "after pop at %d" % i)
with self.subTest(i=i):
pl, ul = self.lists_of_len()
self.assertEqual(pl.pop(i), ul.pop(i), "popped value at %d" % i)
self.assertEqual(pl[:], ul[:], "after pop at %d" % i)
pl, ul = self.lists_of_len()
self.assertEqual(pl.pop(), ul.pop(i), "popped value")
@ -293,16 +305,19 @@ class ListMixinTest(SimpleTestCase):
pl, ul = self.lists_of_len()
for val in range(self.limit):
self.assertEqual(pl.index(val), ul.index(val), "index of %d" % val)
with self.subTest(val=val):
self.assertEqual(pl.index(val), ul.index(val), "index of %d" % val)
for val in self.limits_plus(2):
self.assertEqual(pl.count(val), ul.count(val), "count %d" % val)
with self.subTest(val=val):
self.assertEqual(pl.count(val), ul.count(val), "count %d" % val)
for val in range(self.limit):
pl, ul = self.lists_of_len()
pl.remove(val)
ul.remove(val)
self.assertEqual(pl[:], ul[:], "after remove val %d" % val)
with self.subTest(val=val):
pl, ul = self.lists_of_len()
pl.remove(val)
ul.remove(val)
self.assertEqual(pl[:], ul[:], "after remove val %d" % val)
def indexfcn(x, v):
return x.index(v)
@ -345,15 +360,17 @@ class ListMixinTest(SimpleTestCase):
msg = "Must have at least 3 items"
for i in range(len(ul) - ul._minlength + 1, len(ul)):
with self.assertRaisesMessage(ValueError, msg):
delfcn(ul, i)
with self.assertRaisesMessage(ValueError, msg):
setfcn(ul, i)
with self.subTest(i=i):
with self.assertRaisesMessage(ValueError, msg):
delfcn(ul, i)
with self.assertRaisesMessage(ValueError, msg):
setfcn(ul, i)
del ul[: len(ul) - ul._minlength]
ul._maxlength = 4
for i in range(0, ul._maxlength - len(ul)):
ul.append(i)
with self.subTest(i=i):
ul.append(i)
msg = "Cannot have more than 4 items"
with self.assertRaisesMessage(ValueError, msg):
ul.append(10)
@ -373,17 +390,19 @@ class ListMixinTest(SimpleTestCase):
"Index check"
pl, ul = self.lists_of_len()
for i in self.limits_plus(0):
if i < 0:
self.assertEqual(
ul._checkindex(i), i + self.limit, "_checkindex(neg index)"
)
else:
self.assertEqual(ul._checkindex(i), i, "_checkindex(pos index)")
with self.subTest(i=i):
if i < 0:
self.assertEqual(
ul._checkindex(i), i + self.limit, "_checkindex(neg index)"
)
else:
self.assertEqual(ul._checkindex(i), i, "_checkindex(pos index)")
for i in (-self.limit - 1, self.limit):
msg = f"invalid index: {i}"
with self.assertRaisesMessage(IndexError, msg):
ul._checkindex(i)
with self.subTest(i=i):
with self.assertRaisesMessage(IndexError, msg):
ul._checkindex(i)
def test_11_sorting(self):
"Sorting"