{"id":"v001","input":{"heading":"81.7 deg","tas":"120 kt","wind_direction":"30 deg","wind_speed":"20 kt"},"expect":{"result.course.value":89.9988218478711,"result.groundspeed.value":108.74309471126581,"result.drift_angle.value":8.298821847871096,"ok":true},"source":"add-aviation-suite heading-and-groundspeed scenario, solved the other way (course about 090° at 108.7 kt)","sourceVersion":"2026","tolerance":{"result.course.value":{"rel":0,"abs":1e-09},"result.groundspeed.value":{"rel":0,"abs":1e-09},"result.drift_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v002","input":{"heading":"360 deg","tas":"150 kt","wind_direction":"270 deg","wind_speed":"30 kt"},"expect":{"result.course.value":11.3099324740202,"result.groundspeed.value":152.97058540778352,"result.drift_angle.value":11.30993247402023,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.course.value":{"rel":0,"abs":1e-09},"result.groundspeed.value":{"rel":0,"abs":1e-09},"result.drift_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v003","input":{"heading":"180 deg","tas":"95 kt","wind_direction":"180 deg","wind_speed":"25 kt"},"expect":{"result.course.value":180.0,"result.groundspeed.value":70.0,"result.drift_angle.value":0.0,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.course.value":{"rel":0,"abs":1e-09},"result.groundspeed.value":{"rel":0,"abs":1e-09},"result.drift_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v004","input":{"heading":"45 deg","tas":"120 kt","wind_direction":"225 deg","wind_speed":"15 kt"},"expect":{"result.course.value":45.0,"result.groundspeed.value":135.0,"result.drift_angle.value":0.0,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.course.value":{"rel":0,"abs":1e-09},"result.groundspeed.value":{"rel":0,"abs":1e-09},"result.drift_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v005","input":{"heading":"270 deg","tas":"60 kt","wind_direction":"90 deg","wind_speed":"0 kt"},"expect":{"result.course.value":270.0,"result.groundspeed.value":60.0,"result.drift_angle.value":0.0,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.course.value":{"rel":0,"abs":1e-09},"result.groundspeed.value":{"rel":0,"abs":1e-09},"result.drift_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v006","input":{"heading":"10 deg","tas":"40 kt","wind_direction":"120 deg","wind_speed":"55 kt"},"expect":{"result.course.value":328.6910531948585,"result.groundspeed.value":78.29360529847213,"result.drift_angle.value":-41.30894680514149,"ok":true},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{"result.course.value":{"rel":0,"abs":1e-09},"result.groundspeed.value":{"rel":0,"abs":1e-09},"result.drift_angle.value":{"rel":0,"abs":1e-09}}}
{"id":"v007","input":{"heading":"90 deg","tas":"30 kt","wind_direction":"90 deg","wind_speed":"30 kt"},"expect":{"ok":false,"error.code":"NO_SOLUTION"},"source":"Wind-triangle vectors worked in Python (tools/vectors/gen_triangle.py)","sourceVersion":"2026","tolerance":{}}
{"id":"v008","input":{"heading":"90 deg","tas":"100 kt","wind_direction":"30 deg","wind_speed":"20 kt","wind_reference":"magnetic"},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"add-aviation-suite mixed-reference scenario","sourceVersion":"2026","tolerance":{}}
