{"id":"v001","input":{"runways":"09/27, 18/36","wind_direction":"200 deg","wind_speed":"12 kt"},"expect":{"result.best":"18","result.best_headwind.value":11.276311449430901,"result.best_crosswind.value":4.104241719908025,"result.runways.0.runway":"18","result.runways.0.headwind.value":11.276311449430901,"result.runways.1.runway":"27","result.runways.1.headwind.value":4.104241719908026,"result.runways.2.runway":"09","result.runways.2.headwind.value":-4.104241719908025,"result.runways.3.runway":"36","result.runways.3.headwind.value":-11.2763114494309,"ok":true},"source":"add-aviation-suite ranking scenario (runway 18 ranks first, every runway listed)","sourceVersion":"2026","tolerance":{"result.best_headwind.value":{"rel":0,"abs":1e-09},"result.best_crosswind.value":{"rel":0,"abs":1e-09},"result.runways.0.headwind.value":{"rel":0,"abs":1e-09},"result.runways.1.headwind.value":{"rel":0,"abs":1e-09},"result.runways.2.headwind.value":{"rel":0,"abs":1e-09},"result.runways.3.headwind.value":{"rel":0,"abs":1e-09}}}
{"id":"v002","input":{"runways":"09/27 18/36","wind_direction":"300 deg","wind_speed":"15 kt"},"expect":{"result.best":"27","result.best_headwind.value":12.99038105676658,"result.best_crosswind.value":7.499999999999999,"result.runways.0.runway":"27","result.runways.0.headwind.value":12.99038105676658,"result.runways.1.runway":"36","result.runways.1.headwind.value":7.500000000000002,"result.runways.2.runway":"18","result.runways.2.headwind.value":-7.499999999999997,"result.runways.3.runway":"09","result.runways.3.headwind.value":-12.990381056766578,"ok":true},"source":"Runway wind components ranked in Python (tools/vectors/gen_runway.py)","sourceVersion":"2026","tolerance":{"result.best_headwind.value":{"rel":0,"abs":1e-09},"result.best_crosswind.value":{"rel":0,"abs":1e-09},"result.runways.0.headwind.value":{"rel":0,"abs":1e-09},"result.runways.1.headwind.value":{"rel":0,"abs":1e-09},"result.runways.2.headwind.value":{"rel":0,"abs":1e-09},"result.runways.3.headwind.value":{"rel":0,"abs":1e-09}}}
{"id":"v003","input":{"runways":"04L/22R, 04R/22L, 13/31","wind_direction":"250 deg","wind_speed":"20 kt"},"expect":{"result.best":"22R","result.best_headwind.value":17.320508075688775,"result.best_crosswind.value":9.999999999999998,"result.runways.0.runway":"22R","result.runways.0.headwind.value":17.320508075688775,"result.runways.1.runway":"22L","result.runways.1.headwind.value":17.320508075688775,"result.runways.2.runway":"31","result.runways.2.headwind.value":10.000000000000002,"result.runways.3.runway":"13","result.runways.3.headwind.value":-9.999999999999996,"result.runways.4.runway":"04L","result.runways.4.headwind.value":-17.32050807568877,"result.runways.5.runway":"04R","result.runways.5.headwind.value":-17.32050807568877,"ok":true},"source":"Runway wind components ranked in Python (tools/vectors/gen_runway.py)","sourceVersion":"2026","tolerance":{"result.best_headwind.value":{"rel":0,"abs":1e-09},"result.best_crosswind.value":{"rel":0,"abs":1e-09},"result.runways.0.headwind.value":{"rel":0,"abs":1e-09},"result.runways.1.headwind.value":{"rel":0,"abs":1e-09},"result.runways.2.headwind.value":{"rel":0,"abs":1e-09},"result.runways.3.headwind.value":{"rel":0,"abs":1e-09},"result.runways.4.headwind.value":{"rel":0,"abs":1e-09},"result.runways.5.headwind.value":{"rel":0,"abs":1e-09}}}
{"id":"v004","input":{"runways":"16/34","wind_direction":"240 deg","wind_speed":"18 kt","max_crosswind":"10 kt"},"expect":{"result.best":"16","result.best_headwind.value":3.1256671980047477,"result.best_crosswind.value":17.726539554219745,"result.runways.0.runway":"16","result.runways.0.headwind.value":3.1256671980047477,"result.runways.1.runway":"34","result.runways.1.headwind.value":-3.1256671980047455,"result.beyond_limits":2,"ok":true},"source":"Runway wind components ranked in Python (tools/vectors/gen_runway.py)","sourceVersion":"2026","tolerance":{"result.best_headwind.value":{"rel":0,"abs":1e-09},"result.best_crosswind.value":{"rel":0,"abs":1e-09},"result.runways.0.headwind.value":{"rel":0,"abs":1e-09},"result.runways.1.headwind.value":{"rel":0,"abs":1e-09},"result.beyond_limits":{"rel":0,"abs":1e-09}}}
{"id":"v005","input":{"runways":"01/19 10/28","wind_direction":"50 deg","wind_speed":"25 kt","max_crosswind":"15 kt"},"expect":{"result.best":"01","result.best_headwind.value":19.151111077974452,"result.best_crosswind.value":16.06969024216348,"result.runways.0.runway":"01","result.runways.0.headwind.value":19.151111077974452,"result.runways.1.runway":"10","result.runways.1.headwind.value":16.069690242163485,"result.runways.2.runway":"28","result.runways.2.headwind.value":-16.069690242163485,"result.runways.3.runway":"19","result.runways.3.headwind.value":-19.15111107797445,"result.beyond_limits":4,"ok":true},"source":"Runway wind components ranked in Python (tools/vectors/gen_runway.py)","sourceVersion":"2026","tolerance":{"result.best_headwind.value":{"rel":0,"abs":1e-09},"result.best_crosswind.value":{"rel":0,"abs":1e-09},"result.runways.0.headwind.value":{"rel":0,"abs":1e-09},"result.runways.1.headwind.value":{"rel":0,"abs":1e-09},"result.runways.2.headwind.value":{"rel":0,"abs":1e-09},"result.runways.3.headwind.value":{"rel":0,"abs":1e-09},"result.beyond_limits":{"rel":0,"abs":1e-09}}}
{"id":"v006","input":{"runways":"rwy 9 27","wind_direction":"90 deg","wind_speed":"10 kt","max_tailwind":"5 kt"},"expect":{"result.best":"09","result.best_headwind.value":10.0,"result.best_crosswind.value":0.0,"result.runways.0.runway":"09","result.runways.0.headwind.value":10.0,"result.runways.1.runway":"27","result.runways.1.headwind.value":-10.0,"result.beyond_limits":1,"ok":true},"source":"Runway wind components ranked in Python (tools/vectors/gen_runway.py)","sourceVersion":"2026","tolerance":{"result.best_headwind.value":{"rel":0,"abs":1e-09},"result.best_crosswind.value":{"rel":0,"abs":1e-09},"result.runways.0.headwind.value":{"rel":0,"abs":1e-09},"result.runways.1.headwind.value":{"rel":0,"abs":1e-09},"result.beyond_limits":{"rel":0,"abs":1e-09}}}
{"id":"v007","input":{"runways":"09/27","wind":"VRB08KT"},"expect":{"result.best":"09","result.best_headwind.value":-8.0,"result.best_crosswind.value":8.0,"ok":true},"source":"add-aviation-suite variable-wind scenario (worst case 8 kt crosswind and tailwind)","sourceVersion":"2026","tolerance":{"result.best_headwind.value":{"rel":0,"abs":1e-09},"result.best_crosswind.value":{"rel":0,"abs":1e-09}}}
{"id":"v008","input":{"runways":"27, 27","wind_direction":"270 deg","wind_speed":"10 kt"},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"Runway wind components ranked in Python (tools/vectors/gen_runway.py)","sourceVersion":"2026","tolerance":{}}
{"id":"v009","input":{"runways":"09/45","wind_direction":"270 deg","wind_speed":"10 kt"},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"Runway wind components ranked in Python (tools/vectors/gen_runway.py)","sourceVersion":"2026","tolerance":{}}
