Numeric Boundary: 1e-15¶
A single-point GeoJSON whose coordinate one decade below the affected magnitude class. The lower bracket, and the one that separates 'GDAL's intelliround bug' from 'the value fell off the end of 15 decimal places'. 1e-15 is at the writer's declared limit, so losing it is documented behaviour; losing 1e-14 is not.
| Property | Value |
|---|---|
| Case ID | numeric_boundary_1e15 |
| Category | vector |
| Format | GeoJSON |
| Geometry type | Point |
| CRS | EPSG:4326 |
| Location | 0.00°E, 0.00°N → 0.00°E, 0.00°N |
| Test tier | unit |
| Size class | tiny |
| Storage class | bundled |
| Redistributable | yes |
| Loader | geopandas |
| Status | validated |
Use this case¶
import pytest
@pytest.mark.geocase_case("numeric_boundary_1e15")
def test_numeric_boundary_1e15(geocase_case) -> None:
data = geocase_case.load()
assert data is not None
Use GeoCase in your tests¶
Install the complete set of vector, raster, and NetCDF dependencies:
What this case checks¶
Establish whether a text write/read cycle returns this coordinate unchanged. The expected answer ships with the case, so a consumer is graded rather than left to re-derive what "survived" means.
Risk types covered¶
failure_mode/reference_implementationprecision/denormal_magnitudeprecision/formatter_boundaryprecision/significant_digits
Expected behavior¶
| Assertion | Expected |
|---|---|
expect_loadable |
yes |
expect_valid_geometry |
yes |
expect_crs |
yes |
expected_epsg |
4326 |
expected_geometry_types |
Point |
expected_roundtrip_coordinates |
[1e-15, 1e-15] |
Notes¶
The property¶
The single point in this file one decade below the affected magnitude class:
| value | shortest round-trip repr | |
|---|---|---|
| x | 1e-15 |
1e-15 |
| y | 1e-15 |
1e-15 |
One feature, one property. Plan 40's control principle: if a consumer fails this case and passes its siblings, the failure names the property.
Why this value¶
The lower bracket, and the one that separates 'GDAL's intelliround bug' from 'the value fell off the end of 15 decimal places'. 1e-15 is at the writer's declared limit, so losing it is documented behaviour; losing 1e-14 is not.
What to assert¶
assertions.expected_roundtrip_coordinates carries the pair the file holds.
Write the case out in your own format, read it back, and compare against that
field rather than against a tolerance you chose:
import geocase
meta = geocase.get_case("numeric_boundary_1e15")
expected = meta.assertions.expected_roundtrip_coordinates
A tolerance hides the failure this family exists to find -- GDAL
d6fd56f52d writes 1e-14 as 0, and every tolerance loose enough to be
"reasonable" for a coordinate near zero passes that silently.
Provenance¶
Plan 44 phase 2, from the 2026-09-06 run against GDAL d6fd56f52d. See
docs/plans/44-gdal-as-target-and-the-numeric-axis.md.
Required capabilities¶
loadgeometry-validationcoordinate-precision-check
Files¶
- Primary:
numeric_boundary_1e15.geojson - Notes:
notes.md
Source and license¶
- Source: geocase-synthetic
- License: MIT
Tags¶
geojson numeric_boundary precision single_variable vector
Related cases¶
- Numeric Boundary: 15 Significant Digits --
numeric_boundary_15_significant_digits - Numeric Boundary: 17 Significant Digits --
numeric_boundary_17_significant_digits - Numeric Boundary: 1e-13 --
numeric_boundary_1e13 - Numeric Boundary: 1e-14 --
numeric_boundary_1e14 - Numeric Boundary: Trailing Nines --
numeric_boundary_trailing_nines