{"abstract":"\"1/8\" is shown as 1.12 instead of 1.13.","category":"Betting odds conversion","checks":11,"contract":"Parse traditional fractional odds text, case-insensitively: \"a/b\" or \"a-b\" with positive integers, \"evens\"/\"evs\"/\"even\" for 1/1, and an optional trailing \" on\" meaning odds-on (the fraction is inverted, \"2/1 on\" = 1/2). Zero parts or anything else return \"invalid\". Return [decimal price rounded half up to two decimals, reduced profit fraction \"a/b\"].","evaluation_group":"w2-odds-conversion-fractional-odds-parser","failed_approach":"Truncating the exact value shows 2/3 as 1.66.","family":"w2-odds-conversion-fractional-odds-parser-decimal-half-up","id":"FA-84406","implementations":{"attempt":{"sha256":"181b1bb7a102b7001eaa1b3274ed54dd9c0a472b144a6e882a15c2568a1012f5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(text):\n    t = text.strip().lower()\n    on = t.endswith(' on')\n    if on:\n        t = t[:-3].strip()\n    if t in ('evens', 'evs', 'even'):\n        frac = Fraction(1)\n    else:\n        for sep in ('/', '-'):\n            if sep in t:\n                a, _, b = t.partition(sep)\n                break\n        else:\n            return 'invalid'\n        if not a.isdigit() or not b.isdigit() or int(b) == 0 or int(a) == 0:\n            return 'invalid'\n        frac = Fraction(int(a), int(b))\n    if on:\n        frac = 1 / frac\n    dec = 1 + frac\n    cents = math.floor(dec * 100)\n    return ['%d.%02d' % (cents // 100, cents % 100), '%d/%d' % (frac.numerator, frac.denominator)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('14/13',), ['2.08', '14/13']),\n  ('regression: decimal half up', ('1/8',), ['1.13', '1/8']),\n  ('variant scenario 1', ('4-1',), ['5.00', '4/1']),\n  ('variant scenario 2', ('11/2',), ['6.50', '11/2'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('7/13',), ['1.54', '7/13']),\n  ('regression: decimal half up', ('9/8',), ['2.13', '9/8']),\n  ('variant scenario 1', ('15-4',), ['4.75', '15/4']),\n  ('variant scenario 2', ('4-8 on',), ['3.00', '2/1'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('18/11',), ['2.64', '18/11']),\n  ('regression: decimal half up', ('1/8',), ['1.13', '1/8']),\n  ('variant scenario 1', ('19/13',), ['2.46', '19/13']),\n  ('variant scenario 2', ('6/10',), ['1.60', '3/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('7/13',), ['1.54', '7/13']),\n  ('regression: decimal half up', ('8/13 on',), ['2.63', '13/8']),\n  ('variant scenario 1', ('5-2',), ['3.50', '5/2']),\n  ('variant scenario 2', ('12-10',), ['2.20', '6/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('10-13',), ['1.77', '10/13']),\n  ('regression: decimal half up', ('13-8',), ['2.63', '13/8']),\n  ('variant scenario 1', ('EVS',), ['2.00', '1/1']),\n  ('variant scenario 2', ('8/2',), ['5.00', '4/1'])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"92de2746ce9190e2cfafb1fe5e0194b763ad4e646e5f697c9c7813d9ba33358e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(text):\n    t = text.strip().lower()\n    on = t.endswith(' on')\n    if on:\n        t = t[:-3].strip()\n    if t in ('evens', 'evs', 'even'):\n        frac = Fraction(1)\n    else:\n        for sep in ('/', '-'):\n            if sep in t:\n                a, _, b = t.partition(sep)\n                break\n        else:\n            return 'invalid'\n        if not a.isdigit() or not b.isdigit() or int(b) == 0 or int(a) == 0:\n            return 'invalid'\n        frac = Fraction(int(a), int(b))\n    if on:\n        frac = 1 / frac\n    dec = 1 + frac\n    cents = math.floor(dec * 100 + Fraction(1, 2))\n    return ['%.2f' % float(dec), '%d/%d' % (frac.numerator, frac.denominator)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('14/13',), ['2.08', '14/13']),\n  ('regression: decimal half up', ('1/8',), ['1.13', '1/8']),\n  ('variant scenario 1', ('4-1',), ['5.00', '4/1']),\n  ('variant scenario 2', ('11/2',), ['6.50', '11/2'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('7/13',), ['1.54', '7/13']),\n  ('regression: decimal half up', ('9/8',), ['2.13', '9/8']),\n  ('variant scenario 1', ('15-4',), ['4.75', '15/4']),\n  ('variant scenario 2', ('4-8 on',), ['3.00', '2/1'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('18/11',), ['2.64', '18/11']),\n  ('regression: decimal half up', ('1/8',), ['1.13', '1/8']),\n  ('variant scenario 1', ('19/13',), ['2.46', '19/13']),\n  ('variant scenario 2', ('6/10',), ['1.60', '3/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('7/13',), ['1.54', '7/13']),\n  ('regression: decimal half up', ('8/13 on',), ['2.63', '13/8']),\n  ('variant scenario 1', ('5-2',), ['3.50', '5/2']),\n  ('variant scenario 2', ('12-10',), ['2.20', '6/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('10-13',), ['1.77', '10/13']),\n  ('regression: decimal half up', ('13-8',), ['2.63', '13/8']),\n  ('variant scenario 1', ('EVS',), ['2.00', '1/1']),\n  ('variant scenario 2', ('8/2',), ['5.00', '4/1'])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"7489cc49a0f7e81e85c2a033af6077c72117fd6d17749ac5881e10dcfc893089","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(text):\n    t = text.strip().lower()\n    on = t.endswith(' on')\n    if on:\n        t = t[:-3].strip()\n    if t in ('evens', 'evs', 'even'):\n        frac = Fraction(1)\n    else:\n        for sep in ('/', '-'):\n            if sep in t:\n                a, _, b = t.partition(sep)\n                break\n        else:\n            return 'invalid'\n        if not a.isdigit() or not b.isdigit() or int(b) == 0 or int(a) == 0:\n            return 'invalid'\n        frac = Fraction(int(a), int(b))\n    if on:\n        frac = 1 / frac\n    dec = 1 + frac\n    cents = math.floor(dec * 100 + Fraction(1, 2))\n    return ['%d.%02d' % (cents // 100, cents % 100), '%d/%d' % (frac.numerator, frac.denominator)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('14/13',), ['2.08', '14/13']),\n  ('regression: decimal half up', ('1/8',), ['1.13', '1/8']),\n  ('variant scenario 1', ('4-1',), ['5.00', '4/1']),\n  ('variant scenario 2', ('11/2',), ['6.50', '11/2'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('7/13',), ['1.54', '7/13']),\n  ('regression: decimal half up', ('9/8',), ['2.13', '9/8']),\n  ('variant scenario 1', ('15-4',), ['4.75', '15/4']),\n  ('variant scenario 2', ('4-8 on',), ['3.00', '2/1'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('18/11',), ['2.64', '18/11']),\n  ('regression: decimal half up', ('1/8',), ['1.13', '1/8']),\n  ('variant scenario 1', ('19/13',), ['2.46', '19/13']),\n  ('variant scenario 2', ('6/10',), ['1.60', '3/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('7/13',), ['1.54', '7/13']),\n  ('regression: decimal half up', ('8/13 on',), ['2.63', '13/8']),\n  ('variant scenario 1', ('5-2',), ['3.50', '5/2']),\n  ('variant scenario 2', ('12-10',), ['2.20', '6/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: decimal half up', ('10-13',), ['1.77', '10/13']),\n  ('regression: decimal half up', ('13-8',), ['2.63', '13/8']),\n  ('variant scenario 1', ('EVS',), ['2.00', '1/1']),\n  ('variant scenario 2', ('8/2',), ['5.00', '4/1'])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Stipulated, bounded toy contract stated in the contract field; not a claim of conformance with any operator, exchange or regulator rule set. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-odds-conversion-fractional-odds-parser-decimal-half-up","generated_at":"2026-09-29T14:50:30.523149+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Racing feeds and manual price entry use traditional fractional notation with odds-on suffixes.","repair":"Round the exact decimal half up.","root_cause":"The decimal is formatted from a binary float with '%.2f'.","sha256":"e56c614fb2efa20ed7f16d1d3a96ab610565d383e68266c89338ab340f101b07","title":"Fractional-to-decimal conversion rounds half-cents down · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.389,"exit_code":1,"observations":[{"actual":["3.50","5/2"],"check":"control five to two","expected":["3.50","5/2"],"passed":true},{"actual":["3.75","11/4"],"check":"control hyphen separator","expected":["3.75","11/4"],"passed":true},{"actual":["2.00","1/1"],"check":"boundary evens alias","expected":["2.00","1/1"],"passed":true},{"actual":["1.50","1/2"],"check":"boundary odds-on suffix","expected":["1.50","1/2"],"passed":true},{"actual":["1.66","2/3"],"check":"boundary unreduced input","expected":["1.67","2/3"],"passed":false},{"actual":"invalid","check":"boundary zero denominator","expected":"invalid","passed":true},{"actual":["1.12","1/8"],"check":"control half-up rounding","expected":["1.13","1/8"],"passed":false},{"actual":["2.07","14/13"],"check":"regression: decimal half up","expected":["2.08","14/13"],"passed":false},{"actual":["1.12","1/8"],"check":"regression: decimal half up","expected":["1.13","1/8"],"passed":false},{"actual":["5.00","4/1"],"check":"variant scenario 1","expected":["5.00","4/1"],"passed":true},{"actual":["6.50","11/2"],"check":"variant scenario 2","expected":["6.50","11/2"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control five to two\", \"actual\": [\"3.50\", \"5/2\"], \"expected\": [\"3.50\", \"5/2\"], \"passed\": true}, {\"check\": \"control hyphen separator\", \"actual\": [\"3.75\", \"11/4\"], \"expected\": [\"3.75\", \"11/4\"], \"passed\": true}, {\"check\": \"boundary evens alias\", \"actual\": [\"2.00\", \"1/1\"], \"expected\": [\"2.00\", \"1/1\"], \"passed\": true}, {\"check\": \"boundary odds-on suffix\", \"actual\": [\"1.50\", \"1/2\"], \"expected\": [\"1.50\", \"1/2\"], \"passed\": true}, {\"check\": \"boundary unreduced input\", \"actual\": [\"1.66\", \"2/3\"], \"expected\": [\"1.67\", \"2/3\"], \"passed\": false}, {\"check\": \"boundary zero denominator\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up rounding\", \"actual\": [\"1.12\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": false}, {\"check\": \"regression: decimal half up\", \"actual\": [\"2.07\", \"14/13\"], \"expected\": [\"2.08\", \"14/13\"], \"passed\": false}, {\"check\": \"regression: decimal half up\", \"actual\": [\"1.12\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"5.00\", \"4/1\"], \"expected\": [\"5.00\", \"4/1\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"6.50\", \"11/2\"], \"expected\": [\"6.50\", \"11/2\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.322,"exit_code":1,"observations":[{"actual":["3.50","5/2"],"check":"control five to two","expected":["3.50","5/2"],"passed":true},{"actual":["3.75","11/4"],"check":"control hyphen separator","expected":["3.75","11/4"],"passed":true},{"actual":["2.00","1/1"],"check":"boundary evens alias","expected":["2.00","1/1"],"passed":true},{"actual":["1.50","1/2"],"check":"boundary odds-on suffix","expected":["1.50","1/2"],"passed":true},{"actual":["1.67","2/3"],"check":"boundary unreduced input","expected":["1.67","2/3"],"passed":true},{"actual":"invalid","check":"boundary zero denominator","expected":"invalid","passed":true},{"actual":["1.12","1/8"],"check":"control half-up rounding","expected":["1.13","1/8"],"passed":false},{"actual":["2.08","14/13"],"check":"regression: decimal half up","expected":["2.08","14/13"],"passed":true},{"actual":["1.12","1/8"],"check":"regression: decimal half up","expected":["1.13","1/8"],"passed":false},{"actual":["5.00","4/1"],"check":"variant scenario 1","expected":["5.00","4/1"],"passed":true},{"actual":["6.50","11/2"],"check":"variant scenario 2","expected":["6.50","11/2"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control five to two\", \"actual\": [\"3.50\", \"5/2\"], \"expected\": [\"3.50\", \"5/2\"], \"passed\": true}, {\"check\": \"control hyphen separator\", \"actual\": [\"3.75\", \"11/4\"], \"expected\": [\"3.75\", \"11/4\"], \"passed\": true}, {\"check\": \"boundary evens alias\", \"actual\": [\"2.00\", \"1/1\"], \"expected\": [\"2.00\", \"1/1\"], \"passed\": true}, {\"check\": \"boundary odds-on suffix\", \"actual\": [\"1.50\", \"1/2\"], \"expected\": [\"1.50\", \"1/2\"], \"passed\": true}, {\"check\": \"boundary unreduced input\", \"actual\": [\"1.67\", \"2/3\"], \"expected\": [\"1.67\", \"2/3\"], \"passed\": true}, {\"check\": \"boundary zero denominator\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up rounding\", \"actual\": [\"1.12\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": false}, {\"check\": \"regression: decimal half up\", \"actual\": [\"2.08\", \"14/13\"], \"expected\": [\"2.08\", \"14/13\"], \"passed\": true}, {\"check\": \"regression: decimal half up\", \"actual\": [\"1.12\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"5.00\", \"4/1\"], \"expected\": [\"5.00\", \"4/1\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"6.50\", \"11/2\"], \"expected\": [\"6.50\", \"11/2\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.188,"exit_code":0,"observations":[{"actual":["3.50","5/2"],"check":"control five to two","expected":["3.50","5/2"],"passed":true},{"actual":["3.75","11/4"],"check":"control hyphen separator","expected":["3.75","11/4"],"passed":true},{"actual":["2.00","1/1"],"check":"boundary evens alias","expected":["2.00","1/1"],"passed":true},{"actual":["1.50","1/2"],"check":"boundary odds-on suffix","expected":["1.50","1/2"],"passed":true},{"actual":["1.67","2/3"],"check":"boundary unreduced input","expected":["1.67","2/3"],"passed":true},{"actual":"invalid","check":"boundary zero denominator","expected":"invalid","passed":true},{"actual":["1.13","1/8"],"check":"control half-up rounding","expected":["1.13","1/8"],"passed":true},{"actual":["2.08","14/13"],"check":"regression: decimal half up","expected":["2.08","14/13"],"passed":true},{"actual":["1.13","1/8"],"check":"regression: decimal half up","expected":["1.13","1/8"],"passed":true},{"actual":["5.00","4/1"],"check":"variant scenario 1","expected":["5.00","4/1"],"passed":true},{"actual":["6.50","11/2"],"check":"variant scenario 2","expected":["6.50","11/2"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control five to two\", \"actual\": [\"3.50\", \"5/2\"], \"expected\": [\"3.50\", \"5/2\"], \"passed\": true}, {\"check\": \"control hyphen separator\", \"actual\": [\"3.75\", \"11/4\"], \"expected\": [\"3.75\", \"11/4\"], \"passed\": true}, {\"check\": \"boundary evens alias\", \"actual\": [\"2.00\", \"1/1\"], \"expected\": [\"2.00\", \"1/1\"], \"passed\": true}, {\"check\": \"boundary odds-on suffix\", \"actual\": [\"1.50\", \"1/2\"], \"expected\": [\"1.50\", \"1/2\"], \"passed\": true}, {\"check\": \"boundary unreduced input\", \"actual\": [\"1.67\", \"2/3\"], \"expected\": [\"1.67\", \"2/3\"], \"passed\": true}, {\"check\": \"boundary zero denominator\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up rounding\", \"actual\": [\"1.13\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": true}, {\"check\": \"regression: decimal half up\", \"actual\": [\"2.08\", \"14/13\"], \"expected\": [\"2.08\", \"14/13\"], \"passed\": true}, {\"check\": \"regression: decimal half up\", \"actual\": [\"1.13\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": [\"5.00\", \"4/1\"], \"expected\": [\"5.00\", \"4/1\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"6.50\", \"11/2\"], \"expected\": [\"6.50\", \"11/2\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}