{"abstract":"Underdog probabilities come out above 50 percent.","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":"Using the underdog formula everywhere gives favourites probabilities below 50 percent.","family":"w2-odds-conversion-american-moneyline-expansion-implied-probability-sign","id":"FA-84386","implementations":{"attempt":{"sha256":"bff2bfc46f92370b3c0ba9b05dbb803b9ca77cb5309ec6b62a42b4b8ae5b0e1d","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(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: implied probability sign', ('-247',), ['1.40', '100/247', '71.2']),\n  ('regression: implied probability sign', ('491',), ['5.91', '491/100', '16.9']),\n  ('variant scenario 1', ('-446',), ['1.22', '50/223', '81.7']),\n  ('variant scenario 2', ('-636',), ['1.16', '25/159', '86.4'])],\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: implied probability sign', ('602',), ['7.02', '301/50', '14.2']),\n  ('regression: implied probability sign', ('-310',), ['1.32', '10/31', '75.6']),\n  ('variant scenario 1', ('+328',), ['4.28', '82/25', '23.4']),\n  ('variant scenario 2', ('+732',), ['8.32', '183/25', '12.0'])],\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: implied probability sign', ('-283',), ['1.35', '100/283', '73.9']),\n  ('regression: implied probability sign', ('+757',), ['8.57', '757/100', '11.7']),\n  ('variant scenario 1', ('-466',), ['1.21', '50/233', '82.3']),\n  ('variant scenario 2', ('100',), ['2.00', '1/1', '50.0'])],\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: implied probability sign', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: implied probability sign', ('+284',), ['3.84', '71/25', '26.0']),\n  ('variant scenario 1', ('+448',), ['5.48', '112/25', '18.2']),\n  ('variant scenario 2', ('-131',), ['1.76', '100/131', '56.7'])],\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: implied probability sign', ('+234',), ['3.34', '117/50', '29.9']),\n  ('regression: implied probability sign', ('-110',), ['1.91', '10/11', '52.4']),\n  ('variant scenario 1', ('430',), ['5.30', '43/10', '18.9']),\n  ('variant scenario 2', ('+115',), ['2.15', '23/20', '46.5'])]]\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":"b280b92d3d170a91f83be5a9d9880dfe2dab769f5bbf7a2c030f8be9e89d5eb0","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\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: implied probability sign', ('-247',), ['1.40', '100/247', '71.2']),\n  ('regression: implied probability sign', ('491',), ['5.91', '491/100', '16.9']),\n  ('variant scenario 1', ('-446',), ['1.22', '50/223', '81.7']),\n  ('variant scenario 2', ('-636',), ['1.16', '25/159', '86.4'])],\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: implied probability sign', ('602',), ['7.02', '301/50', '14.2']),\n  ('regression: implied probability sign', ('-310',), ['1.32', '10/31', '75.6']),\n  ('variant scenario 1', ('+328',), ['4.28', '82/25', '23.4']),\n  ('variant scenario 2', ('+732',), ['8.32', '183/25', '12.0'])],\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: implied probability sign', ('-283',), ['1.35', '100/283', '73.9']),\n  ('regression: implied probability sign', ('+757',), ['8.57', '757/100', '11.7']),\n  ('variant scenario 1', ('-466',), ['1.21', '50/233', '82.3']),\n  ('variant scenario 2', ('100',), ['2.00', '1/1', '50.0'])],\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: implied probability sign', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: implied probability sign', ('+284',), ['3.84', '71/25', '26.0']),\n  ('variant scenario 1', ('+448',), ['5.48', '112/25', '18.2']),\n  ('variant scenario 2', ('-131',), ['1.76', '100/131', '56.7'])],\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: implied probability sign', ('+234',), ['3.34', '117/50', '29.9']),\n  ('regression: implied probability sign', ('-110',), ['1.91', '10/11', '52.4']),\n  ('variant scenario 1', ('430',), ['5.30', '43/10', '18.9']),\n  ('variant scenario 2', ('+115',), ['2.15', '23/20', '46.5'])]]\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":"56aca2d1b67bf35290c6ee80ec06e43fca85024f2ac338b71d33b1dea6b9794a","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: implied probability sign', ('-247',), ['1.40', '100/247', '71.2']),\n  ('regression: implied probability sign', ('491',), ['5.91', '491/100', '16.9']),\n  ('variant scenario 1', ('-446',), ['1.22', '50/223', '81.7']),\n  ('variant scenario 2', ('-636',), ['1.16', '25/159', '86.4'])],\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: implied probability sign', ('602',), ['7.02', '301/50', '14.2']),\n  ('regression: implied probability sign', ('-310',), ['1.32', '10/31', '75.6']),\n  ('variant scenario 1', ('+328',), ['4.28', '82/25', '23.4']),\n  ('variant scenario 2', ('+732',), ['8.32', '183/25', '12.0'])],\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: implied probability sign', ('-283',), ['1.35', '100/283', '73.9']),\n  ('regression: implied probability sign', ('+757',), ['8.57', '757/100', '11.7']),\n  ('variant scenario 1', ('-466',), ['1.21', '50/233', '82.3']),\n  ('variant scenario 2', ('100',), ['2.00', '1/1', '50.0'])],\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: implied probability sign', ('-800',), ['1.13', '1/8', '88.9']),\n  ('regression: implied probability sign', ('+284',), ['3.84', '71/25', '26.0']),\n  ('variant scenario 1', ('+448',), ['5.48', '112/25', '18.2']),\n  ('variant scenario 2', ('-131',), ['1.76', '100/131', '56.7'])],\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: implied probability sign', ('+234',), ['3.34', '117/50', '29.9']),\n  ('regression: implied probability sign', ('-110',), ['1.91', '10/11', '52.4']),\n  ('variant scenario 1', ('430',), ['5.30', '43/10', '18.9']),\n  ('variant scenario 2', ('+115',), ['2.15', '23/20', '46.5'])]]\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-implied-probability-sign","generated_at":"2026-09-29T14:50:30.441185+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":"Use 100 / (N + 100) for positive lines and N / (N + 100) for negative lines.","root_cause":"The favourite formula N / (N + 100) is applied to every line.","sha256":"0b1b3abe0a0bb9cbf71fde742fd9931bbe8f0f280b9bb6350724ac36a8bf81ef","title":"Implied probability uses one formula for both signs · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.578,"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","33.3"],"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.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","11.1"],"check":"control half-up decimal","expected":["1.13","1/8","88.9"],"passed":false},{"actual":["1.40","100/247","28.8"],"check":"regression: implied probability sign","expected":["1.40","100/247","71.2"],"passed":false},{"actual":["5.91","491/100","16.9"],"check":"regression: implied probability sign","expected":["5.91","491/100","16.9"],"passed":true},{"actual":["1.22","50/223","18.3"],"check":"variant scenario 1","expected":["1.22","50/223","81.7"],"passed":false},{"actual":["1.16","25/159","13.6"],"check":"variant scenario 2","expected":["1.16","25/159","86.4"],"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\", \"33.3\"], \"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.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\", \"11.1\"], \"expected\": [\"1.13\", \"1/8\", \"88.9\"], \"passed\": false}, {\"check\": \"regression: implied probability sign\", \"actual\": [\"1.40\", \"100/247\", \"28.8\"], \"expected\": [\"1.40\", \"100/247\", \"71.2\"], \"passed\": false}, {\"check\": \"regression: implied probability sign\", \"actual\": [\"5.91\", \"491/100\", \"16.9\"], \"expected\": [\"5.91\", \"491/100\", \"16.9\"], \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": [\"1.22\", \"50/223\", \"18.3\"], \"expected\": [\"1.22\", \"50/223\", \"81.7\"], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [\"1.16\", \"25/159\", \"13.6\"], \"expected\": [\"1.16\", \"25/159\", \"86.4\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.184,"exit_code":1,"observations":[{"actual":["2.50","3/2","60.0"],"check":"control underdog","expected":["2.50","3/2","40.0"],"passed":false},{"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","71.4"],"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.13","1/8","88.9"],"check":"control half-up decimal","expected":["1.13","1/8","88.9"],"passed":true},{"actual":["1.40","100/247","71.2"],"check":"regression: implied probability sign","expected":["1.40","100/247","71.2"],"passed":true},{"actual":["5.91","491/100","83.1"],"check":"regression: implied probability sign","expected":["5.91","491/100","16.9"],"passed":false},{"actual":["1.22","50/223","81.7"],"check":"variant scenario 1","expected":["1.22","50/223","81.7"],"passed":true},{"actual":["1.16","25/159","86.4"],"check":"variant scenario 2","expected":["1.16","25/159","86.4"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control underdog\", \"actual\": [\"2.50\", \"3/2\", \"60.0\"], \"expected\": [\"2.50\", \"3/2\", \"40.0\"], \"passed\": false}, {\"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\", \"71.4\"], \"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.13\", \"1/8\", \"88.9\"], \"expected\": [\"1.13\", \"1/8\", \"88.9\"], \"passed\": true}, {\"check\": \"regression: implied probability sign\", \"actual\": [\"1.40\", \"100/247\", \"71.2\"], \"expected\": [\"1.40\", \"100/247\", \"71.2\"], \"passed\": true}, {\"check\": \"regression: implied probability sign\", \"actual\": [\"5.91\", \"491/100\", \"83.1\"], \"expected\": [\"5.91\", \"491/100\", \"16.9\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"1.22\", \"50/223\", \"81.7\"], \"expected\": [\"1.22\", \"50/223\", \"81.7\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"1.16\", \"25/159\", \"86.4\"], \"expected\": [\"1.16\", \"25/159\", \"86.4\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.834,"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.40","100/247","71.2"],"check":"regression: implied probability sign","expected":["1.40","100/247","71.2"],"passed":true},{"actual":["5.91","491/100","16.9"],"check":"regression: implied probability sign","expected":["5.91","491/100","16.9"],"passed":true},{"actual":["1.22","50/223","81.7"],"check":"variant scenario 1","expected":["1.22","50/223","81.7"],"passed":true},{"actual":["1.16","25/159","86.4"],"check":"variant scenario 2","expected":["1.16","25/159","86.4"],"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: implied probability sign\", \"actual\": [\"1.40\", \"100/247\", \"71.2\"], \"expected\": [\"1.40\", \"100/247\", \"71.2\"], \"passed\": true}, {\"check\": \"regression: implied probability sign\", \"actual\": [\"5.91\", \"491/100\", \"16.9\"], \"expected\": [\"5.91\", \"491/100\", \"16.9\"], \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": [\"1.22\", \"50/223\", \"81.7\"], \"expected\": [\"1.22\", \"50/223\", \"81.7\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"1.16\", \"25/159\", \"86.4\"], \"expected\": [\"1.16\", \"25/159\", \"86.4\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}