{"id":"v001","input":{"terms":[{"angle":"45-30-15"},{"angle":"12-45-50"},{"angle":"3-00-05","operation":"subtract"}]},"expect":{"result.dms":"55°16'00.00\"","result.seconds.value":198960.0,"result.degrees.value":55.266666666666666,"ok":true},"source":"Exact sexagesimal arithmetic with Python fractions (tools/vectors/gen_angle_arith.py)","sourceVersion":"2026","tolerance":{"result.seconds.value":{"abs":0.0001},"result.degrees.value":{"abs":1e-10}}}
{"id":"v002","input":{"terms":[{"angle":"359-59-59.5"},{"angle":"0-0-1"}],"normalize":"0-360"},"expect":{"result.dms":"0°00'00.50\"","result.seconds.value":0.5,"result.degrees.value":0.0001388888888888889,"ok":true},"source":"Exact sexagesimal arithmetic with Python fractions (tools/vectors/gen_angle_arith.py)","sourceVersion":"2026","tolerance":{"result.seconds.value":{"abs":0.0001},"result.degrees.value":{"abs":1e-10}}}
{"id":"v003","input":{"terms":[{"angle":"10-00-00"},{"angle":"20-30-30","operation":"subtract"}]},"expect":{"result.dms":"-10°30'30.00\"","result.seconds.value":-37830.0,"result.degrees.value":-10.508333333333333,"ok":true},"source":"Exact sexagesimal arithmetic with Python fractions (tools/vectors/gen_angle_arith.py)","sourceVersion":"2026","tolerance":{"result.seconds.value":{"abs":0.0001},"result.degrees.value":{"abs":1e-10}}}
{"id":"v004","input":{"terms":[{"angle":"170-15-00"},{"angle":"25-50-30"}],"normalize":"plus-minus-180"},"expect":{"result.dms":"-163°54'30.00\"","result.seconds.value":-590070.0,"result.degrees.value":-163.90833333333333,"ok":true},"source":"Exact sexagesimal arithmetic with Python fractions (tools/vectors/gen_angle_arith.py)","sourceVersion":"2026","tolerance":{"result.seconds.value":{"abs":0.0001},"result.degrees.value":{"abs":1e-10}}}
{"id":"v005","input":{"terms":[{"angle":"89-59-59.99"},{"angle":"0-0-0.01"}]},"expect":{"result.dms":"90°00'00.00\"","result.seconds.value":324000.0,"result.degrees.value":90.0,"ok":true},"source":"Exact sexagesimal arithmetic with Python fractions (tools/vectors/gen_angle_arith.py)","sourceVersion":"2026","tolerance":{"result.seconds.value":{"abs":0.0001},"result.degrees.value":{"abs":1e-10}}}
{"id":"v006","input":{"terms":[{"angle":"-5-10-20"},{"angle":"365-00-00"}],"normalize":"0-360"},"expect":{"result.dms":"359°49'40.00\"","result.seconds.value":1295380.0,"result.degrees.value":359.8277777777778,"ok":true},"source":"Exact sexagesimal arithmetic with Python fractions (tools/vectors/gen_angle_arith.py)","sourceVersion":"2026","tolerance":{"result.seconds.value":{"abs":0.0001},"result.degrees.value":{"abs":1e-10}}}
{"id":"v007","input":{"terms":[{"angle":"123-45-6.78"},{"angle":"98-7-54.32"},{"angle":"21-52-58.9","operation":"subtract"},{"angle":"0-0-0.1","operation":"subtract"}]},"expect":{"result.dms":"200°00'02.10\"","result.seconds.value":720002.1,"result.degrees.value":200.00058333333334,"ok":true},"source":"Exact sexagesimal arithmetic with Python fractions (tools/vectors/gen_angle_arith.py)","sourceVersion":"2026","tolerance":{"result.seconds.value":{"abs":0.0001},"result.degrees.value":{"abs":1e-10}}}
{"id":"v008","input":{"terms":[{"angle":"north"}]},"expect":{"ok":false,"error.code":"INVALID_INPUT"},"source":"Exact sexagesimal arithmetic with Python fractions (tools/vectors/gen_angle_arith.py)","sourceVersion":"2026","tolerance":{}}
{"id": "v009", "input": {"terms": [{"angle": "10-00-00"}, {"angle": "20-00-00"}]}, "expect": {"ok": true, "result.dms": "30\u00b000'00.00\"", "result.seconds.value": 108000.0, "result.degrees.value": 30.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v010", "input": {"terms": [{"angle": "0-00-01"}, {"angle": "0-00-01"}, {"angle": "0-00-01"}]}, "expect": {"ok": true, "result.dms": "0\u00b000'03.00\"", "result.seconds.value": 3.0, "result.degrees.value": 0.0008333333333333334}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v011", "input": {"terms": [{"angle": "89-59-59.99"}, {"angle": "0-00-00.01"}]}, "expect": {"ok": true, "result.dms": "90\u00b000'00.00\"", "result.seconds.value": 324000.0, "result.degrees.value": 90.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v012", "input": {"terms": [{"angle": "1-00-00"}, {"angle": "0-59-59.5", "operation": "subtract"}]}, "expect": {"ok": true, "result.dms": "0\u00b000'00.50\"", "result.seconds.value": 0.5, "result.degrees.value": 0.0001388888888888889}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v013", "input": {"terms": [{"angle": "100-30-00"}, {"angle": "200-45-30"}], "normalize": "0-360"}, "expect": {"ok": true, "result.dms": "301\u00b015'30.00\"", "result.seconds.value": 1084530.0, "result.degrees.value": 301.2583333333333}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v014", "input": {"terms": [{"angle": "359-00-00"}, {"angle": "2-00-00"}], "normalize": "0-360"}, "expect": {"ok": true, "result.dms": "1\u00b000'00.00\"", "result.seconds.value": 3600.0, "result.degrees.value": 1.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v015", "input": {"terms": [{"angle": "10-00-00"}, {"angle": "350-00-00"}], "normalize": "0-360"}, "expect": {"ok": true, "result.dms": "0\u00b000'00.00\"", "result.seconds.value": 0.0, "result.degrees.value": 0.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v016", "input": {"terms": [{"angle": "45"}, {"angle": "45"}]}, "expect": {"ok": true, "result.dms": "90\u00b000'00.00\"", "result.seconds.value": 324000.0, "result.degrees.value": 90.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v017", "input": {"terms": [{"angle": "45.5"}, {"angle": "0-30-00", "operation": "subtract"}]}, "expect": {"ok": true, "result.dms": "45\u00b000'00.00\"", "result.seconds.value": 162000.0, "result.degrees.value": 45.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v018", "input": {"terms": [{"angle": "-30-00-00"}, {"angle": "10-00-00"}]}, "expect": {"ok": true, "result.dms": "-20\u00b000'00.00\"", "result.seconds.value": -72000.0, "result.degrees.value": -20.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v019", "input": {"terms": [{"angle": "270-00-00"}, {"angle": "180-00-00"}], "normalize": "plus-minus-180"}, "expect": {"ok": true, "result.dms": "90\u00b000'00.00\"", "result.seconds.value": 324000.0, "result.degrees.value": 90.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v020", "input": {"terms": [{"angle": "90-00-00"}, {"angle": "180-00-00"}], "normalize": "plus-minus-180"}, "expect": {"ok": true, "result.dms": "-90\u00b000'00.00\"", "result.seconds.value": -324000.0, "result.degrees.value": -90.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v021", "input": {"terms": [{"angle": "12-34-56.78"}, {"angle": "0-00-00.22"}]}, "expect": {"ok": true, "result.dms": "12\u00b034'57.00\"", "result.seconds.value": 45297.0, "result.degrees.value": 12.5825}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v022", "input": {"terms": [{"angle": "359-59-59.995"}, {"angle": "0-00-00.005"}], "normalize": "0-360"}, "expect": {"ok": true, "result.dms": "0\u00b000'00.00\"", "result.seconds.value": 0.0, "result.degrees.value": 0.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v023", "input": {"terms": [{"angle": "1-00-00"}, {"angle": "1-00-00", "operation": "subtract"}, {"angle": "1-00-00"}]}, "expect": {"ok": true, "result.dms": "1\u00b000'00.00\"", "result.seconds.value": 3600.0, "result.degrees.value": 1.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
{"id": "v024", "input": {"terms": [{"angle": "180-00-00"}, {"angle": "180-00-00"}], "normalize": "0-360"}, "expect": {"ok": true, "result.dms": "0\u00b000'00.00\"", "result.seconds.value": 0.0, "result.degrees.value": 0.0}, "source": "Exact rational arithmetic on arcseconds (tools/vectors/gen_parse_more.py)", "sourceVersion": "definition", "tolerance": {"result.seconds.value": {"abs": 1e-09}, "result.degrees.value": {"abs": 1e-12}, "result.dms": {"abs": 0}}}
