{"id":"v001","input":{"total_weight":"2250 lb","cg":"84.3 in","target_cg":"83.0 in","ballast_arm":"10 in"},"expect":{"result.ballast.value":40.068493150684844,"result.new_weight.value":2290.068493150685,"ok":true},"source":"Weight-shift and ballast proportions worked in Python (tools/vectors/gen_shift.py)","sourceVersion":"2026","tolerance":{"result.ballast.value":{"rel":0,"abs":1e-09},"result.new_weight.value":{"rel":0,"abs":1e-09}}}
{"id":"v002","input":{"total_weight":"1850 lb","cg":"41.5 in","target_cg":"40.0 in","ballast_arm":"-20 in"},"expect":{"result.ballast.value":46.25,"result.new_weight.value":1896.25,"ok":true},"source":"Weight-shift and ballast proportions worked in Python (tools/vectors/gen_shift.py)","sourceVersion":"2026","tolerance":{"result.ballast.value":{"rel":0,"abs":1e-09},"result.new_weight.value":{"rel":0,"abs":1e-09}}}
{"id":"v003","input":{"total_weight":"3000 lb","cg":"95.0 in","target_cg":"97.0 in","ballast_arm":"180 in"},"expect":{"result.ballast.value":72.28915662650603,"result.new_weight.value":3072.289156626506,"ok":true},"source":"Weight-shift and ballast proportions worked in Python (tools/vectors/gen_shift.py)","sourceVersion":"2026","tolerance":{"result.ballast.value":{"rel":0,"abs":1e-09},"result.new_weight.value":{"rel":0,"abs":1e-09}}}
{"id":"v004","input":{"total_weight":"7800 lb","cg":"81.5 in","target_cg":"80.5 in","ballast_arm":"30 in"},"expect":{"result.ballast.value":154.45544554455446,"result.new_weight.value":7954.455445544554,"ok":true},"source":"Weight-shift and ballast proportions worked in Python (tools/vectors/gen_shift.py)","sourceVersion":"2026","tolerance":{"result.ballast.value":{"rel":0,"abs":1e-09},"result.new_weight.value":{"rel":0,"abs":1e-09}}}
{"id":"v005","input":{"total_weight":"2250 lb","cg":"84.3 in","target_cg":"83 in","ballast_arm":"150 in"},"expect":{"ok":false,"error.code":"NO_SOLUTION"},"source":"Weight-shift and ballast proportions worked in Python (tools/vectors/gen_shift.py)","sourceVersion":"2026","tolerance":{}}
