@@ -50,12 +50,12 @@ def test_sextent_with_bad_value(self):
5050 SExtent (extent )
5151
5252 # lat_min < -90
53- extent = [- 180 , 181 , - 91 , 40 ]
53+ extent = [50 , 60 , - 91 , 40 ]
5454 with pytest .raises (ValueError ):
5555 SExtent (extent )
5656
5757 # lat_max > 90
58- extent = [- 180 , 181 , - 40 , 91 ]
58+ extent = [50 , 60 , - 40 , 91 ]
5959 with pytest .raises (ValueError ):
6060 SExtent (extent )
6161
@@ -92,59 +92,87 @@ def test_sextent_with_bad_input(self):
9292 with pytest .raises (ValueError ):
9393 SExtent (list_extent )
9494
95- def test_sextent_with_correct_values (self ):
96- """Test it creates the SExtent when providing correct values."""
97- # - Classic
95+ def test_sextent_with_correct_format (self ):
96+ """Test SExtent when providing correct extent(s) format and values."""
97+ # Accept list
9898 extent = [- 180 , - 175 , - 40 , 40 ]
9999 assert list (SExtent (extent ))[0 ] == extent
100- # - Same lon
101- extent = [0 , 0 , - 40 , 40 ]
102- assert list (SExtent (extent ))[0 ] == extent
103- # - Same lat
104- extent = [- 10 , 0 , 40 , 40 ]
105- assert list (SExtent (extent ))[0 ] == extent
106- # - Same lat, lon (--> point extent)
107- extent = [0 , 0 , 40 , 40 ]
108- assert list (SExtent (extent ))[0 ] == extent
109- # Accept numpy array
110- extent = np .array ([- 180 , - 175 , - 40 , 40 ])
111- assert list (SExtent (extent ))[0 ] == extent .tolist ()
112100 # Accept tuple
113101 extent = (- 180 , - 175 , - 40 , 40 )
114102 assert list (SExtent (extent ))[0 ] == list (extent )
115- # Accept list of extents
103+ # Accept numpy array
104+ extent = np .array ([- 180 , - 175 , - 40 , 40 ])
105+ assert list (SExtent (extent ))[0 ] == extent .tolist ()
106+
107+ # Accept list of extents (list)
116108 extent1 = [50 , 60 , - 40 , 40 ]
117109 extent2 = [175 , 180 , - 40 , 40 ]
118110 list_extent = [extent1 , extent2 ]
119111 assert np .allclose (list (SExtent (list_extent )), list_extent )
120- # Accept multiple extents
112+ # Accept list of extents (tuple)
113+ extent1 = (50 , 60 , - 40 , 40 )
114+ extent2 = (175 , 180 , - 40 , 40 )
115+ list_extent = [extent1 , extent2 ]
116+ assert np .allclose (list (SExtent (list_extent )), list_extent )
117+ # Accept list of extents (np.array)
118+ extent1 = np .array ([0 , 60 , - 40 , 40 ])
119+ extent2 = np .array ([175 , 180 , - 40 , 40 ])
120+ list_extent = [extent1 , extent2 ]
121+ assert np .allclose (list (SExtent (list_extent )), list_extent )
122+ # Accept multiple extents (list)
121123 extent1 = [50 , 60 , - 40 , 40 ]
122124 extent2 = [175 , 180 , - 40 , 40 ]
123125 list_extent = [extent1 , extent2 ]
124- assert np .allclose (list (SExtent (list_extent )), list_extent )
126+ assert np .allclose (list (SExtent (extent1 , extent2 )), list_extent )
127+ # Accept multiple extents (tuple)
128+ extent1 = (50 , 60 , - 40 , 40 )
129+ extent2 = (175 , 180 , - 40 , 40 )
130+ list_extent = [extent1 , extent2 ]
131+ assert np .allclose (list (SExtent (extent1 , extent2 )), list_extent )
132+ # Accept multiple extents (np.array)
133+ extent1 = np .array ([0 , 60 , - 40 , 40 ])
134+ extent2 = np .array ([175 , 180 , - 40 , 40 ])
135+ list_extent = [extent1 , extent2 ]
136+ assert np .allclose (list (SExtent (extent1 , extent2 )), list_extent )
137+
138+ def test_single_sextent_bad_topology (self ):
139+ """Test that raise error when the extents is a point or a line."""
140+ # - Point extent
141+ extent = [0 , 0 , 40 , 40 ]
142+ with pytest .raises (ValueError ):
143+ SExtent (extent )
144+ # - Line extent
145+ extent = [0 , 10 , 40 , 40 ]
146+ with pytest .raises (ValueError ):
147+ SExtent (extent )
148+ extent = [0 , 0 , - 40 , 50 ]
149+ with pytest .raises (ValueError ):
150+ SExtent (extent )
125151
126- def test_sextent_bad_topology (self ):
127- """Test that capture error when the extents composing SExtent overlaps."""
128- # Touching does not raise errors
152+ def test_multple_touching_extents (self ):
153+ """Test that touching extents composing SExtent do not raise error."""
129154 extent1 = [0 , 40 , 0 , 40 ]
130155 extent2 = [0 , 40 , - 40 , 0 ]
131156 _ = SExtent (extent1 , extent2 )
132157
158+ def test_multple_overlapping_extents (self ):
159+ """Test that raise error when the extents composing SExtent overlaps."""
133160 # Intersecting raise error
134161 extent1 = [0 , 40 , 0 , 40 ]
135162 extent2 = [20 , 60 , 20 , 60 ]
136163 with pytest .raises (ValueError ):
137164 SExtent (extent1 , extent2 )
138165
139- # TODO: Duplicate extent do not raise errors
166+ # Duplicate extent raise errors
140167 extent1 = [0 , 40 , 0 , 40 ]
141- extent2 = extent1
142- SExtent (extent1 , extent2 )
168+ with pytest . raises ( ValueError ):
169+ SExtent (extent1 , extent1 )
143170
144- # TODO: Within extent do not raise errors
171+ # Within extent raise errors
145172 extent1 = [0 , 40 , 0 , 40 ]
146173 extent2 = [10 , 20 , 10 , 20 ]
147- SExtent (extent1 , extent2 )
174+ with pytest .raises (ValueError ):
175+ SExtent (extent1 , extent2 )
148176
149177 def test_to_shapely (self ):
150178 """Test shapely conversion."""
@@ -174,16 +202,22 @@ def test_is_global(self):
174202 sext = SExtent (extent )
175203 assert sext .is_global
176204
177- # Is not global
205+ # Is clearly not global
178206 extent = [- 175 , 180 , - 90 , 90 ]
179207 sext = SExtent (extent )
180208 assert not sext .is_global
181209
182210 # Is global, but with multiple extents
183- extent = [- 180 , 0 , - 90 , 90 ]
184- extent1 = [0 , 180 , - 90 , 90 ]
185- sext = SExtent (extent , extent1 )
186- assert not sext .is_global # TODO IMPROVE !!!
211+ extent1 = [- 180 , 0 , - 90 , 90 ]
212+ extent2 = [0 , 180 , - 90 , 90 ]
213+ sext = SExtent (extent1 , extent2 )
214+ assert sext .is_global
215+
216+ # Is not global, but polgon bounds ...
217+ extent1 = [- 180 , 0 , - 90 , 90 ]
218+ extent2 = [0 , 180 , 0 , 90 ]
219+ sext = SExtent (extent1 , extent2 )
220+ assert not sext .is_global
187221
188222 def test_SExtent_single_not_intersect (self ):
189223 """Check disjoint extents."""
@@ -496,3 +530,25 @@ def test_SExtent_multiple_equals(self):
496530 # Equal extents do not touches !
497531 assert not sext1 .touches (sext2 )
498532 assert not sext2 .touches (sext1 )
533+
534+ def test_SExtent_binary_predicates_bad_input (self ):
535+ extent = [160 , 180 , - 40 , 40 ]
536+ sext = SExtent (extent )
537+ # Disjoint
538+ with pytest .raises (TypeError ):
539+ sext .disjoint ("bad_dtype" )
540+ # Intersects
541+ with pytest .raises (TypeError ):
542+ sext .intersects ("bad_dtype" )
543+ # Within
544+ with pytest .raises (TypeError ):
545+ sext .within ("bad_dtype" )
546+ # Contains
547+ with pytest .raises (TypeError ):
548+ sext .contains ("bad_dtype" )
549+ # Touches
550+ with pytest .raises (TypeError ):
551+ sext .touches ("bad_dtype" )
552+ # Equals
553+ with pytest .raises (TypeError ):
554+ sext .equals ("bad_dtype" )
0 commit comments