From 8f01de7c837d0b10075c7d39651085e72570e69b Mon Sep 17 00:00:00 2001
From: David Smith <smithdc@gmail.com>
Date: Fri, 8 Nov 2024 07:47:12 +0000
Subject: [PATCH] Improved iteration of geometries in GEOS tests.

---
 tests/gis_tests/geos_tests/test_geos.py | 91 +++++++++++++------------
 1 file changed, 47 insertions(+), 44 deletions(-)

diff --git a/tests/gis_tests/geos_tests/test_geos.py b/tests/gis_tests/geos_tests/test_geos.py
index bee4588b97..b07c7c04b7 100644
--- a/tests/gis_tests/geos_tests/test_geos.py
+++ b/tests/gis_tests/geos_tests/test_geos.py
@@ -760,22 +760,18 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
                     )  # Making sure __len__ works
 
                     # Checks __getitem__ and __setitem__
-                    for i in range(len(p.ext_ring_cs)):
-                        c1 = p.ext_ring_cs[i]  # Expected value
-                        c2 = cs[i]  # Value from coordseq
-                        self.assertEqual(c1, c2)
+                    for expected_value, coord_sequence in zip(p.ext_ring_cs, cs):
+                        self.assertEqual(expected_value, coord_sequence)
 
                         # Construct the test value to set the coordinate sequence with
-                        if len(c1) == 2:
+                        if len(expected_value) == 2:
                             tset = (5, 23)
                         else:
                             tset = (5, 23, 8)
-                        cs[i] = tset
+                        coord_sequence = tset
 
                         # Making sure every set point matches what we expect
-                        for j in range(len(tset)):
-                            cs[i] = tset
-                            self.assertEqual(tset[j], cs[i][j])
+                        self.assertEqual(tset, coord_sequence)
 
     def test_relate_pattern(self):
         "Testing relate() and relate_pattern()."
@@ -792,11 +788,13 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
 
     def test_intersection(self):
         "Testing intersects() and intersection()."
-        for i in range(len(self.geometries.topology_geoms)):
-            with self.subTest(i=i):
-                a = fromstr(self.geometries.topology_geoms[i].wkt_a)
-                b = fromstr(self.geometries.topology_geoms[i].wkt_b)
-                i1 = fromstr(self.geometries.intersect_geoms[i].wkt)
+        for topology_geom, intersect_geom in zip(
+            self.geometries.topology_geoms, self.geometries.intersect_geoms
+        ):
+            with self.subTest(topology_geom=topology_geom):
+                a = fromstr(topology_geom.wkt_a)
+                b = fromstr(topology_geom.wkt_b)
+                i1 = fromstr(intersect_geom.wkt)
                 self.assertIs(a.intersects(b), True)
                 i2 = a.intersection(b)
                 self.assertTrue(i1.equals(i2))
@@ -806,11 +804,13 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
 
     def test_union(self):
         "Testing union()."
-        for i in range(len(self.geometries.topology_geoms)):
-            with self.subTest(i=i):
-                a = fromstr(self.geometries.topology_geoms[i].wkt_a)
-                b = fromstr(self.geometries.topology_geoms[i].wkt_b)
-                u1 = fromstr(self.geometries.union_geoms[i].wkt)
+        for topology_geom, union_geom in zip(
+            self.geometries.topology_geoms, self.geometries.union_geoms
+        ):
+            with self.subTest(topology_geom=topology_geom):
+                a = fromstr(topology_geom.wkt_a)
+                b = fromstr(topology_geom.wkt_b)
+                u1 = fromstr(union_geom.wkt)
                 u2 = a.union(b)
                 self.assertTrue(u1.equals(u2))
                 self.assertTrue(u1.equals(a | b))  # __or__ is union operator
@@ -819,21 +819,25 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
 
     def test_unary_union(self):
         "Testing unary_union."
