{"id":"v001","input":{"direction":"300 deg","speed":"25 kt"},"expect":{"result.u.value":21.650635094610966,"result.v.value":-12.500000000000004,"result.speed.value":25.0,"result.direction.value":300.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.u.value":{"rel":0,"abs":1e-09},"result.v.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09},"result.direction.value":{"rel":0,"abs":1e-09}}}
{"id":"v002","input":{"direction":"0 deg","speed":"10 kt"},"expect":{"result.u.value":-0.0,"result.v.value":-10.0,"result.speed.value":10.0,"result.direction.value":0.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.u.value":{"rel":0,"abs":1e-09},"result.v.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09},"result.direction.value":{"rel":0,"abs":1e-09}}}
{"id":"v003","input":{"direction":"90 deg","speed":"15 kt"},"expect":{"result.u.value":-15.0,"result.v.value":-9.18485099360515e-16,"result.speed.value":15.0,"result.direction.value":90.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.u.value":{"rel":0,"abs":1e-09},"result.v.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09},"result.direction.value":{"rel":0,"abs":1e-09}}}
{"id":"v004","input":{"direction":"180 deg","speed":"40 kt"},"expect":{"result.u.value":-4.898587196589413e-15,"result.v.value":40.0,"result.speed.value":40.0,"result.direction.value":180.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.u.value":{"rel":0,"abs":1e-09},"result.v.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09},"result.direction.value":{"rel":0,"abs":1e-09}}}
{"id":"v005","input":{"direction":"270 deg","speed":"20 kt"},"expect":{"result.u.value":20.0,"result.v.value":3.673940397442059e-15,"result.speed.value":20.0,"result.direction.value":270.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.u.value":{"rel":0,"abs":1e-09},"result.v.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09},"result.direction.value":{"rel":0,"abs":1e-09}}}
{"id":"v006","input":{"direction":"45 deg","speed":"12.5 kt"},"expect":{"result.u.value":-8.838834764831843,"result.v.value":-8.838834764831844,"result.speed.value":12.5,"result.direction.value":45.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.u.value":{"rel":0,"abs":1e-09},"result.v.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09},"result.direction.value":{"rel":0,"abs":1e-09}}}
{"id":"v007","input":{"direction":"225 deg","speed":"33 kt"},"expect":{"result.u.value":23.334523779156065,"result.v.value":23.334523779156072,"result.speed.value":33.0,"result.direction.value":225.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.u.value":{"rel":0,"abs":1e-09},"result.v.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09},"result.direction.value":{"rel":0,"abs":1e-09}}}
{"id":"v008","input":{"direction":"360 deg","speed":"5 kt"},"expect":{"result.u.value":1.2246467991473533e-15,"result.v.value":-5.0,"result.speed.value":5.0,"result.direction.value":0.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.u.value":{"rel":0,"abs":1e-09},"result.v.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09},"result.direction.value":{"rel":0,"abs":1e-09}}}
{"id":"v009","input":{"u":"21.650635094610966 kt","v":"-12.5 kt"},"expect":{"result.direction.value":300.0,"result.speed.value":24.999999999999996,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.direction.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09}}}
{"id":"v010","input":{"u":"0 kt","v":"-10 kt"},"expect":{"result.direction.value":0.0,"result.speed.value":10.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.direction.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09}}}
{"id":"v011","input":{"u":"-15 kt","v":"0 kt"},"expect":{"result.direction.value":90.0,"result.speed.value":15.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.direction.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09}}}
{"id":"v012","input":{"u":"3 kt","v":"4 kt"},"expect":{"result.direction.value":216.86989764584402,"result.speed.value":5.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.direction.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09}}}
{"id":"v013","input":{"u":"-7 kt","v":"-24 kt"},"expect":{"result.direction.value":16.26020470831196,"result.speed.value":25.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.direction.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09}}}
{"id":"v014","input":{"u":"0 kt","v":"0 kt"},"expect":{"result.direction.value":0.0,"result.speed.value":0.0,"ok":true},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{"result.direction.value":{"rel":0,"abs":1e-09},"result.speed.value":{"rel":0,"abs":1e-09}}}
{"id":"v015","input":{"direction":"300 deg","speed":"25 kt","u":"3 kt"},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"Meteorological u/v convention and linear interpolation worked in Python (tools/vectors/gen_aloft.py)","sourceVersion":"2026","tolerance":{}}
