{"id":"v001","input":{"course":"90 deg","groundspeed":"108.7 kt","wind_direction":"30 deg","wind_speed":"20 kt"},"expect":{"result.tas.value":119.95703397466944,"result.heading.value":81.69808546268996,"result.wind_correction_angle.value":-8.30191453731004,"ok":true},"source":"add-aviation-suite heading-and-groundspeed scenario, solved the other way (about 120 kt on heading 081.7°)","sourceVersion":"2026","tolerance":{"result.tas.value":{"rel":0,"abs":1e-09},"result.heading.value":{"rel":0,"abs":1e-09},"result.wind_correction_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v002","input":{"course":"360 deg","groundspeed":"150 kt","wind_direction":"270 deg","wind_speed":"30 kt"},"expect":{"result.tas.value":152.97058540778355,"result.heading.value":348.69006752597977,"result.wind_correction_angle.value":-11.30993247402023,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.tas.value":{"rel":0,"abs":1e-09},"result.heading.value":{"rel":0,"abs":1e-09},"result.wind_correction_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v003","input":{"course":"180 deg","groundspeed":"95 kt","wind_direction":"180 deg","wind_speed":"25 kt"},"expect":{"result.tas.value":120.0,"result.heading.value":180.0,"result.wind_correction_angle.value":0.0,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.tas.value":{"rel":0,"abs":1e-09},"result.heading.value":{"rel":0,"abs":1e-09},"result.wind_correction_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v004","input":{"course":"45 deg","groundspeed":"120 kt","wind_direction":"225 deg","wind_speed":"15 kt"},"expect":{"result.tas.value":105.0,"result.heading.value":45.0,"result.wind_correction_angle.value":0.0,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.tas.value":{"rel":0,"abs":1e-09},"result.heading.value":{"rel":0,"abs":1e-09},"result.wind_correction_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v005","input":{"course":"270 deg","groundspeed":"60 kt","wind_direction":"90 deg","wind_speed":"0 kt"},"expect":{"result.tas.value":60.0,"result.heading.value":270.0,"result.wind_correction_angle.value":0.0,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.tas.value":{"rel":0,"abs":1e-09},"result.heading.value":{"rel":0,"abs":1e-09},"result.wind_correction_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v006","input":{"course":"315 deg","groundspeed":"200 kt","wind_direction":"20 deg","wind_speed":"45 kt"},"expect":{"result.tas.value":222.7826939224243,"result.heading.value":325.548374266364,"result.wind_correction_angle.value":10.548374266364021,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.tas.value":{"rel":0,"abs":1e-09},"result.heading.value":{"rel":0,"abs":1e-09},"result.wind_correction_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v007","input":{"course":"90 deg","groundspeed":"0 kt","wind_direction":"30 deg","wind_speed":"20 kt"},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{}}
{"id":"v008","input":{"course":"90 deg","groundspeed":"100 kt","wind":"VRB05KT"},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{}}