-        for i in range(len(self.geometries.topology_geoms)):
-            with self.subTest(i=i):
-                a = fromstr(self.geometries.topology_geoms[i].wkt_a)
-                b = fromstr(self.geometries.topology_geoms[i].wkt_b)
-                u1 = fromstr(self.geometries.union_geoms[i].wkt)
+        for topology_geom, union_geom in zip(
+            self.geometries.topology_geoms, self.geometries.union_geoms
+        ):
+            with self.subTest(topology_geom=topology_geom):
+                a = fromstr(topology_geom.wkt_a)
+                b = fromstr(topology_geom.wkt_b)
+                u1 = fromstr(union_geom.wkt)
                 u2 = GeometryCollection(a, b).unary_union
                 self.assertTrue(u1.equals(u2))
 
     def test_difference(self):
         "Testing difference()."
-        for i in range(len(self.geometries.topology_geoms)):
-            with self.subTest(i=i):
-                a = fromstr(self.geometries.topology_geoms[i].wkt_a)
-                b = fromstr(self.geometries.topology_geoms[i].wkt_b)
-                d1 = fromstr(self.geometries.diff_geoms[i].wkt)
+        for topology_geom, union_geom in zip(
+            self.geometries.topology_geoms, self.geometries.diff_geoms
+        ):
+            with self.subTest(topology_geom=topology_geom):
+                a = fromstr(topology_geom.wkt_a)
+                b = fromstr(topology_geom.wkt_b)
+                d1 = fromstr(union_geom.wkt)
                 d2 = a.difference(b)
                 self.assertTrue(d1.equals(d2))
                 self.assertTrue(d1.equals(a - b))  # __sub__ is difference operator
@@ -842,11 +846,13 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
 
     def test_symdifference(self):
         "Testing sym_difference()."
-        for i in range(len(self.geometries.topology_geoms)):
-            with self.subTest(i=i):
-                a = fromstr(self.geometries.topology_geoms[i].wkt_a)
-                b = fromstr(self.geometries.topology_geoms[i].wkt_b)
-                d1 = fromstr(self.geometries.sdiff_geoms[i].wkt)
+        for topology_geom, sdiff_geom in zip(
+            self.geometries.topology_geoms, self.geometries.sdiff_geoms
+        ):
+            with self.subTest(topology_geom=topology_geom):
+                a = fromstr(topology_geom.wkt_a)
+                b = fromstr(topology_geom.wkt_b)
+                d1 = fromstr(sdiff_geom.wkt)
                 d2 = a.sym_difference(b)
                 self.assertTrue(d1.equals(d2))
                 self.assertTrue(
@@ -955,15 +961,12 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
                 self.assertEqual(len(exp_buf), len(buf))
 
                 # Now assuring that each point in the buffer is almost equal
-                for j in range(len(exp_buf)):
-                    exp_ring = exp_buf[j]
-                    buf_ring = buf[j]
-                    self.assertEqual(len(exp_ring), len(buf_ring))
-                    for k in range(len(exp_ring)):
+                for exp_ring, buf_ring in zip(exp_buf, buf, strict=True):
+                    for exp_point, buf_point in zip(exp_ring, buf_ring, strict=True):
                         # Asserting the X, Y of each point are almost equal (due to
                         # floating point imprecision).
-                        self.assertAlmostEqual(exp_ring[k][0], buf_ring[k][0], 9)
-                        self.assertAlmostEqual(exp_ring[k][1], buf_ring[k][1], 9)
+                        self.assertAlmostEqual(exp_point[0], buf_point[0], 9)
+                        self.assertAlmostEqual(exp_point[1], buf_point[1], 9)
 
     def test_covers(self):
         poly = Polygon(((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)))
@@ -1007,9 +1010,9 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
             Point(5, 23), LineString((0, 0), (1.5, 1.5), (3, 3)), srid=32021
         )
         self.assertEqual(32021, gc.srid)
-        for i in range(len(gc)):
-            with self.subTest(i=i):
-                self.assertEqual(32021, gc[i].srid)
+        for geom in gc:
+            with self.subTest(geom=geom):
+                self.assertEqual(32021, geom.srid)
 
         # GEOS may get the SRID from HEXEWKB
         # 'POINT(5 23)' at SRID=4326 in hex form -- obtained from PostGIS