Skip to content

Numeric Boundary: 1e-15

vectorGeoJSONPointEPSG:4326tinybundled

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.

Point geometry of numeric_boundary_1e15, rendered from the case's data
Point geometry, rendered from the case's actual geometry. Scale is normalized to the viewport and is not comparable between cases.
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:

pip install "geocase[all]"

View GeoCase on PyPI.

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

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

  • load
  • geometry-validation
  • coordinate-precision-check

Files

Browse this case on GitHub

Source and license

  • Source: geocase-synthetic
  • License: MIT

Tags

geojson numeric_boundary precision single_variable vector