{"abstract":"A -800 line shows 1.12 instead of 1.13.","category":"Betting odds conversion","checks":10,"contract":"Expand an American moneyline (\"+150\", \"150\" or \"-200\"; magnitude at least 100, otherwise \"invalid\"). Profit per unit is N/100 for positive or unsigned lines and 100/N for negative lines. Return [decimal price with two decimals, reduced fractional profit \"a/b\", implied probability percent with one decimal], all computed exactly and rounded half up.","evaluation_group":"w2-odds-conversion-american-moneyline-expansion","failed_approach":"Truncating inside the helper also drops the half-cent.","family":"w2-odds-conversion-american-moneyline-expansion-decimal-rounding","id":"FA-84381","implementations":{"attempt":{"sha256":"cb3d673a76b3f8f0643c0f87e8fad94700425cc51c7dfb658bcc741df98a7342","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(american):\n    s = american.strip()\n    neg = s.startswith('-')\n    n = int(s.lstrip('+-'))\n    if n < 100:\n        return 'invalid'\n    profit = Fraction(100, n) if neg else Fraction(n, 100)\n    dec = 1 + profit\n    def fmt(x, places):\n        q = 10 ** places\n        v = math.floor(x * q)\n        return '%d.%0*d' % (v // q, places, v % q)\n    prob = Fraction(n, n + 100) * 100 if neg else Fraction(100, n + 100) * 100\n    return [fmt(dec, 2), '%d/%d' % (profit.numerator, profit.denominator), fmt(prob, 1)]\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 underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-331',), ['1.30', '100/331', '76.8']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('-100',), ['2.00', '1/1', '50.0']),\n  ('variant scenario 2', ('+208',), ['3.08', '52/25', '32.5'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('895',), ['9.95', '179/20', '10.1']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('-120',), ['1.83', '5/6', '54.5']),\n  ('variant scenario 2', ('+210',), ['3.10', '21/10', '32.3'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-1004',), ['1.10', '25/251', '90.9']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+168',), ['2.68', '42/25', '37.3']),\n  ('variant scenario 2', ('217',), ['3.17', '217/100', '31.5'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-674',), ['1.15', '50/337', '87.1']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+50',), 'invalid'),\n  ('variant scenario 2', ('149',), ['2.49', '149/100', '40.2'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-624',), ['1.16', '25/156', '86.2']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+125',), ['2.25', '5/4', '44.4']),\n  ('variant scenario 2', ('+119',), ['2.19', '119/100', '45.7'])]]\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":"7b0ca169891b24758852e34751cd0f82ef72e8b1edb915075190bbbac9932e57","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(american):\n    s = american.strip()\n    neg = s.startswith('-')\n    n = int(s.lstrip('+-'))\n    if n < 100:\n        return 'invalid'\n    profit = Fraction(100, n) if neg else Fraction(n, 100)\n    dec = 1 + profit\n    def fmt(x, places):\n        q = 10 ** places\n        v = math.floor(x * q + Fraction(1, 2))\n        return '%d.%0*d' % (v // q, places, v % q)\n    prob = Fraction(n, n + 100) * 100 if neg else Fraction(100, n + 100) * 100\n    return ['%.2f' % float(dec), '%d/%d' % (profit.numerator, profit.denominator), fmt(prob, 1)]\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 underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-331',), ['1.30', '100/331', '76.8']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('-100',), ['2.00', '1/1', '50.0']),\n  ('variant scenario 2', ('+208',), ['3.08', '52/25', '32.5'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('895',), ['9.95', '179/20', '10.1']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('-120',), ['1.83', '5/6', '54.5']),\n  ('variant scenario 2', ('+210',), ['3.10', '21/10', '32.3'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-1004',), ['1.10', '25/251', '90.9']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+168',), ['2.68', '42/25', '37.3']),\n  ('variant scenario 2', ('217',), ['3.17', '217/100', '31.5'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-674',), ['1.15', '50/337', '87.1']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+50',), 'invalid'),\n  ('variant scenario 2', ('149',), ['2.49', '149/100', '40.2'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-624',), ['1.16', '25/156', '86.2']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+125',), ['2.25', '5/4', '44.4']),\n  ('variant scenario 2', ('+119',), ['2.19', '119/100', '45.7'])]]\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":"f44d7aba9efca5b192b7f57c2699a3ff155dac84ccf00047b3d8f8e1fc41240c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(american):\n    s = american.strip()\n    neg = s.startswith('-')\n    n = int(s.lstrip('+-'))\n    if n < 100:\n        return 'invalid'\n    profit = Fraction(100, n) if neg else Fraction(n, 100)\n    dec = 1 + profit\n    def fmt(x, places):\n        q = 10 ** places\n        v = math.floor(x * q + Fraction(1, 2))\n        return '%d.%0*d' % (v // q, places, v % q)\n    prob = Fraction(n, n + 100) * 100 if neg else Fraction(100, n + 100) * 100\n    return [fmt(dec, 2), '%d/%d' % (profit.numerator, profit.denominator), fmt(prob, 1)]\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 underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-331',), ['1.30', '100/331', '76.8']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('-100',), ['2.00', '1/1', '50.0']),\n  ('variant scenario 2', ('+208',), ['3.08', '52/25', '32.5'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('895',), ['9.95', '179/20', '10.1']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('-120',), ['1.83', '5/6', '54.5']),\n  ('variant scenario 2', ('+210',), ['3.10', '21/10', '32.3'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-1004',), ['1.10', '25/251', '90.9']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+168',), ['2.68', '42/25', '37.3']),\n  ('variant scenario 2', ('217',), ['3.17', '217/100', '31.5'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-674',), ['1.15', '50/337', '87.1']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+50',), 'invalid'),\n  ('variant scenario 2', ('149',), ['2.49', '149/100', '40.2'])],\n [('control underdog', ('+150',), ['2.50', '3/2', '40.0']),\n  ('control favourite', ('-200',), ['1.50', '1/2', '66.7']),\n  ('boundary even money', ('+100',), ['2.00', '1/1', '50.0']),\n  ('boundary unsigned line', ('250',), ['3.50', '5/2', '28.6']),\n  ('boundary below minimum', ('+50',), 'invalid'),\n  ('control half-up decimal', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: decimal rounding', ('-624',), ['1.16', '25/156', '86.2']),\n  ('regression: decimal rounding', ('-800',), ['1.13', '1/8', '88.9']),\n  ('variant scenario 1', ('+125',), ['2.25', '5/4', '44.4']),\n  ('variant scenario 2', ('+119',), ['2.19', '119/100', '45.7'])]]\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-american-moneyline-expansion-decimal-rounding","generated_at":"2026-09-29T14:50:30.421963+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Odds screens show American, decimal, fractional and implied-probability columns for one price.","repair":"Round the exact value half up.","root_cause":"The decimal price is formatted with '%.2f' on a float, rounding the binary value.","sha256":"6925455b8237421a1f5cd9e9d6cd747974a00bcdd9a8a207a7784341d23bc00f","title":"Decimal price rounded with binary floats or truncated · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.559,"exit_code":1,"observations":[{"actual":["2.50","3/2","40.0"],"check":"control underdog","expected":["2.50","3/2","40.0"],"passed":true},{"actual":["1.50","1/2","66.6"],"check":"control favourite","expected":["1.50","1/2","66.7"],"passed":false},{"actual":["2.00","1/1","50.0"],"check":"boundary even money","expected":["2.00","1/1","50.0"],"passed":true},{"actual":["3.50","5/2","28.5"],"check":"boundary unsigned line","expected":["3.50","5/2","28.6"],"passed":false},{"actual":"invalid","check":"boundary below minimum","expected":"invalid","passed":true},{"actual":["1.12","1/8","88.8"],"check":"control half-up decimal","expected":["1.13","1/8","88.9"],"passed":false},{"actual":["1.30","100/331","76.7"],"check":"regression: decimal rounding","expected":["1.30","100/331","76.8"],"passed":false},{"actual":["1.12","1/8","88.8"],"check":"regression: decimal rounding","expected":["1.13","1/8","88.9"],"passed":false},{"actual":["2.00","1/1","50.0"],"check":"variant scenario 1","expected":["2.00","1/1","50.0"],"passed":true},{"actual":["3.08","52/25","32.4"],"check":"variant scenario 2","expected":["3.08","52/25","32.5"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control underdog\", \"actual\": [\"2.50\", \"3/2\", \"40.0\"], \"expected\": [\"2.50\", \"3/2\", \"40.0\"], \"passed\": true}, {\"check\": \"control favourite\", \"actual\": [\"1.50\", \"1/2\", \"66.6\"], \"expected\": [\"1.50\", \"1/2\", \"66.7\"], \"passed\": false}, {\"check\": \"boundary even money\", \"actual\": [\"2.00\", \"1/1\", \"50.0\"], \"expected\": [\"2.00\", \"1/1\", \"50.0\"], \"passed\": true}, {\"check\": \"boundary unsigned line\", \"actual\": [\"3.50\", \"5/2\", \"28.5\"], \"expected\": [\"3.50\", \"5/2\", \"28.6\"], \"passed\": false}, {\"check\": \"boundary below minimum\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up decimal\", \"actual\": [\"1.12\", \"1/8\", \"88.8\"], \"expected\": [\"1.13\", \"1/8\", \"88.9\"], \"passed\": false}, {\"check\": \"regression: decimal rounding\", \"actual\": [\"1.30\", \"100/331\", \"76.7\"], \"expected\": [\"1.30\", \"100/331\", \"76.8\"], \"passed\": false}, {\"check\": \"regression: decimal rounding\", \"actual\": [\"1.12\", \"1/8\", \"88.8\"], \"expected\": [\"1.13\", \"1/8\", \"88.9\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"2.00\", \"1/1\", \"50.0\"], \"expected\": [\"2.00\", \"1/1\", \"50.0\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"3.08\", \"52/25\", \"32.4\"], \"expected\": [\"3.08\", \"52/25\", \"32.5\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.719,"exit_code":1,"observations":[{"actual":["2.50","3/2","40.0"],"check":"control underdog","expected":["2.50","3/2","40.0"],"passed":true},{"actual":["1.50","1/2","66.7"],"check":"control favourite","expected":["1.50","1/2","66.7"],"passed":true},{"actual":["2.00","1/1","50.0"],"check":"boundary even money","expected":["2.00","1/1","50.0"],"passed":true},{"actual":["3.50","5/2","28.6"],"check":"boundary unsigned line","expected":["3.50","5/2","28.6"],"passed":true},{"actual":"invalid","check":"boundary below minimum","expected":"invalid","passed":true},{"actual":["1.12","1/8","88.9"],"check":"control half-up decimal","expected":["1.13","1/8","88.9"],"passed":false},{"actual":["1.30","100/331","76.8"],"check":"regression: decimal rounding","expected":["1.30","100/331","76.8"],"passed":true},{"actual":["1.12","1/8","88.9"],"check":"regression: decimal rounding","expected":["1.13","1/8","88.9"],"passed":false},{"actual":["2.00","1/1","50.0"],"check":"variant scenario 1","expected":["2.00","1/1","50.0"],"passed":true},{"actual":["3.08","52/25","32.5"],"check":"variant scenario 2","expected":["3.08","52/25","32.5"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control underdog\", \"actual\": [\"2.50\", \"3/2\", \"40.0\"], \"expected\": [\"2.50\", \"3/2\", \"40.0\"], \"passed\": true}, {\"check\": \"control favourite\", \"actual\": [\"1.50\", \"1/2\", \"66.7\"], \"expected\": [\"1.50\", \"1/2\", \"66.7\"], \"passed\": true}, {\"check\": \"boundary even money\", \"actual\": [\"2.00\", \"1/1\", \"50.0\"], \"expected\": [\"2.00\", \"1/1\", \"50.0\"], \"passed\": true}, {\"check\": \"boundary unsigned line\", \"actual\": [\"3.50\", \"5/2\", \"28.6\"], \"expected\": [\"3.50\", \"5/2\", \"28.6\"], \"passed\": true}, {\"check\": \"boundary below minimum\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up decimal\", \"actual\": [\"1.12\", \"1/8\", \"88.9\"], \"expected\": [\"1.13\", \"1/8\", \"88.9\"], \"passed\": false}, {\"check\": \"regression: decimal rounding\", \"actual\": [\"1.30\", \"100/331\", \"76.8\"], \"expected\": [\"1.30\", \"100/331\", \"76.8\"], \"passed\": true}, {\"check\": \"regression: decimal rounding\", \"actual\": [\"1.12\", \"1/8\", \"88.9\"], \"expected\": [\"1.13\", \"1/8\", \"88.9\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"2.00\", \"1/1\", \"50.0\"], \"expected\": [\"2.00\", \"1/1\", \"50.0\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"3.08\", \"52/25\", \"32.5\"], \"expected\": [\"3.08\", \"52/25\", \"32.5\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.684,"exit_code":0,"observations":[{"actual":["2.50","3/2","40.0"],"check":"control underdog","expected":["2.50","3/2","40.0"],"passed":true},{"actual":["1.50","1/2","66.7"],"check":"control favourite","expected":["1.50","1/2","66.7"],"passed":true},{"actual":["2.00","1/1","50.0"],"check":"boundary even money","expected":["2.00","1/1","50.0"],"passed":true},{"actual":["3.50","5/2","28.6"],"check":"boundary unsigned line","expected":["3.50","5/2","28.6"],"passed":true},{"actual":"invalid","check":"boundary below minimum","expected":"invalid","passed":true},{"actual":["1.13","1/8","88.9"],"check":"control half-up decimal","expected":["1.13","1/8","88.9"],"passed":true},{"actual":["1.30","100/331","76.8"],"check":"regression: decimal rounding","expected":["1.30","100/331","76.8"],"passed":true},{"actual":["1.13","1/8","88.9"],"check":"regression: decimal rounding","expected":["1.13","1/8","88.9"],"passed":true},{"actual":["2.00","1/1","50.0"],"check":"variant scenario 1","expected":["2.00","1/1","50.0"],"passed":true},{"actual":["3.08","52/25","32.5"],"check":"variant scenario 2","expected":["3.08","52/25","32.5"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control underdog\", \"actual\": [\"2.50\", \"3/2\", \"40.0\"], \"expected\": [\"2.50\", \"3/2\", \"40.0\"], \"passed\": true}, {\"check\": \"control favourite\", \"actual\": [\"1.50\", \"1/2\", \"66.7\"], \"expected\": [\"1.50\", \"1/2\", \"66.7\"], \"passed\": true}, {\"check\": \"boundary even money\", \"actual\": [\"2.00\", \"1/1\", \"50.0\"], \"expected\": [\"2.00\", \"1/1\", \"50.0\"], \"passed\": true}, {\"check\": \"boundary unsigned line\", \"actual\": [\"3.50\", \"5/2\", \"28.6\"], \"expected\": [\"3.50\", \"5/2\", \"28.6\"], \"passed\": true}, {\"check\": \"boundary below minimum\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up decimal\", \"actual\": [\"1.13\", \"1/8\", \"88.9\"], \"expected\": [\"1.13\", \"1/8\", \"88.9\"], \"passed\": true}, {\"check\": \"regression: decimal rounding\", \"actual\": [\"1.30\", \"100/331\", \"76.8\"], \"expected\": [\"1.30\", \"100/331\", \"76.8\"], \"passed\": true}, {\"check\": \"regression: decimal rounding\", \"actual\": [\"1.13\", \"1/8\", \"88.9\"], \"expected\": [\"1.13\", \"1/8\", \"88.9\"], \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": [\"2.00\", \"1/1\", \"50.0\"], \"expected\": [\"2.00\", \"1/1\", \"50.0\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"3.08\", \"52/25\", \"32.5\"], \"expected\": [\"3.08\", \"52/25\", \"32.5\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}