{"abstract":"Loop detector count and occupancy binning returns a wrong result when occupancy percent is scaled after integer division.","category":"Traffic signal timing plans","checks":8,"contract":"Input {interval s, bins, events: [[on, off]] seconds relative to period start (on may be negative), max_presence, no_activity}. A vehicle is counted in the bin of its on time if inside the period; occupied time is split across bins by overlap; occupancy percent is floor(occupied*100/interval). Status is 'stuck-on' if any presence lasts >= max_presence, 'no-activity' if there are no events and the period (bins*interval) is >= no_activity, else 'ok'. Return {counts, occ_pct, status}.","evaluation_group":"w2-traffic_signal_timing_plans-detector-bins","failed_approach":"Rounding to nearest disagrees with the stipulated floor for fractional percentages.","family":"w2-traffic_signal_timing_plans-detector-bins-pct-rounding","id":"FA-68246","implementations":{"attempt":{"sha256":"6fd30fedb2b0205d4a9b0918740565b003d3026d63a75c2045ff9918d639f26e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    I = x['interval']\n    B = x['bins']\n    counts = [0] * B\n    occ = [0] * B\n    status = 'ok'\n    for on, off in sorted(x['events']):\n        b = on // I\n        if 0 <= b < B:\n            counts[b] += 1\n        if off - on >= x['max_presence']:\n            status = 'stuck-on'\n        for k in range(B):\n            lo, hi = k * I, (k + 1) * I\n            occ[k] += max(0, min(off, hi) - max(on, lo))\n    if not x['events'] and B * I >= x['no_activity']:\n        status = 'no-activity'\n    return {'counts': counts, 'occ_pct': [round(o * 100 / I) for o in occ], 'status': status}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[336, 344], [10, 326], [5, 7], [370, 373]], 'max_presence': 100, 'no_activity': 240}, {'counts': [2, 0, 0, 0, 0], 'occ_pct': [73, 100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[-19, -16]], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[89, 90], [67, 72], [123, 126], [-14, -9], [26, 34]], 'max_presence': 100, 'no_activity': 600}, {'counts': [1, 0, 2, 0, 1], 'occ_pct': [13, 13, 20, 0, 10], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[-5, 0], [39, 47], [68, 71], [75, 83], [88, 96], [111, 119], [121, 124], [126, 166]], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 1, 3, 1, 2], 'occ_pct': [0, 26, 43, 46, 90], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'})], [({'interval': 30, 'bins': 5, 'events': [[-16, -14], [26, 66], [101, 102], [103, 104], [112, 115]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 0, 0, 3, 0], 'occ_pct': [13, 100, 20, 16, 0], 'status': 'ok'}), ({'interval': 120, 'bins': 4, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 3, 'events': [[-4, -3]], 'max_presence': 100, 'no_activity': 600}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 2, 'events': [[6, 14], [70, 110], [123, 126], [24, 64], [152, 153], [177, 179]], 'max_presence': 100, 'no_activity': 120}, {'counts': [3, 3], 'occ_pct': [73, 5], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[4, 6], [34, 74]], 'max_presence': 180, 'no_activity': 60}, {'counts': [2, 0, 0, 0], 'occ_pct': [46, 23, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'})], [({'interval': 30, 'bins': 2, 'events': [[-20, 20]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [66, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[3, 6], [29, 37], [42, 43], [47, 344], [357, 359], [392, 395], [426, 427], [436, 438]], 'max_presence': 100, 'no_activity': 240}, {'counts': [4, 0, 0, 0], 'occ_pct': [41, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[-13, 230], [264, 265], [303, 306], [342, 350]], 'max_presence': 100, 'no_activity': 600}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [100, 100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 3, 'events': [], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [[-9, -4], [26, 27], [47, 55]], 'max_presence': 240, 'no_activity': 600}, {'counts': [2, 0], 'occ_pct': [15, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 4, 'events': [[-18, -15]], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [], 'max_presence': 240, 'no_activity': 600}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[-10, -2], [26, 28], [54, 56], [73, 367], [392, 400], [406, 407], [439, 444]], 'max_presence': 240, 'no_activity': 120}, {'counts': [1, 1, 1, 0], 'occ_pct': [6, 6, 56, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 5, 'events': [[10, 12], [52, 57], [59, 62], [69, 77]], 'max_presence': 180, 'no_activity': 600}, {'counts': [4, 0, 0, 0, 0], 'occ_pct': [15, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 3, 'events': [[-15, -10], [24, 380], [410, 415], [455, 495], [511, 516]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0], 'occ_pct': [20, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-3, 0], [13, 18]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 0, 0], 'occ_pct': [8, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [[-19, 129], [148, 253], [263, 268], [288, 607], [646, 647]], 'max_presence': 180, 'no_activity': 60}, {'counts': [0, 0], 'occ_pct': [100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 3, 'events': [[9, 14], [39, 41], [57, 97], [104, 144], [177, 182]], 'max_presence': 100, 'no_activity': 240}, {'counts': [4, 1, 0], 'occ_pct': [52, 24, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[86, 88], [118, 121], [148, 150], [167, 169], [9, 49]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 0, 1, 1, 1], 'occ_pct': [70, 63, 6, 6, 10], 'status': 'ok'})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, solve(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":"494b89c1297ba09a72b0a624913dc397d7c90d386790ec82b9e926ebb06c3b1d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    I = x['interval']\n    B = x['bins']\n    counts = [0] * B\n    occ = [0] * B\n    status = 'ok'\n    for on, off in sorted(x['events']):\n        b = on // I\n        if 0 <= b < B:\n            counts[b] += 1\n        if off - on >= x['max_presence']:\n            status = 'stuck-on'\n        for k in range(B):\n            lo, hi = k * I, (k + 1) * I\n            occ[k] += max(0, min(off, hi) - max(on, lo))\n    if not x['events'] and B * I >= x['no_activity']:\n        status = 'no-activity'\n    return {'counts': counts, 'occ_pct': [o // I * 100 for o in occ], 'status': status}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[336, 344], [10, 326], [5, 7], [370, 373]], 'max_presence': 100, 'no_activity': 240}, {'counts': [2, 0, 0, 0, 0], 'occ_pct': [73, 100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[-19, -16]], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[89, 90], [67, 72], [123, 126], [-14, -9], [26, 34]], 'max_presence': 100, 'no_activity': 600}, {'counts': [1, 0, 2, 0, 1], 'occ_pct': [13, 13, 20, 0, 10], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[-5, 0], [39, 47], [68, 71], [75, 83], [88, 96], [111, 119], [121, 124], [126, 166]], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 1, 3, 1, 2], 'occ_pct': [0, 26, 43, 46, 90], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'})], [({'interval': 30, 'bins': 5, 'events': [[-16, -14], [26, 66], [101, 102], [103, 104], [112, 115]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 0, 0, 3, 0], 'occ_pct': [13, 100, 20, 16, 0], 'status': 'ok'}), ({'interval': 120, 'bins': 4, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 3, 'events': [[-4, -3]], 'max_presence': 100, 'no_activity': 600}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 2, 'events': [[6, 14], [70, 110], [123, 126], [24, 64], [152, 153], [177, 179]], 'max_presence': 100, 'no_activity': 120}, {'counts': [3, 3], 'occ_pct': [73, 5], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[4, 6], [34, 74]], 'max_presence': 180, 'no_activity': 60}, {'counts': [2, 0, 0, 0], 'occ_pct': [46, 23, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'})], [({'interval': 30, 'bins': 2, 'events': [[-20, 20]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [66, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[3, 6], [29, 37], [42, 43], [47, 344], [357, 359], [392, 395], [426, 427], [436, 438]], 'max_presence': 100, 'no_activity': 240}, {'counts': [4, 0, 0, 0], 'occ_pct': [41, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[-13, 230], [264, 265], [303, 306], [342, 350]], 'max_presence': 100, 'no_activity': 600}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [100, 100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 3, 'events': [], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [[-9, -4], [26, 27], [47, 55]], 'max_presence': 240, 'no_activity': 600}, {'counts': [2, 0], 'occ_pct': [15, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 4, 'events': [[-18, -15]], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [], 'max_presence': 240, 'no_activity': 600}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[-10, -2], [26, 28], [54, 56], [73, 367], [392, 400], [406, 407], [439, 444]], 'max_presence': 240, 'no_activity': 120}, {'counts': [1, 1, 1, 0], 'occ_pct': [6, 6, 56, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 5, 'events': [[10, 12], [52, 57], [59, 62], [69, 77]], 'max_presence': 180, 'no_activity': 600}, {'counts': [4, 0, 0, 0, 0], 'occ_pct': [15, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 3, 'events': [[-15, -10], [24, 380], [410, 415], [455, 495], [511, 516]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0], 'occ_pct': [20, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-3, 0], [13, 18]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 0, 0], 'occ_pct': [8, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [[-19, 129], [148, 253], [263, 268], [288, 607], [646, 647]], 'max_presence': 180, 'no_activity': 60}, {'counts': [0, 0], 'occ_pct': [100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 3, 'events': [[9, 14], [39, 41], [57, 97], [104, 144], [177, 182]], 'max_presence': 100, 'no_activity': 240}, {'counts': [4, 1, 0], 'occ_pct': [52, 24, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[86, 88], [118, 121], [148, 150], [167, 169], [9, 49]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 0, 1, 1, 1], 'occ_pct': [70, 63, 6, 6, 10], 'status': 'ok'})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, solve(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":"1cf3e5a535a66013e857881ffa423a1b7f812acbeb5eb95399ced9141642375f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    I = x['interval']\n    B = x['bins']\n    counts = [0] * B\n    occ = [0] * B\n    status = 'ok'\n    for on, off in sorted(x['events']):\n        b = on // I\n        if 0 <= b < B:\n            counts[b] += 1\n        if off - on >= x['max_presence']:\n            status = 'stuck-on'\n        for k in range(B):\n            lo, hi = k * I, (k + 1) * I\n            occ[k] += max(0, min(off, hi) - max(on, lo))\n    if not x['events'] and B * I >= x['no_activity']:\n        status = 'no-activity'\n    return {'counts': counts, 'occ_pct': [o * 100 // I for o in occ], 'status': status}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[336, 344], [10, 326], [5, 7], [370, 373]], 'max_presence': 100, 'no_activity': 240}, {'counts': [2, 0, 0, 0, 0], 'occ_pct': [73, 100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[-19, -16]], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[89, 90], [67, 72], [123, 126], [-14, -9], [26, 34]], 'max_presence': 100, 'no_activity': 600}, {'counts': [1, 0, 2, 0, 1], 'occ_pct': [13, 13, 20, 0, 10], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[-5, 0], [39, 47], [68, 71], [75, 83], [88, 96], [111, 119], [121, 124], [126, 166]], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 1, 3, 1, 2], 'occ_pct': [0, 26, 43, 46, 90], 'status': 'ok'}), ({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'})], [({'interval': 30, 'bins': 5, 'events': [[-16, -14], [26, 66], [101, 102], [103, 104], [112, 115]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 0, 0, 3, 0], 'occ_pct': [13, 100, 20, 16, 0], 'status': 'ok'}), ({'interval': 120, 'bins': 4, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 3, 'events': [[-4, -3]], 'max_presence': 100, 'no_activity': 600}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 2, 'events': [[6, 14], [70, 110], [123, 126], [24, 64], [152, 153], [177, 179]], 'max_presence': 100, 'no_activity': 120}, {'counts': [3, 3], 'occ_pct': [73, 5], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[4, 6], [34, 74]], 'max_presence': 180, 'no_activity': 60}, {'counts': [2, 0, 0, 0], 'occ_pct': [46, 23, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'})], [({'interval': 30, 'bins': 2, 'events': [[-20, 20]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [66, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[3, 6], [29, 37], [42, 43], [47, 344], [357, 359], [392, 395], [426, 427], [436, 438]], 'max_presence': 100, 'no_activity': 240}, {'counts': [4, 0, 0, 0], 'occ_pct': [41, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 5, 'events': [[-13, 230], [264, 265], [303, 306], [342, 350]], 'max_presence': 100, 'no_activity': 600}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [100, 100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 3, 'events': [], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [[-9, -4], [26, 27], [47, 55]], 'max_presence': 240, 'no_activity': 600}, {'counts': [2, 0], 'occ_pct': [15, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 4, 'events': [[-18, -15]], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [], 'max_presence': 240, 'no_activity': 600}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[-10, -2], [26, 28], [54, 56], [73, 367], [392, 400], [406, 407], [439, 444]], 'max_presence': 240, 'no_activity': 120}, {'counts': [1, 1, 1, 0], 'occ_pct': [6, 6, 56, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 5, 'events': [[10, 12], [52, 57], [59, 62], [69, 77]], 'max_presence': 180, 'no_activity': 600}, {'counts': [4, 0, 0, 0, 0], 'occ_pct': [15, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 3, 'events': [[-15, -10], [24, 380], [410, 415], [455, 495], [511, 516]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0], 'occ_pct': [20, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-3, 0], [13, 18]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 0, 0], 'occ_pct': [8, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [[-19, 129], [148, 253], [263, 268], [288, 607], [646, 647]], 'max_presence': 180, 'no_activity': 60}, {'counts': [0, 0], 'occ_pct': [100, 100], 'status': 'stuck-on'}), ({'interval': 120, 'bins': 3, 'events': [[9, 14], [39, 41], [57, 97], [104, 144], [177, 182]], 'max_presence': 100, 'no_activity': 240}, {'counts': [4, 1, 0], 'occ_pct': [52, 24, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 5, 'events': [[86, 88], [118, 121], [148, 150], [167, 169], [9, 49]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 0, 1, 1, 1], 'occ_pct': [70, 63, 6, 6, 10], 'status': 'ok'})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, solve(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":"A deterministic, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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-traffic_signal_timing_plans-detector-bins-pct-rounding","generated_at":"2026-09-29T14:48:00.409147+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Signal timing arithmetic is exact and integer or rational; a wrong rule silently produces unsafe or inefficient timing plans.","repair":"Restore the occupancy percent rule so that the step reads `o * 100 // I`.","root_cause":"Dividing before scaling makes every partially occupied bin 0 percent.","sha256":"63495eaa974fe94b2ae6e78ad97f00f34a13880a1c212acd255a3da934e51f01","title":"Loop detector count and occupancy binning: occupancy percent is scaled after integer division · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.138,"exit_code":1,"observations":[{"actual":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"check":"timing oracle 0","expected":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,1],"occ_pct":[8,7],"status":"ok"},"check":"timing oracle 1","expected":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"passed":false},{"actual":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"check":"timing oracle 2","expected":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"passed":true},{"actual":{"counts":[2,0,0,0,0],"occ_pct":[73,100,100,100,100],"status":"stuck-on"},"check":"timing oracle 3","expected":{"counts":[2,0,0,0,0],"occ_pct":[73,100,100,100,100],"status":"stuck-on"},"passed":true},{"actual":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"ok"},"check":"timing oracle 4","expected":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"ok"},"passed":true},{"actual":{"counts":[1,0,2,0,1],"occ_pct":[13,13,20,0,10],"status":"ok"},"check":"timing oracle 5","expected":{"counts":[1,0,2,0,1],"occ_pct":[13,13,20,0,10],"status":"ok"},"passed":true},{"actual":{"counts":[0,1,3,1,2],"occ_pct":[0,27,43,47,90],"status":"ok"},"check":"timing oracle 6","expected":{"counts":[0,1,3,1,2],"occ_pct":[0,26,43,46,90],"status":"ok"},"passed":false},{"actual":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"no-activity"},"check":"timing oracle 7","expected":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"no-activity"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"counts\": [1, 1], \"occ_pct\": [8, 7], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 2\", \"actual\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [73, 100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [73, 100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 4\", \"actual\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 5\", \"actual\": {\"counts\": [1, 0, 2, 0, 1], \"occ_pct\": [13, 13, 20, 0, 10], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 0, 2, 0, 1], \"occ_pct\": [13, 13, 20, 0, 10], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 6\", \"actual\": {\"counts\": [0, 1, 3, 1, 2], \"occ_pct\": [0, 27, 43, 47, 90], \"status\": \"ok\"}, \"expected\": {\"counts\": [0, 1, 3, 1, 2], \"occ_pct\": [0, 26, 43, 46, 90], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 7\", \"actual\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.679,"exit_code":1,"observations":[{"actual":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"check":"timing oracle 0","expected":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,1],"occ_pct":[0,0],"status":"ok"},"check":"timing oracle 1","expected":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"passed":false},{"actual":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"check":"timing oracle 2","expected":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"passed":true},{"actual":{"counts":[2,0,0,0,0],"occ_pct":[0,100,100,100,100],"status":"stuck-on"},"check":"timing oracle 3","expected":{"counts":[2,0,0,0,0],"occ_pct":[73,100,100,100,100],"status":"stuck-on"},"passed":false},{"actual":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"ok"},"check":"timing oracle 4","expected":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"ok"},"passed":true},{"actual":{"counts":[1,0,2,0,1],"occ_pct":[0,0,0,0,0],"status":"ok"},"check":"timing oracle 5","expected":{"counts":[1,0,2,0,1],"occ_pct":[13,13,20,0,10],"status":"ok"},"passed":false},{"actual":{"counts":[0,1,3,1,2],"occ_pct":[0,0,0,0,0],"status":"ok"},"check":"timing oracle 6","expected":{"counts":[0,1,3,1,2],"occ_pct":[0,26,43,46,90],"status":"ok"},"passed":false},{"actual":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"no-activity"},"check":"timing oracle 7","expected":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"no-activity"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"counts\": [1, 1], \"occ_pct\": [0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 2\", \"actual\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [0, 100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [73, 100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": false}, {\"check\": \"timing oracle 4\", \"actual\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 5\", \"actual\": {\"counts\": [1, 0, 2, 0, 1], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 0, 2, 0, 1], \"occ_pct\": [13, 13, 20, 0, 10], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 6\", \"actual\": {\"counts\": [0, 1, 3, 1, 2], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [0, 1, 3, 1, 2], \"occ_pct\": [0, 26, 43, 46, 90], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 7\", \"actual\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.076,"exit_code":0,"observations":[{"actual":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"check":"timing oracle 0","expected":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"check":"timing oracle 1","expected":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"passed":true},{"actual":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"check":"timing oracle 2","expected":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"passed":true},{"actual":{"counts":[2,0,0,0,0],"occ_pct":[73,100,100,100,100],"status":"stuck-on"},"check":"timing oracle 3","expected":{"counts":[2,0,0,0,0],"occ_pct":[73,100,100,100,100],"status":"stuck-on"},"passed":true},{"actual":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"ok"},"check":"timing oracle 4","expected":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"ok"},"passed":true},{"actual":{"counts":[1,0,2,0,1],"occ_pct":[13,13,20,0,10],"status":"ok"},"check":"timing oracle 5","expected":{"counts":[1,0,2,0,1],"occ_pct":[13,13,20,0,10],"status":"ok"},"passed":true},{"actual":{"counts":[0,1,3,1,2],"occ_pct":[0,26,43,46,90],"status":"ok"},"check":"timing oracle 6","expected":{"counts":[0,1,3,1,2],"occ_pct":[0,26,43,46,90],"status":"ok"},"passed":true},{"actual":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"no-activity"},"check":"timing oracle 7","expected":{"counts":[0,0,0,0,0],"occ_pct":[0,0,0,0,0],"status":"no-activity"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 2\", \"actual\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [73, 100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [73, 100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 4\", \"actual\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 5\", \"actual\": {\"counts\": [1, 0, 2, 0, 1], \"occ_pct\": [13, 13, 20, 0, 10], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 0, 2, 0, 1], \"occ_pct\": [13, 13, 20, 0, 10], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 6\", \"actual\": {\"counts\": [0, 1, 3, 1, 2], \"occ_pct\": [0, 26, 43, 46, 90], \"status\": \"ok\"}, \"expected\": {\"counts\": [0, 1, 3, 1, 2], \"occ_pct\": [0, 26, 43, 46, 90], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 7\", \"actual\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}