diff --git a/xrspatial/tests/test_contour.py b/xrspatial/tests/test_contour.py index cacc2d011..c3ee0ff35 100644 --- a/xrspatial/tests/test_contour.py +++ b/xrspatial/tests/test_contour.py @@ -1498,3 +1498,49 @@ def test_nan_dask_cupy_equals_numpy(self): for lvl in np_segs: assert np_segs[lvl] == dc_segs[lvl], ( f"NaN-input dask+cupy result diverges from numpy at level {lvl}") + + +# --------------------------------------------------------------------------- +# Coverage gaps: all-equal auto-levels and empty explicit levels (#3352) +# --------------------------------------------------------------------------- + +class TestFlatAutoLevelsAndEmptyLevels: + + def test_contours_flat_auto_levels(self): + """An all-equal raster with auto-levels (levels=None) returns empty. + + When vmin == vmax, np.linspace produces identical levels and no + contours are generated. Regression guard for the auto-level branch. + """ + raster = create_test_raster( + np.ones((10, 10), dtype=np.float64), backend='numpy' + ) + result = contours(raster, levels=None, n_levels=10) + assert isinstance(result, list) + assert len(result) == 0 + + def test_contours_empty_explicit_levels_numpy(self): + """Passing an empty list as levels with numpy return_type returns []. + + No crossing can exist with zero levels, so the function returns an + empty list without raising. + """ + raster = create_test_raster( + np.random.rand(10, 10), backend='numpy' + ) + result = contours(raster, levels=[], return_type='numpy') + assert isinstance(result, list) + assert len(result) == 0 + + def test_contours_empty_explicit_levels_geopandas(self): + """Passing an empty list as levels with geopandas returns empty gdf.""" + pytest.importorskip('geopandas') + import geopandas as gpd + raster = create_test_raster( + np.random.rand(10, 10), backend='numpy' + ) + result_gdf = contours(raster, levels=[], return_type='geopandas') + assert isinstance(result_gdf, gpd.GeoDataFrame) + assert len(result_gdf) == 0 + assert 'level' in result_gdf.columns + assert 'geometry' in result_gdf.columns