{"abstract":"Converted balances are a cent high on most accounts.","category":"Double-entry ledger accounting","checks":7,"contract":"x = {'bid': [num, den], 'ask': [num, den], 'accounts': [[name, 'asset'|'liability', monetary, foreign units, carried home cents]]}. Monetary assets are revalued at the bid rate and monetary liabilities at the ask rate: home = foreign * num / den rounded half-up per account. Non-monetary accounts keep their carried amount. Unrealized gain sums (new - carried) for assets and (carried - new) for liabilities. Return {'balances': [[name, home]], 'unrealized_gain'}.","evaluation_group":"w2-double-entry-ledger-accounting-fx-revaluation","failed_approach":"Strict comparison rounds exact half-cent ties down.","family":"w2-double-entry-ledger-accounting-fx-revaluation-half-up-tie-rounding","id":"FA-57986","implementations":{"attempt":{"sha256":"384c1298370ba8f10d48c2be7eaf8d619890dabb9b33081d20b39ace82c9caa8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def to_home(amount, rate):\n        num, den = rate\n        q, r = divmod(amount * num, den)\n        return q + (1 if 2 * r > den else 0)\n    gain = 0\n    out = []\n    for name, kind, monetary, foreign, carried in x['accounts']:\n        if not monetary:\n            out.append([name, carried])\n            continue\n        rate = x['bid'] if kind == 'asset' else x['ask']\n        new = to_home(foreign, rate)\n        delta = new - carried\n        gain += delta if kind == 'asset' else -delta\n        out.append([name, new])\n    return {'balances': out, 'unrealized_gain': gain}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: half-up tie rounding', {'bid': [124, 100], 'ask': [125, 100], 'accounts': [['a0', 'liability', True, 7, 14], ['a1', 'liability', False, 7, 7], ['a2', 'liability', True, 5, 8]]}, {'balances': [['a0', 9], ['a1', 7], ['a2', 6]], 'unrealized_gain': 7}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [9, 8], 'ask': [12, 8], 'accounts': [['a0', 'liability', True, 5, 10], ['a1', 'asset', True, 101, 101], ['a2', 'asset', True, 7, 7], ['a3', 'asset', False, 250, 500]]}, {'balances': [['a0', 8], ['a1', 114], ['a2', 8], ['a3', 500]], 'unrealized_gain': 16}], ['control 1', {'bid': [2, 2], 'ask': [5, 2], 'accounts': [['a0', 'liability', True, 3, 500], ['a1', 'asset', True, 3, 3]]}, {'balances': [['a0', 8], ['a1', 3]], 'unrealized_gain': 492}], ['control 2', {'bid': [18, 10], 'ask': [19, 10], 'accounts': [['a0', 'asset', False, 999, 500], ['a1', 'liability', False, 999, 1002], ['a2', 'liability', True, 1, 500], ['a3', 'liability', True, 1, 500], ['a4', 'asset', False, 1000, 1003]]}, {'balances': [['a0', 500], ['a1', 1002], ['a2', 2], ['a3', 2], ['a4', 1003]], 'unrealized_gain': 996}], ['control 3', {'bid': [8, 4], 'ask': [11, 4], 'accounts': [['a0', 'asset', True, 1000, 1000], ['a1', 'asset', False, 7, 7], ['a2', 'asset', True, 250, 250], ['a3', 'liability', False, 5, 8], ['a4', 'liability', False, 1000, 1000]]}, {'balances': [['a0', 2000], ['a1', 7], ['a2', 500], ['a3', 8], ['a4', 1000]], 'unrealized_gain': 1250}], ['control 4', {'bid': [4, 2], 'ask': [5, 2], 'accounts': [['a0', 'asset', False, 1000, 1003], ['a1', 'liability', True, 1000, 1003], ['a2', 'asset', False, 1, 2], ['a3', 'liability', False, 999, 500], ['a4', 'liability', True, 7, 10]]}, {'balances': [['a0', 1003], ['a1', 2500], ['a2', 2], ['a3', 500], ['a4', 18]], 'unrealized_gain': -1505}], ['control 5', {'bid': [1, 2], 'ask': [2, 2], 'accounts': [['a0', 'liability', True, 250, 500], ['a1', 'asset', False, 101, 101], ['a2', 'liability', True, 3, 500]]}, {'balances': [['a0', 250], ['a1', 101], ['a2', 3]], 'unrealized_gain': 747}]], [['regression: half-up tie rounding', {'bid': [133, 100], 'ask': [135, 100], 'accounts': [['a0', 'liability', False, 3, 6], ['a1', 'asset', True, 1, 1], ['a2', 'liability', True, 7, 500], ['a3', 'liability', True, 3, 6]]}, {'balances': [['a0', 6], ['a1', 1], ['a2', 9], ['a3', 4]], 'unrealized_gain': 493}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [9, 4], 'ask': [10, 4], 'accounts': [['a0', 'asset', False, 1, 500], ['a1', 'liability', True, 999, 999]]}, {'balances': [['a0', 500], ['a1', 2498]], 'unrealized_gain': -1499}], ['control 1', {'bid': [119, 100], 'ask': [120, 100], 'accounts': [['a0', 'asset', False, 5, 500], ['a1', 'liability', False, 999, 500]]}, {'balances': [['a0', 500], ['a1', 500]], 'unrealized_gain': 0}], ['control 2', {'bid': [4, 2], 'ask': [5, 2], 'accounts': [['a0', 'liability', True, 250, 500], ['a1', 'asset', True, 999, 999], ['a2', 'liability', True, 1000, 500], ['a3', 'asset', False, 5, 500], ['a4', 'liability', False, 5, 10]]}, {'balances': [['a0', 625], ['a1', 1998], ['a2', 2500], ['a3', 500], ['a4', 10]], 'unrealized_gain': -1126}], ['control 3', {'bid': [188, 100], 'ask': [189, 100], 'accounts': [['a0', 'asset', False, 1000, 1000], ['a1', 'asset', False, 1000, 1000], ['a2', 'asset', False, 5, 5], ['a3', 'asset', True, 1000, 1003]]}, {'balances': [['a0', 1000], ['a1', 1000], ['a2', 5], ['a3', 1880]], 'unrealized_gain': 877}], ['control 4', {'bid': [3, 4], 'ask': [4, 4], 'accounts': [['a0', 'asset', True, 250, 500], ['a1', 'liability', True, 101, 202], ['a2', 'liability', False, 101, 104], ['a3', 'asset', True, 1000, 500], ['a4', 'asset', True, 5, 500]]}, {'balances': [['a0', 188], ['a1', 101], ['a2', 104], ['a3', 750], ['a4', 4]], 'unrealized_gain': -457}], ['control 5', {'bid': [6, 4], 'ask': [7, 4], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'liability', True, 1000, 2000]]}, {'balances': [['a0', 2], ['a1', 1750]], 'unrealized_gain': 248}]], [['regression: half-up tie rounding', {'bid': [130, 100], 'ask': [132, 100], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'asset', True, 7, 500]]}, {'balances': [['a0', 1], ['a1', 9]], 'unrealized_gain': -494}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [7, 4], 'ask': [9, 4], 'accounts': [['a0', 'asset', True, 1000, 500], ['a1', 'liability', True, 1, 2], ['a2', 'asset', True, 250, 253], ['a3', 'liability', True, 101, 500], ['a4', 'asset', True, 5, 8]]}, {'balances': [['a0', 1750], ['a1', 2], ['a2', 438], ['a3', 227], ['a4', 9]], 'unrealized_gain': 1709}], ['control 1', {'bid': [2, 2], 'ask': [3, 2], 'accounts': [['a0', 'asset', True, 3, 3], ['a1', 'asset', False, 5, 500], ['a2', 'asset', False, 999, 1998], ['a3', 'asset', True, 5, 5], ['a4', 'liability', False, 7, 14]]}, {'balances': [['a0', 3], ['a1', 500], ['a2', 1998], ['a3', 5], ['a4', 14]], 'unrealized_gain': 0}], ['control 2', {'bid': [135, 100], 'ask': [136, 100], 'accounts': [['a0', 'liability', True, 999, 1002], ['a1', 'liability', False, 1, 500], ['a2', 'liability', True, 5, 5]]}, {'balances': [['a0', 1359], ['a1', 500], ['a2', 7]], 'unrealized_gain': -359}], ['control 3', {'bid': [4, 2], 'ask': [6, 2], 'accounts': [['a0', 'liability', True, 1000, 2000], ['a1', 'asset', True, 7, 10], ['a2', 'asset', True, 101, 101]]}, {'balances': [['a0', 3000], ['a1', 14], ['a2', 202]], 'unrealized_gain': -895}], ['control 4', {'bid': [7, 4], 'ask': [10, 4], 'accounts': [['a0', 'liability', True, 101, 500], ['a1', 'asset', True, 1, 2]]}, {'balances': [['a0', 253], ['a1', 2]], 'unrealized_gain': 247}], ['control 5', {'bid': [81, 100], 'ask': [83, 100], 'accounts': [['a0', 'asset', True, 1, 500], ['a1', 'asset', False, 1000, 500], ['a2', 'asset', True, 1000, 1003]]}, {'balances': [['a0', 1], ['a1', 500], ['a2', 810]], 'unrealized_gain': -692}]], [['regression: half-up tie rounding', {'bid': [8, 4], 'ask': [9, 4], 'accounts': [['a0', 'asset', False, 250, 253], ['a1', 'liability', True, 5, 8], ['a2', 'asset', False, 5, 10], ['a3', 'liability', True, 5, 8], ['a4', 'liability', True, 999, 1998]]}, {'balances': [['a0', 253], ['a1', 11], ['a2', 10], ['a3', 11], ['a4', 2248]], 'unrealized_gain': -256}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [15, 10], 'ask': [16, 10], 'accounts': [['a0', 'asset', True, 3, 6], ['a1', 'asset', True, 7, 500], ['a2', 'liability', True, 999, 500], ['a3', 'liability', True, 3, 6], ['a4', 'liability', True, 1, 2]]}, {'balances': [['a0', 5], ['a1', 11], ['a2', 1598], ['a3', 5], ['a4', 2]], 'unrealized_gain': -1587}], ['control 1', {'bid': [3, 2], 'ask': [4, 2], 'accounts': [['a0', 'liability', True, 999, 500], ['a1', 'liability', False, 3, 3], ['a2', 'liability', True, 5, 10]]}, {'balances': [['a0', 1998], ['a1', 3], ['a2', 10]], 'unrealized_gain': -1498}], ['control 2', {'bid': [7, 4], 'ask': [10, 4], 'accounts': [['a0', 'liability', True, 1000, 2000], ['a1', 'asset', True, 1000, 1003], ['a2', 'liability', False, 7, 14]]}, {'balances': [['a0', 2500], ['a1', 1750], ['a2', 14]], 'unrealized_gain': 247}], ['control 3', {'bid': [8, 10], 'ask': [9, 10], 'accounts': [['a0', 'liability', True, 1, 4], ['a1', 'asset', True, 250, 500], ['a2', 'asset', False, 101, 104], ['a3', 'asset', True, 1, 1]]}, {'balances': [['a0', 1], ['a1', 200], ['a2', 104], ['a3', 1]], 'unrealized_gain': -297}], ['control 4', {'bid': [6, 4], 'ask': [9, 4], 'accounts': [['a0', 'liability', False, 7, 500], ['a1', 'liability', True, 3, 6]]}, {'balances': [['a0', 500], ['a1', 7]], 'unrealized_gain': -1}], ['control 5', {'bid': [14, 10], 'ask': [17, 10], 'accounts': [['a0', 'liability', True, 1, 4], ['a1', 'asset', True, 250, 253], ['a2', 'liability', False, 999, 1002], ['a3', 'asset', False, 7, 10], ['a4', 'asset', False, 101, 101]]}, {'balances': [['a0', 2], ['a1', 350], ['a2', 1002], ['a3', 10], ['a4', 101]], 'unrealized_gain': 99}]], [['regression: half-up tie rounding', {'bid': [167, 100], 'ask': [169, 100], 'accounts': [['a0', 'asset', True, 250, 250], ['a1', 'asset', True, 101, 104], ['a2', 'liability', True, 999, 1998]]}, {'balances': [['a0', 418], ['a1', 169], ['a2', 1688]], 'unrealized_gain': 543}], ['control 1', {'bid': [158, 100], 'ask': [159, 100], 'accounts': [['a0', 'liability', True, 1, 1], ['a1', 'asset', False, 999, 1002], ['a2', 'liability', True, 1, 2], ['a3', 'liability', False, 1000, 1003]]}, {'balances': [['a0', 2], ['a1', 1002], ['a2', 2], ['a3', 1003]], 'unrealized_gain': -1}], ['control 2', {'bid': [2, 4], 'ask': [3, 4], 'accounts': [['a0', 'asset', True, 5, 500], ['a1', 'asset', True, 5, 500], ['a2', 'asset', True, 5, 8], ['a3', 'asset', True, 3, 500]]}, {'balances': [['a0', 3], ['a1', 3], ['a2', 3], ['a3', 2]], 'unrealized_gain': -1497}], ['control 3', {'bid': [130, 100], 'ask': [131, 100], 'accounts': [['a0', 'asset', False, 3, 6], ['a1', 'liability', True, 250, 253]]}, {'balances': [['a0', 6], ['a1', 328]], 'unrealized_gain': -75}], ['control 4', {'bid': [6, 4], 'ask': [7, 4], 'accounts': [['a0', 'asset', False, 999, 500], ['a1', 'asset', True, 999, 999], ['a2', 'asset', True, 101, 104]]}, {'balances': [['a0', 500], ['a1', 1499], ['a2', 152]], 'unrealized_gain': 548}], ['control 5', {'bid': [4, 2], 'ask': [7, 2], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'asset', True, 101, 101]]}, {'balances': [['a0', 2], ['a1', 202]], 'unrealized_gain': 99}], ['control 6', {'bid': [9, 10], 'ask': [10, 10], 'accounts': [['a0', 'liability', False, 101, 500], ['a1', 'asset', False, 7, 14], ['a2', 'liability', True, 7, 10], ['a3', 'asset', False, 101, 101]]}, {'balances': [['a0', 500], ['a1', 14], ['a2', 7], ['a3', 101]], 'unrealized_gain': 3}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, 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":"3e1289e9cec5f37256bd1deca6041f5c150e10cb220602d0750612e447485d9d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def to_home(amount, rate):\n        num, den = rate\n        q, r = divmod(amount * num, den)\n        return q + (1 if r > 0 else 0)\n    gain = 0\n    out = []\n    for name, kind, monetary, foreign, carried in x['accounts']:\n        if not monetary:\n            out.append([name, carried])\n            continue\n        rate = x['bid'] if kind == 'asset' else x['ask']\n        new = to_home(foreign, rate)\n        delta = new - carried\n        gain += delta if kind == 'asset' else -delta\n        out.append([name, new])\n    return {'balances': out, 'unrealized_gain': gain}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: half-up tie rounding', {'bid': [124, 100], 'ask': [125, 100], 'accounts': [['a0', 'liability', True, 7, 14], ['a1', 'liability', False, 7, 7], ['a2', 'liability', True, 5, 8]]}, {'balances': [['a0', 9], ['a1', 7], ['a2', 6]], 'unrealized_gain': 7}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [9, 8], 'ask': [12, 8], 'accounts': [['a0', 'liability', True, 5, 10], ['a1', 'asset', True, 101, 101], ['a2', 'asset', True, 7, 7], ['a3', 'asset', False, 250, 500]]}, {'balances': [['a0', 8], ['a1', 114], ['a2', 8], ['a3', 500]], 'unrealized_gain': 16}], ['control 1', {'bid': [2, 2], 'ask': [5, 2], 'accounts': [['a0', 'liability', True, 3, 500], ['a1', 'asset', True, 3, 3]]}, {'balances': [['a0', 8], ['a1', 3]], 'unrealized_gain': 492}], ['control 2', {'bid': [18, 10], 'ask': [19, 10], 'accounts': [['a0', 'asset', False, 999, 500], ['a1', 'liability', False, 999, 1002], ['a2', 'liability', True, 1, 500], ['a3', 'liability', True, 1, 500], ['a4', 'asset', False, 1000, 1003]]}, {'balances': [['a0', 500], ['a1', 1002], ['a2', 2], ['a3', 2], ['a4', 1003]], 'unrealized_gain': 996}], ['control 3', {'bid': [8, 4], 'ask': [11, 4], 'accounts': [['a0', 'asset', True, 1000, 1000], ['a1', 'asset', False, 7, 7], ['a2', 'asset', True, 250, 250], ['a3', 'liability', False, 5, 8], ['a4', 'liability', False, 1000, 1000]]}, {'balances': [['a0', 2000], ['a1', 7], ['a2', 500], ['a3', 8], ['a4', 1000]], 'unrealized_gain': 1250}], ['control 4', {'bid': [4, 2], 'ask': [5, 2], 'accounts': [['a0', 'asset', False, 1000, 1003], ['a1', 'liability', True, 1000, 1003], ['a2', 'asset', False, 1, 2], ['a3', 'liability', False, 999, 500], ['a4', 'liability', True, 7, 10]]}, {'balances': [['a0', 1003], ['a1', 2500], ['a2', 2], ['a3', 500], ['a4', 18]], 'unrealized_gain': -1505}], ['control 5', {'bid': [1, 2], 'ask': [2, 2], 'accounts': [['a0', 'liability', True, 250, 500], ['a1', 'asset', False, 101, 101], ['a2', 'liability', True, 3, 500]]}, {'balances': [['a0', 250], ['a1', 101], ['a2', 3]], 'unrealized_gain': 747}]], [['regression: half-up tie rounding', {'bid': [133, 100], 'ask': [135, 100], 'accounts': [['a0', 'liability', False, 3, 6], ['a1', 'asset', True, 1, 1], ['a2', 'liability', True, 7, 500], ['a3', 'liability', True, 3, 6]]}, {'balances': [['a0', 6], ['a1', 1], ['a2', 9], ['a3', 4]], 'unrealized_gain': 493}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [9, 4], 'ask': [10, 4], 'accounts': [['a0', 'asset', False, 1, 500], ['a1', 'liability', True, 999, 999]]}, {'balances': [['a0', 500], ['a1', 2498]], 'unrealized_gain': -1499}], ['control 1', {'bid': [119, 100], 'ask': [120, 100], 'accounts': [['a0', 'asset', False, 5, 500], ['a1', 'liability', False, 999, 500]]}, {'balances': [['a0', 500], ['a1', 500]], 'unrealized_gain': 0}], ['control 2', {'bid': [4, 2], 'ask': [5, 2], 'accounts': [['a0', 'liability', True, 250, 500], ['a1', 'asset', True, 999, 999], ['a2', 'liability', True, 1000, 500], ['a3', 'asset', False, 5, 500], ['a4', 'liability', False, 5, 10]]}, {'balances': [['a0', 625], ['a1', 1998], ['a2', 2500], ['a3', 500], ['a4', 10]], 'unrealized_gain': -1126}], ['control 3', {'bid': [188, 100], 'ask': [189, 100], 'accounts': [['a0', 'asset', False, 1000, 1000], ['a1', 'asset', False, 1000, 1000], ['a2', 'asset', False, 5, 5], ['a3', 'asset', True, 1000, 1003]]}, {'balances': [['a0', 1000], ['a1', 1000], ['a2', 5], ['a3', 1880]], 'unrealized_gain': 877}], ['control 4', {'bid': [3, 4], 'ask': [4, 4], 'accounts': [['a0', 'asset', True, 250, 500], ['a1', 'liability', True, 101, 202], ['a2', 'liability', False, 101, 104], ['a3', 'asset', True, 1000, 500], ['a4', 'asset', True, 5, 500]]}, {'balances': [['a0', 188], ['a1', 101], ['a2', 104], ['a3', 750], ['a4', 4]], 'unrealized_gain': -457}], ['control 5', {'bid': [6, 4], 'ask': [7, 4], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'liability', True, 1000, 2000]]}, {'balances': [['a0', 2], ['a1', 1750]], 'unrealized_gain': 248}]], [['regression: half-up tie rounding', {'bid': [130, 100], 'ask': [132, 100], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'asset', True, 7, 500]]}, {'balances': [['a0', 1], ['a1', 9]], 'unrealized_gain': -494}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [7, 4], 'ask': [9, 4], 'accounts': [['a0', 'asset', True, 1000, 500], ['a1', 'liability', True, 1, 2], ['a2', 'asset', True, 250, 253], ['a3', 'liability', True, 101, 500], ['a4', 'asset', True, 5, 8]]}, {'balances': [['a0', 1750], ['a1', 2], ['a2', 438], ['a3', 227], ['a4', 9]], 'unrealized_gain': 1709}], ['control 1', {'bid': [2, 2], 'ask': [3, 2], 'accounts': [['a0', 'asset', True, 3, 3], ['a1', 'asset', False, 5, 500], ['a2', 'asset', False, 999, 1998], ['a3', 'asset', True, 5, 5], ['a4', 'liability', False, 7, 14]]}, {'balances': [['a0', 3], ['a1', 500], ['a2', 1998], ['a3', 5], ['a4', 14]], 'unrealized_gain': 0}], ['control 2', {'bid': [135, 100], 'ask': [136, 100], 'accounts': [['a0', 'liability', True, 999, 1002], ['a1', 'liability', False, 1, 500], ['a2', 'liability', True, 5, 5]]}, {'balances': [['a0', 1359], ['a1', 500], ['a2', 7]], 'unrealized_gain': -359}], ['control 3', {'bid': [4, 2], 'ask': [6, 2], 'accounts': [['a0', 'liability', True, 1000, 2000], ['a1', 'asset', True, 7, 10], ['a2', 'asset', True, 101, 101]]}, {'balances': [['a0', 3000], ['a1', 14], ['a2', 202]], 'unrealized_gain': -895}], ['control 4', {'bid': [7, 4], 'ask': [10, 4], 'accounts': [['a0', 'liability', True, 101, 500], ['a1', 'asset', True, 1, 2]]}, {'balances': [['a0', 253], ['a1', 2]], 'unrealized_gain': 247}], ['control 5', {'bid': [81, 100], 'ask': [83, 100], 'accounts': [['a0', 'asset', True, 1, 500], ['a1', 'asset', False, 1000, 500], ['a2', 'asset', True, 1000, 1003]]}, {'balances': [['a0', 1], ['a1', 500], ['a2', 810]], 'unrealized_gain': -692}]], [['regression: half-up tie rounding', {'bid': [8, 4], 'ask': [9, 4], 'accounts': [['a0', 'asset', False, 250, 253], ['a1', 'liability', True, 5, 8], ['a2', 'asset', False, 5, 10], ['a3', 'liability', True, 5, 8], ['a4', 'liability', True, 999, 1998]]}, {'balances': [['a0', 253], ['a1', 11], ['a2', 10], ['a3', 11], ['a4', 2248]], 'unrealized_gain': -256}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [15, 10], 'ask': [16, 10], 'accounts': [['a0', 'asset', True, 3, 6], ['a1', 'asset', True, 7, 500], ['a2', 'liability', True, 999, 500], ['a3', 'liability', True, 3, 6], ['a4', 'liability', True, 1, 2]]}, {'balances': [['a0', 5], ['a1', 11], ['a2', 1598], ['a3', 5], ['a4', 2]], 'unrealized_gain': -1587}], ['control 1', {'bid': [3, 2], 'ask': [4, 2], 'accounts': [['a0', 'liability', True, 999, 500], ['a1', 'liability', False, 3, 3], ['a2', 'liability', True, 5, 10]]}, {'balances': [['a0', 1998], ['a1', 3], ['a2', 10]], 'unrealized_gain': -1498}], ['control 2', {'bid': [7, 4], 'ask': [10, 4], 'accounts': [['a0', 'liability', True, 1000, 2000], ['a1', 'asset', True, 1000, 1003], ['a2', 'liability', False, 7, 14]]}, {'balances': [['a0', 2500], ['a1', 1750], ['a2', 14]], 'unrealized_gain': 247}], ['control 3', {'bid': [8, 10], 'ask': [9, 10], 'accounts': [['a0', 'liability', True, 1, 4], ['a1', 'asset', True, 250, 500], ['a2', 'asset', False, 101, 104], ['a3', 'asset', True, 1, 1]]}, {'balances': [['a0', 1], ['a1', 200], ['a2', 104], ['a3', 1]], 'unrealized_gain': -297}], ['control 4', {'bid': [6, 4], 'ask': [9, 4], 'accounts': [['a0', 'liability', False, 7, 500], ['a1', 'liability', True, 3, 6]]}, {'balances': [['a0', 500], ['a1', 7]], 'unrealized_gain': -1}], ['control 5', {'bid': [14, 10], 'ask': [17, 10], 'accounts': [['a0', 'liability', True, 1, 4], ['a1', 'asset', True, 250, 253], ['a2', 'liability', False, 999, 1002], ['a3', 'asset', False, 7, 10], ['a4', 'asset', False, 101, 101]]}, {'balances': [['a0', 2], ['a1', 350], ['a2', 1002], ['a3', 10], ['a4', 101]], 'unrealized_gain': 99}]], [['regression: half-up tie rounding', {'bid': [167, 100], 'ask': [169, 100], 'accounts': [['a0', 'asset', True, 250, 250], ['a1', 'asset', True, 101, 104], ['a2', 'liability', True, 999, 1998]]}, {'balances': [['a0', 418], ['a1', 169], ['a2', 1688]], 'unrealized_gain': 543}], ['control 1', {'bid': [158, 100], 'ask': [159, 100], 'accounts': [['a0', 'liability', True, 1, 1], ['a1', 'asset', False, 999, 1002], ['a2', 'liability', True, 1, 2], ['a3', 'liability', False, 1000, 1003]]}, {'balances': [['a0', 2], ['a1', 1002], ['a2', 2], ['a3', 1003]], 'unrealized_gain': -1}], ['control 2', {'bid': [2, 4], 'ask': [3, 4], 'accounts': [['a0', 'asset', True, 5, 500], ['a1', 'asset', True, 5, 500], ['a2', 'asset', True, 5, 8], ['a3', 'asset', True, 3, 500]]}, {'balances': [['a0', 3], ['a1', 3], ['a2', 3], ['a3', 2]], 'unrealized_gain': -1497}], ['control 3', {'bid': [130, 100], 'ask': [131, 100], 'accounts': [['a0', 'asset', False, 3, 6], ['a1', 'liability', True, 250, 253]]}, {'balances': [['a0', 6], ['a1', 328]], 'unrealized_gain': -75}], ['control 4', {'bid': [6, 4], 'ask': [7, 4], 'accounts': [['a0', 'asset', False, 999, 500], ['a1', 'asset', True, 999, 999], ['a2', 'asset', True, 101, 104]]}, {'balances': [['a0', 500], ['a1', 1499], ['a2', 152]], 'unrealized_gain': 548}], ['control 5', {'bid': [4, 2], 'ask': [7, 2], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'asset', True, 101, 101]]}, {'balances': [['a0', 2], ['a1', 202]], 'unrealized_gain': 99}], ['control 6', {'bid': [9, 10], 'ask': [10, 10], 'accounts': [['a0', 'liability', False, 101, 500], ['a1', 'asset', False, 7, 14], ['a2', 'liability', True, 7, 10], ['a3', 'asset', False, 101, 101]]}, {'balances': [['a0', 500], ['a1', 14], ['a2', 7], ['a3', 101]], 'unrealized_gain': 3}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, 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":"a04e3f2b107fb11c706c415056362e7879c841d8e5270b175b057e70c2cf9325","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def to_home(amount, rate):\n        num, den = rate\n        q, r = divmod(amount * num, den)\n        return q + (1 if 2 * r >= den else 0)\n    gain = 0\n    out = []\n    for name, kind, monetary, foreign, carried in x['accounts']:\n        if not monetary:\n            out.append([name, carried])\n            continue\n        rate = x['bid'] if kind == 'asset' else x['ask']\n        new = to_home(foreign, rate)\n        delta = new - carried\n        gain += delta if kind == 'asset' else -delta\n        out.append([name, new])\n    return {'balances': out, 'unrealized_gain': gain}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: half-up tie rounding', {'bid': [124, 100], 'ask': [125, 100], 'accounts': [['a0', 'liability', True, 7, 14], ['a1', 'liability', False, 7, 7], ['a2', 'liability', True, 5, 8]]}, {'balances': [['a0', 9], ['a1', 7], ['a2', 6]], 'unrealized_gain': 7}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [9, 8], 'ask': [12, 8], 'accounts': [['a0', 'liability', True, 5, 10], ['a1', 'asset', True, 101, 101], ['a2', 'asset', True, 7, 7], ['a3', 'asset', False, 250, 500]]}, {'balances': [['a0', 8], ['a1', 114], ['a2', 8], ['a3', 500]], 'unrealized_gain': 16}], ['control 1', {'bid': [2, 2], 'ask': [5, 2], 'accounts': [['a0', 'liability', True, 3, 500], ['a1', 'asset', True, 3, 3]]}, {'balances': [['a0', 8], ['a1', 3]], 'unrealized_gain': 492}], ['control 2', {'bid': [18, 10], 'ask': [19, 10], 'accounts': [['a0', 'asset', False, 999, 500], ['a1', 'liability', False, 999, 1002], ['a2', 'liability', True, 1, 500], ['a3', 'liability', True, 1, 500], ['a4', 'asset', False, 1000, 1003]]}, {'balances': [['a0', 500], ['a1', 1002], ['a2', 2], ['a3', 2], ['a4', 1003]], 'unrealized_gain': 996}], ['control 3', {'bid': [8, 4], 'ask': [11, 4], 'accounts': [['a0', 'asset', True, 1000, 1000], ['a1', 'asset', False, 7, 7], ['a2', 'asset', True, 250, 250], ['a3', 'liability', False, 5, 8], ['a4', 'liability', False, 1000, 1000]]}, {'balances': [['a0', 2000], ['a1', 7], ['a2', 500], ['a3', 8], ['a4', 1000]], 'unrealized_gain': 1250}], ['control 4', {'bid': [4, 2], 'ask': [5, 2], 'accounts': [['a0', 'asset', False, 1000, 1003], ['a1', 'liability', True, 1000, 1003], ['a2', 'asset', False, 1, 2], ['a3', 'liability', False, 999, 500], ['a4', 'liability', True, 7, 10]]}, {'balances': [['a0', 1003], ['a1', 2500], ['a2', 2], ['a3', 500], ['a4', 18]], 'unrealized_gain': -1505}], ['control 5', {'bid': [1, 2], 'ask': [2, 2], 'accounts': [['a0', 'liability', True, 250, 500], ['a1', 'asset', False, 101, 101], ['a2', 'liability', True, 3, 500]]}, {'balances': [['a0', 250], ['a1', 101], ['a2', 3]], 'unrealized_gain': 747}]], [['regression: half-up tie rounding', {'bid': [133, 100], 'ask': [135, 100], 'accounts': [['a0', 'liability', False, 3, 6], ['a1', 'asset', True, 1, 1], ['a2', 'liability', True, 7, 500], ['a3', 'liability', True, 3, 6]]}, {'balances': [['a0', 6], ['a1', 1], ['a2', 9], ['a3', 4]], 'unrealized_gain': 493}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [9, 4], 'ask': [10, 4], 'accounts': [['a0', 'asset', False, 1, 500], ['a1', 'liability', True, 999, 999]]}, {'balances': [['a0', 500], ['a1', 2498]], 'unrealized_gain': -1499}], ['control 1', {'bid': [119, 100], 'ask': [120, 100], 'accounts': [['a0', 'asset', False, 5, 500], ['a1', 'liability', False, 999, 500]]}, {'balances': [['a0', 500], ['a1', 500]], 'unrealized_gain': 0}], ['control 2', {'bid': [4, 2], 'ask': [5, 2], 'accounts': [['a0', 'liability', True, 250, 500], ['a1', 'asset', True, 999, 999], ['a2', 'liability', True, 1000, 500], ['a3', 'asset', False, 5, 500], ['a4', 'liability', False, 5, 10]]}, {'balances': [['a0', 625], ['a1', 1998], ['a2', 2500], ['a3', 500], ['a4', 10]], 'unrealized_gain': -1126}], ['control 3', {'bid': [188, 100], 'ask': [189, 100], 'accounts': [['a0', 'asset', False, 1000, 1000], ['a1', 'asset', False, 1000, 1000], ['a2', 'asset', False, 5, 5], ['a3', 'asset', True, 1000, 1003]]}, {'balances': [['a0', 1000], ['a1', 1000], ['a2', 5], ['a3', 1880]], 'unrealized_gain': 877}], ['control 4', {'bid': [3, 4], 'ask': [4, 4], 'accounts': [['a0', 'asset', True, 250, 500], ['a1', 'liability', True, 101, 202], ['a2', 'liability', False, 101, 104], ['a3', 'asset', True, 1000, 500], ['a4', 'asset', True, 5, 500]]}, {'balances': [['a0', 188], ['a1', 101], ['a2', 104], ['a3', 750], ['a4', 4]], 'unrealized_gain': -457}], ['control 5', {'bid': [6, 4], 'ask': [7, 4], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'liability', True, 1000, 2000]]}, {'balances': [['a0', 2], ['a1', 1750]], 'unrealized_gain': 248}]], [['regression: half-up tie rounding', {'bid': [130, 100], 'ask': [132, 100], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'asset', True, 7, 500]]}, {'balances': [['a0', 1], ['a1', 9]], 'unrealized_gain': -494}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [7, 4], 'ask': [9, 4], 'accounts': [['a0', 'asset', True, 1000, 500], ['a1', 'liability', True, 1, 2], ['a2', 'asset', True, 250, 253], ['a3', 'liability', True, 101, 500], ['a4', 'asset', True, 5, 8]]}, {'balances': [['a0', 1750], ['a1', 2], ['a2', 438], ['a3', 227], ['a4', 9]], 'unrealized_gain': 1709}], ['control 1', {'bid': [2, 2], 'ask': [3, 2], 'accounts': [['a0', 'asset', True, 3, 3], ['a1', 'asset', False, 5, 500], ['a2', 'asset', False, 999, 1998], ['a3', 'asset', True, 5, 5], ['a4', 'liability', False, 7, 14]]}, {'balances': [['a0', 3], ['a1', 500], ['a2', 1998], ['a3', 5], ['a4', 14]], 'unrealized_gain': 0}], ['control 2', {'bid': [135, 100], 'ask': [136, 100], 'accounts': [['a0', 'liability', True, 999, 1002], ['a1', 'liability', False, 1, 500], ['a2', 'liability', True, 5, 5]]}, {'balances': [['a0', 1359], ['a1', 500], ['a2', 7]], 'unrealized_gain': -359}], ['control 3', {'bid': [4, 2], 'ask': [6, 2], 'accounts': [['a0', 'liability', True, 1000, 2000], ['a1', 'asset', True, 7, 10], ['a2', 'asset', True, 101, 101]]}, {'balances': [['a0', 3000], ['a1', 14], ['a2', 202]], 'unrealized_gain': -895}], ['control 4', {'bid': [7, 4], 'ask': [10, 4], 'accounts': [['a0', 'liability', True, 101, 500], ['a1', 'asset', True, 1, 2]]}, {'balances': [['a0', 253], ['a1', 2]], 'unrealized_gain': 247}], ['control 5', {'bid': [81, 100], 'ask': [83, 100], 'accounts': [['a0', 'asset', True, 1, 500], ['a1', 'asset', False, 1000, 500], ['a2', 'asset', True, 1000, 1003]]}, {'balances': [['a0', 1], ['a1', 500], ['a2', 810]], 'unrealized_gain': -692}]], [['regression: half-up tie rounding', {'bid': [8, 4], 'ask': [9, 4], 'accounts': [['a0', 'asset', False, 250, 253], ['a1', 'liability', True, 5, 8], ['a2', 'asset', False, 5, 10], ['a3', 'liability', True, 5, 8], ['a4', 'liability', True, 999, 1998]]}, {'balances': [['a0', 253], ['a1', 11], ['a2', 10], ['a3', 11], ['a4', 2248]], 'unrealized_gain': -256}], ['regression: half-up tie rounding, partial-repair probe', {'bid': [15, 10], 'ask': [16, 10], 'accounts': [['a0', 'asset', True, 3, 6], ['a1', 'asset', True, 7, 500], ['a2', 'liability', True, 999, 500], ['a3', 'liability', True, 3, 6], ['a4', 'liability', True, 1, 2]]}, {'balances': [['a0', 5], ['a1', 11], ['a2', 1598], ['a3', 5], ['a4', 2]], 'unrealized_gain': -1587}], ['control 1', {'bid': [3, 2], 'ask': [4, 2], 'accounts': [['a0', 'liability', True, 999, 500], ['a1', 'liability', False, 3, 3], ['a2', 'liability', True, 5, 10]]}, {'balances': [['a0', 1998], ['a1', 3], ['a2', 10]], 'unrealized_gain': -1498}], ['control 2', {'bid': [7, 4], 'ask': [10, 4], 'accounts': [['a0', 'liability', True, 1000, 2000], ['a1', 'asset', True, 1000, 1003], ['a2', 'liability', False, 7, 14]]}, {'balances': [['a0', 2500], ['a1', 1750], ['a2', 14]], 'unrealized_gain': 247}], ['control 3', {'bid': [8, 10], 'ask': [9, 10], 'accounts': [['a0', 'liability', True, 1, 4], ['a1', 'asset', True, 250, 500], ['a2', 'asset', False, 101, 104], ['a3', 'asset', True, 1, 1]]}, {'balances': [['a0', 1], ['a1', 200], ['a2', 104], ['a3', 1]], 'unrealized_gain': -297}], ['control 4', {'bid': [6, 4], 'ask': [9, 4], 'accounts': [['a0', 'liability', False, 7, 500], ['a1', 'liability', True, 3, 6]]}, {'balances': [['a0', 500], ['a1', 7]], 'unrealized_gain': -1}], ['control 5', {'bid': [14, 10], 'ask': [17, 10], 'accounts': [['a0', 'liability', True, 1, 4], ['a1', 'asset', True, 250, 253], ['a2', 'liability', False, 999, 1002], ['a3', 'asset', False, 7, 10], ['a4', 'asset', False, 101, 101]]}, {'balances': [['a0', 2], ['a1', 350], ['a2', 1002], ['a3', 10], ['a4', 101]], 'unrealized_gain': 99}]], [['regression: half-up tie rounding', {'bid': [167, 100], 'ask': [169, 100], 'accounts': [['a0', 'asset', True, 250, 250], ['a1', 'asset', True, 101, 104], ['a2', 'liability', True, 999, 1998]]}, {'balances': [['a0', 418], ['a1', 169], ['a2', 1688]], 'unrealized_gain': 543}], ['control 1', {'bid': [158, 100], 'ask': [159, 100], 'accounts': [['a0', 'liability', True, 1, 1], ['a1', 'asset', False, 999, 1002], ['a2', 'liability', True, 1, 2], ['a3', 'liability', False, 1000, 1003]]}, {'balances': [['a0', 2], ['a1', 1002], ['a2', 2], ['a3', 1003]], 'unrealized_gain': -1}], ['control 2', {'bid': [2, 4], 'ask': [3, 4], 'accounts': [['a0', 'asset', True, 5, 500], ['a1', 'asset', True, 5, 500], ['a2', 'asset', True, 5, 8], ['a3', 'asset', True, 3, 500]]}, {'balances': [['a0', 3], ['a1', 3], ['a2', 3], ['a3', 2]], 'unrealized_gain': -1497}], ['control 3', {'bid': [130, 100], 'ask': [131, 100], 'accounts': [['a0', 'asset', False, 3, 6], ['a1', 'liability', True, 250, 253]]}, {'balances': [['a0', 6], ['a1', 328]], 'unrealized_gain': -75}], ['control 4', {'bid': [6, 4], 'ask': [7, 4], 'accounts': [['a0', 'asset', False, 999, 500], ['a1', 'asset', True, 999, 999], ['a2', 'asset', True, 101, 104]]}, {'balances': [['a0', 500], ['a1', 1499], ['a2', 152]], 'unrealized_gain': 548}], ['control 5', {'bid': [4, 2], 'ask': [7, 2], 'accounts': [['a0', 'asset', True, 1, 4], ['a1', 'asset', True, 101, 101]]}, {'balances': [['a0', 2], ['a1', 202]], 'unrealized_gain': 99}], ['control 6', {'bid': [9, 10], 'ask': [10, 10], 'accounts': [['a0', 'liability', False, 101, 500], ['a1', 'asset', False, 7, 14], ['a2', 'liability', True, 7, 10], ['a3', 'asset', False, 101, 101]]}, {'balances': [['a0', 500], ['a1', 14], ['a2', 7], ['a3', 101]], 'unrealized_gain': 3}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, 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":"A deterministic bounded teaching model with stipulated toy bookkeeping rules stated in the contract; amounts are integer cents; it makes no claim of conformance to any accounting standard or product. 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-double-entry-ledger-accounting-fx-revaluation-half-up-tie-rounding","generated_at":"2026-09-29T14:46:22.447577+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ledger software must keep debits equal to credits and apply normal-balance, period and cutoff rules exactly; small sign or boundary slips silently misstate financial statements.","repair":"Round up only when the remainder is at least half the denominator.","root_cause":"Any remainder rounds up instead of rounding half-up.","sha256":"058627eaff9158a59933ebdb04791bf699a5ea8ddd80d70190662df8c09c7128","title":"Foreign currency period-end revaluation: half-up tie rounding · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.214,"exit_code":1,"observations":[{"actual":{"balances":[["a0",9],["a1",7],["a2",6]],"unrealized_gain":7},"check":"regression: half-up tie rounding","expected":{"balances":[["a0",9],["a1",7],["a2",6]],"unrealized_gain":7},"passed":true},{"actual":{"balances":[["a0",7],["a1",114],["a2",8],["a3",500]],"unrealized_gain":17},"check":"regression: half-up tie rounding, partial-repair probe","expected":{"balances":[["a0",8],["a1",114],["a2",8],["a3",500]],"unrealized_gain":16},"passed":false},{"actual":{"balances":[["a0",7],["a1",3]],"unrealized_gain":493},"check":"control 1","expected":{"balances":[["a0",8],["a1",3]],"unrealized_gain":492},"passed":false},{"actual":{"balances":[["a0",500],["a1",1002],["a2",2],["a3",2],["a4",1003]],"unrealized_gain":996},"check":"control 2","expected":{"balances":[["a0",500],["a1",1002],["a2",2],["a3",2],["a4",1003]],"unrealized_gain":996},"passed":true},{"actual":{"balances":[["a0",2000],["a1",7],["a2",500],["a3",8],["a4",1000]],"unrealized_gain":1250},"check":"control 3","expected":{"balances":[["a0",2000],["a1",7],["a2",500],["a3",8],["a4",1000]],"unrealized_gain":1250},"passed":true},{"actual":{"balances":[["a0",1003],["a1",2500],["a2",2],["a3",500],["a4",17]],"unrealized_gain":-1504},"check":"control 4","expected":{"balances":[["a0",1003],["a1",2500],["a2",2],["a3",500],["a4",18]],"unrealized_gain":-1505},"passed":false},{"actual":{"balances":[["a0",250],["a1",101],["a2",3]],"unrealized_gain":747},"check":"control 5","expected":{"balances":[["a0",250],["a1",101],["a2",3]],"unrealized_gain":747},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: half-up tie rounding\", \"actual\": {\"balances\": [[\"a0\", 9], [\"a1\", 7], [\"a2\", 6]], \"unrealized_gain\": 7}, \"expected\": {\"balances\": [[\"a0\", 9], [\"a1\", 7], [\"a2\", 6]], \"unrealized_gain\": 7}, \"passed\": true}, {\"check\": \"regression: half-up tie rounding, partial-repair probe\", \"actual\": {\"balances\": [[\"a0\", 7], [\"a1\", 114], [\"a2\", 8], [\"a3\", 500]], \"unrealized_gain\": 17}, \"expected\": {\"balances\": [[\"a0\", 8], [\"a1\", 114], [\"a2\", 8], [\"a3\", 500]], \"unrealized_gain\": 16}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"balances\": [[\"a0\", 7], [\"a1\", 3]], \"unrealized_gain\": 493}, \"expected\": {\"balances\": [[\"a0\", 8], [\"a1\", 3]], \"unrealized_gain\": 492}, \"passed\": false}, {\"check\": \"control 2\", \"actual\": {\"balances\": [[\"a0\", 500], [\"a1\", 1002], [\"a2\", 2], [\"a3\", 2], [\"a4\", 1003]], \"unrealized_gain\": 996}, \"expected\": {\"balances\": [[\"a0\", 500], [\"a1\", 1002], [\"a2\", 2], [\"a3\", 2], [\"a4\", 1003]], \"unrealized_gain\": 996}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"balances\": [[\"a0\", 2000], [\"a1\", 7], [\"a2\", 500], [\"a3\", 8], [\"a4\", 1000]], \"unrealized_gain\": 1250}, \"expected\": {\"balances\": [[\"a0\", 2000], [\"a1\", 7], [\"a2\", 500], [\"a3\", 8], [\"a4\", 1000]], \"unrealized_gain\": 1250}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"balances\": [[\"a0\", 1003], [\"a1\", 2500], [\"a2\", 2], [\"a3\", 500], [\"a4\", 17]], \"unrealized_gain\": -1504}, \"expected\": {\"balances\": [[\"a0\", 1003], [\"a1\", 2500], [\"a2\", 2], [\"a3\", 500], [\"a4\", 18]], \"unrealized_gain\": -1505}, \"passed\": false}, {\"check\": \"control 5\", \"actual\": {\"balances\": [[\"a0\", 250], [\"a1\", 101], [\"a2\", 3]], \"unrealized_gain\": 747}, \"expected\": {\"balances\": [[\"a0\", 250], [\"a1\", 101], [\"a2\", 3]], \"unrealized_gain\": 747}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.65,"exit_code":1,"observations":[{"actual":{"balances":[["a0",9],["a1",7],["a2",7]],"unrealized_gain":6},"check":"regression: half-up tie rounding","expected":{"balances":[["a0",9],["a1",7],["a2",6]],"unrealized_gain":7},"passed":false},{"actual":{"balances":[["a0",8],["a1",114],["a2",8],["a3",500]],"unrealized_gain":16},"check":"regression: half-up tie rounding, partial-repair probe","expected":{"balances":[["a0",8],["a1",114],["a2",8],["a3",500]],"unrealized_gain":16},"passed":true},{"actual":{"balances":[["a0",8],["a1",3]],"unrealized_gain":492},"check":"control 1","expected":{"balances":[["a0",8],["a1",3]],"unrealized_gain":492},"passed":true},{"actual":{"balances":[["a0",500],["a1",1002],["a2",2],["a3",2],["a4",1003]],"unrealized_gain":996},"check":"control 2","expected":{"balances":[["a0",500],["a1",1002],["a2",2],["a3",2],["a4",1003]],"unrealized_gain":996},"passed":true},{"actual":{"balances":[["a0",2000],["a1",7],["a2",500],["a3",8],["a4",1000]],"unrealized_gain":1250},"check":"control 3","expected":{"balances":[["a0",2000],["a1",7],["a2",500],["a3",8],["a4",1000]],"unrealized_gain":1250},"passed":true},{"actual":{"balances":[["a0",1003],["a1",2500],["a2",2],["a3",500],["a4",18]],"unrealized_gain":-1505},"check":"control 4","expected":{"balances":[["a0",1003],["a1",2500],["a2",2],["a3",500],["a4",18]],"unrealized_gain":-1505},"passed":true},{"actual":{"balances":[["a0",250],["a1",101],["a2",3]],"unrealized_gain":747},"check":"control 5","expected":{"balances":[["a0",250],["a1",101],["a2",3]],"unrealized_gain":747},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: half-up tie rounding\", \"actual\": {\"balances\": [[\"a0\", 9], [\"a1\", 7], [\"a2\", 7]], \"unrealized_gain\": 6}, \"expected\": {\"balances\": [[\"a0\", 9], [\"a1\", 7], [\"a2\", 6]], \"unrealized_gain\": 7}, \"passed\": false}, {\"check\": \"regression: half-up tie rounding, partial-repair probe\", \"actual\": {\"balances\": [[\"a0\", 8], [\"a1\", 114], [\"a2\", 8], [\"a3\", 500]], \"unrealized_gain\": 16}, \"expected\": {\"balances\": [[\"a0\", 8], [\"a1\", 114], [\"a2\", 8], [\"a3\", 500]], \"unrealized_gain\": 16}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"balances\": [[\"a0\", 8], [\"a1\", 3]], \"unrealized_gain\": 492}, \"expected\": {\"balances\": [[\"a0\", 8], [\"a1\", 3]], \"unrealized_gain\": 492}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"balances\": [[\"a0\", 500], [\"a1\", 1002], [\"a2\", 2], [\"a3\", 2], [\"a4\", 1003]], \"unrealized_gain\": 996}, \"expected\": {\"balances\": [[\"a0\", 500], [\"a1\", 1002], [\"a2\", 2], [\"a3\", 2], [\"a4\", 1003]], \"unrealized_gain\": 996}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"balances\": [[\"a0\", 2000], [\"a1\", 7], [\"a2\", 500], [\"a3\", 8], [\"a4\", 1000]], \"unrealized_gain\": 1250}, \"expected\": {\"balances\": [[\"a0\", 2000], [\"a1\", 7], [\"a2\", 500], [\"a3\", 8], [\"a4\", 1000]], \"unrealized_gain\": 1250}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"balances\": [[\"a0\", 1003], [\"a1\", 2500], [\"a2\", 2], [\"a3\", 500], [\"a4\", 18]], \"unrealized_gain\": -1505}, \"expected\": {\"balances\": [[\"a0\", 1003], [\"a1\", 2500], [\"a2\", 2], [\"a3\", 500], [\"a4\", 18]], \"unrealized_gain\": -1505}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"balances\": [[\"a0\", 250], [\"a1\", 101], [\"a2\", 3]], \"unrealized_gain\": 747}, \"expected\": {\"balances\": [[\"a0\", 250], [\"a1\", 101], [\"a2\", 3]], \"unrealized_gain\": 747}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.914,"exit_code":0,"observations":[{"actual":{"balances":[["a0",9],["a1",7],["a2",6]],"unrealized_gain":7},"check":"regression: half-up tie rounding","expected":{"balances":[["a0",9],["a1",7],["a2",6]],"unrealized_gain":7},"passed":true},{"actual":{"balances":[["a0",8],["a1",114],["a2",8],["a3",500]],"unrealized_gain":16},"check":"regression: half-up tie rounding, partial-repair probe","expected":{"balances":[["a0",8],["a1",114],["a2",8],["a3",500]],"unrealized_gain":16},"passed":true},{"actual":{"balances":[["a0",8],["a1",3]],"unrealized_gain":492},"check":"control 1","expected":{"balances":[["a0",8],["a1",3]],"unrealized_gain":492},"passed":true},{"actual":{"balances":[["a0",500],["a1",1002],["a2",2],["a3",2],["a4",1003]],"unrealized_gain":996},"check":"control 2","expected":{"balances":[["a0",500],["a1",1002],["a2",2],["a3",2],["a4",1003]],"unrealized_gain":996},"passed":true},{"actual":{"balances":[["a0",2000],["a1",7],["a2",500],["a3",8],["a4",1000]],"unrealized_gain":1250},"check":"control 3","expected":{"balances":[["a0",2000],["a1",7],["a2",500],["a3",8],["a4",1000]],"unrealized_gain":1250},"passed":true},{"actual":{"balances":[["a0",1003],["a1",2500],["a2",2],["a3",500],["a4",18]],"unrealized_gain":-1505},"check":"control 4","expected":{"balances":[["a0",1003],["a1",2500],["a2",2],["a3",500],["a4",18]],"unrealized_gain":-1505},"passed":true},{"actual":{"balances":[["a0",250],["a1",101],["a2",3]],"unrealized_gain":747},"check":"control 5","expected":{"balances":[["a0",250],["a1",101],["a2",3]],"unrealized_gain":747},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: half-up tie rounding\", \"actual\": {\"balances\": [[\"a0\", 9], [\"a1\", 7], [\"a2\", 6]], \"unrealized_gain\": 7}, \"expected\": {\"balances\": [[\"a0\", 9], [\"a1\", 7], [\"a2\", 6]], \"unrealized_gain\": 7}, \"passed\": true}, {\"check\": \"regression: half-up tie rounding, partial-repair probe\", \"actual\": {\"balances\": [[\"a0\", 8], [\"a1\", 114], [\"a2\", 8], [\"a3\", 500]], \"unrealized_gain\": 16}, \"expected\": {\"balances\": [[\"a0\", 8], [\"a1\", 114], [\"a2\", 8], [\"a3\", 500]], \"unrealized_gain\": 16}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"balances\": [[\"a0\", 8], [\"a1\", 3]], \"unrealized_gain\": 492}, \"expected\": {\"balances\": [[\"a0\", 8], [\"a1\", 3]], \"unrealized_gain\": 492}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"balances\": [[\"a0\", 500], [\"a1\", 1002], [\"a2\", 2], [\"a3\", 2], [\"a4\", 1003]], \"unrealized_gain\": 996}, \"expected\": {\"balances\": [[\"a0\", 500], [\"a1\", 1002], [\"a2\", 2], [\"a3\", 2], [\"a4\", 1003]], \"unrealized_gain\": 996}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"balances\": [[\"a0\", 2000], [\"a1\", 7], [\"a2\", 500], [\"a3\", 8], [\"a4\", 1000]], \"unrealized_gain\": 1250}, \"expected\": {\"balances\": [[\"a0\", 2000], [\"a1\", 7], [\"a2\", 500], [\"a3\", 8], [\"a4\", 1000]], \"unrealized_gain\": 1250}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"balances\": [[\"a0\", 1003], [\"a1\", 2500], [\"a2\", 2], [\"a3\", 500], [\"a4\", 18]], \"unrealized_gain\": -1505}, \"expected\": {\"balances\": [[\"a0\", 1003], [\"a1\", 2500], [\"a2\", 2], [\"a3\", 500], [\"a4\", 18]], \"unrealized_gain\": -1505}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"balances\": [[\"a0\", 250], [\"a1\", 101], [\"a2\", 3]], \"unrealized_gain\": 747}, \"expected\": {\"balances\": [[\"a0\", 250], [\"a1\", 101], [\"a2\", 3]], \"unrealized_gain\": 747}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}