{"id":"v001","input":{"elevations":[{"row":"101.2, 100.6, 100.2"},{"row":"100.4, 99.8, 99.2"},{"row":"99.6, 99.0, 98.4"}],"cell_size":"30 m"},"expect":{"result.slope.value":1.9198533890854377,"result.hillshade":174,"result.aspect.value":145.12467165539755,"ok":true},"source":"Index formulas transcribed from their papers in Python (tools/vectors/gen_raster.py)","sourceVersion":"2026-09-22","tolerance":{"result.slope.value":{"rel":0,"abs":1e-09},"result.hillshade":{"rel":0,"abs":1e-09},"result.aspect.value":{"rel":0,"abs":1e-09}}}
{"id":"v002","input":{"elevations":[{"row":"100, 100, 100"},{"row":"100, 100, 100"},{"row":"100, 100, 100"}],"cell_size":"30 m"},"expect":{"result.slope.value":0.0,"result.hillshade":180,"ok":true},"source":"Index formulas transcribed from their papers in Python (tools/vectors/gen_raster.py)","sourceVersion":"2026-09-22","tolerance":{"result.slope.value":{"rel":0,"abs":1e-09},"result.hillshade":{"rel":0,"abs":1e-09}}}
{"id":"v003","input":{"elevations":[{"row":"120, 118, 116"},{"row":"119, 117, 115"},{"row":"118, 116, 114"}],"cell_size":"30 m"},"expect":{"result.slope.value":4.262693045214654,"result.hillshade":167,"result.aspect.value":116.56505117707799,"ok":true},"source":"Index formulas transcribed from their papers in Python (tools/vectors/gen_raster.py)","sourceVersion":"2026-09-22","tolerance":{"result.slope.value":{"rel":0,"abs":1e-09},"result.hillshade":{"rel":0,"abs":1e-09},"result.aspect.value":{"rel":0,"abs":1e-09}}}
{"id":"v004","input":{"elevations":[{"row":"50, 60, 70"},{"row":"50, 60, 70"},{"row":"50, 60, 70"}],"cell_size":"30 m"},"expect":{"result.slope.value":18.43494882292201,"result.hillshade":211,"result.aspect.value":270.0,"ok":true},"source":"Index formulas transcribed from their papers in Python (tools/vectors/gen_raster.py)","sourceVersion":"2026-09-22","tolerance":{"result.slope.value":{"rel":0,"abs":1e-09},"result.hillshade":{"rel":0,"abs":1e-09},"result.aspect.value":{"rel":0,"abs":1e-09}}}
{"id":"v005","input":{"elevations":[{"row":"70, 60, 50"},{"row":"70, 60, 50"},{"row":"70, 60, 50"}],"cell_size":"30 m"},"expect":{"result.slope.value":18.43494882292201,"result.hillshade":131,"result.aspect.value":90.0,"ok":true},"source":"Index formulas transcribed from their papers in Python (tools/vectors/gen_raster.py)","sourceVersion":"2026-09-22","tolerance":{"result.slope.value":{"rel":0,"abs":1e-09},"result.hillshade":{"rel":0,"abs":1e-09},"result.aspect.value":{"rel":0,"abs":1e-09}}}
{"id":"v006","input":{"elevations":[{"row":"10, 10, 10"},{"row":"10, 20, 10"},{"row":"10, 10, 10"}],"cell_size":"30 m"},"expect":{"result.slope.value":0.0,"result.hillshade":180,"ok":true},"source":"Index formulas transcribed from their papers in Python (tools/vectors/gen_raster.py)","sourceVersion":"2026-09-22","tolerance":{"result.slope.value":{"rel":0,"abs":1e-09},"result.hillshade":{"rel":0,"abs":1e-09}}}
{"id":"v007","input":{"elevations":[{"row":"200, 190, 180"},{"row":"190, 180, 170"},{"row":"180, 170, 160"}],"cell_size":"30 m"},"expect":{"result.slope.value":25.239401820678914,"result.hillshade":86,"result.aspect.value":135.0,"ok":true},"source":"Index formulas transcribed from their papers in Python (tools/vectors/gen_raster.py)","sourceVersion":"2026-09-22","tolerance":{"result.slope.value":{"rel":0,"abs":1e-09},"result.hillshade":{"rel":0,"abs":1e-09},"result.aspect.value":{"rel":0,"abs":1e-09}}}
