{"abstract":"Highlights follow the logical range as if the line were unidirectional.","category":"Bidirectional text layout","checks":8,"contract":"Input [levels, anchor, focus]. The logical selection covers characters min..max-1. Each selected character occupies its unit visual slot (level reversal); merge adjacent slots into [x0, x1) rectangles sorted by x. Return the rectangles.","evaluation_group":"w2-bidirectional-text-layout-selection-highlight","failed_approach":"Indexing the visual order array with logical indices applies the wrong permutation direction.","family":"w2-bidirectional-text-layout-selection-highlight-logical-to-visual-mapping","id":"FA-80681","implementations":{"attempt":{"sha256":"7f2fa38ed1b0b88326cd113e8dde91832f76f72325dfce2b30d1a89ddb393fb5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def reorder(lv):\n        vis = list(range(len(lv)))\n        odd = [l for l in lv if l % 2 == 1]\n        if not odd:\n            return vis\n        for lev in range(max(lv), min(odd) - 1, -1):\n            i = 0\n            while i < len(vis):\n                if lv[vis[i]] >= lev:\n                    j = i\n                    while j < len(vis) and lv[vis[j]] >= lev:\n                        j += 1\n                    vis[i:j] = vis[i:j][::-1]\n                    i = j\n                else:\n                    i += 1\n        return vis\n    \n    levels, a, b = x\n    a, b = min(a, b), max(a, b)\n    vis = reorder(levels)\n    pos = [0] * len(levels)\n    for v, i in enumerate(vis):\n        pos[i] = v\n    sel = sorted(vis[i] for i in range(a, b))\n    rects = []\n    for p in sel:\n        if rects and rects[-1][1] == p:\n            rects[-1][1] = p + 1\n        else:\n            rects.append([p, p + 1])\n    return rects\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('regression: logical to visual mapping', [[4, 4, 2, 4, 1], 4, 2], [[3, 5]]), ('regression: logical to visual mapping', [[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1], 6, 3], [[5, 8]]), ('regression: logical to visual mapping', [[4, 4, 4, 1], 2, 3], [[3, 4]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3], 10, 10], []), ('control layout', [[3, 2, 2, 2, 2, 2], 2, 4], [[2, 4]]), ('control layout', [[2, 2, 3, 3, 2, 2, 0, 0], 8, 2], [[2, 8]])], [('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0], 12, 9], [[0, 2], [11, 12]]), ('regression: logical to visual mapping', [[1, 0, 1, 2, 2, 2, 3, 2, 1, 1, 3], 9, 4], [[4, 5], [6, 10]]), ('regression: logical to visual mapping', [[4, 4, 2, 2, 1, 1, 1, 1, 1, 1], 7, 0], [[3, 10]]), ('regression: logical to visual mapping', [[2, 2, 2, 2, 1, 1, 1], 0, 1], [[3, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[2, 3, 3, 3, 3, 3, 0, 0, 0, 2, 2], 6, 9], [[6, 9]]), ('control layout', [[2, 3, 3], 3, 3], [])], [('regression: logical to visual mapping', [[3, 3, 3, 3, 1], 4, 5], [[0, 1]]), ('regression: logical to visual mapping', [[1, 1, 1, 2], 3, 0], [[1, 4]]), ('regression: logical to visual mapping', [[1, 1, 1, 3, 2, 2, 2, 2, 4, 4], 2, 6], [[0, 3], [7, 8]]), ('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 1, 1, 1], 2, 1], [[4, 5]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('control layout', [[2, 2], 2, 1], [[1, 2]]), ('control layout', [[0, 0, 0, 0, 0, 1, 1, 1], 4, 2], [[2, 4]])], [('regression: logical to visual mapping', [[3, 3], 1, 0], [[1, 2]]), ('regression: logical to visual mapping', [[2, 2, 2, 1, 4, 4], 4, 3], [[2, 3]]), ('regression: logical to visual mapping', [[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1], 6, 3], [[5, 8]]), ('regression: logical to visual mapping', [[1, 4, 4, 4, 4, 4, 4, 1, 1, 2], 10, 5], [[0, 3], [7, 9]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('control layout', [[1, 0, 0, 1, 1], 2, 0], [[0, 2]]), ('control layout', [[2, 1, 1, 1, 1, 1, 4], 7, 0], [[0, 7]])], [('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 1, 1], 0, 3], [[2, 5]]), ('regression: logical to visual mapping', [[2, 4, 1, 1, 1, 1, 1], 6, 1], [[1, 5], [6, 7]]), ('regression: logical to visual mapping', [[4, 4, 4, 4, 4, 4, 1, 1, 1, 2, 2], 9, 1], [[2, 5], [6, 11]]), ('regression: logical to visual mapping', [[2, 1, 1, 1, 1, 1, 1, 1, 2, 4, 4], 7, 10], [[0, 2], [3, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[2, 2, 2, 2, 2, 4], 2, 0], [[0, 2]]), ('control layout', [[1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1], 10, 10], [])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, 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":"43e42d599ac3b2e6930d493b4c25df3e9c3afa338668bc4d884e30dd2e72e8b8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def reorder(lv):\n        vis = list(range(len(lv)))\n        odd = [l for l in lv if l % 2 == 1]\n        if not odd:\n            return vis\n        for lev in range(max(lv), min(odd) - 1, -1):\n            i = 0\n            while i < len(vis):\n                if lv[vis[i]] >= lev:\n                    j = i\n                    while j < len(vis) and lv[vis[j]] >= lev:\n                        j += 1\n                    vis[i:j] = vis[i:j][::-1]\n                    i = j\n                else:\n                    i += 1\n        return vis\n    \n    levels, a, b = x\n    a, b = min(a, b), max(a, b)\n    vis = reorder(levels)\n    pos = [0] * len(levels)\n    for v, i in enumerate(vis):\n        pos[i] = v\n    sel = list(range(a, b))\n    rects = []\n    for p in sel:\n        if rects and rects[-1][1] == p:\n            rects[-1][1] = p + 1\n        else:\n            rects.append([p, p + 1])\n    return rects\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('regression: logical to visual mapping', [[4, 4, 2, 4, 1], 4, 2], [[3, 5]]), ('regression: logical to visual mapping', [[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1], 6, 3], [[5, 8]]), ('regression: logical to visual mapping', [[4, 4, 4, 1], 2, 3], [[3, 4]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3], 10, 10], []), ('control layout', [[3, 2, 2, 2, 2, 2], 2, 4], [[2, 4]]), ('control layout', [[2, 2, 3, 3, 2, 2, 0, 0], 8, 2], [[2, 8]])], [('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0], 12, 9], [[0, 2], [11, 12]]), ('regression: logical to visual mapping', [[1, 0, 1, 2, 2, 2, 3, 2, 1, 1, 3], 9, 4], [[4, 5], [6, 10]]), ('regression: logical to visual mapping', [[4, 4, 2, 2, 1, 1, 1, 1, 1, 1], 7, 0], [[3, 10]]), ('regression: logical to visual mapping', [[2, 2, 2, 2, 1, 1, 1], 0, 1], [[3, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[2, 3, 3, 3, 3, 3, 0, 0, 0, 2, 2], 6, 9], [[6, 9]]), ('control layout', [[2, 3, 3], 3, 3], [])], [('regression: logical to visual mapping', [[3, 3, 3, 3, 1], 4, 5], [[0, 1]]), ('regression: logical to visual mapping', [[1, 1, 1, 2], 3, 0], [[1, 4]]), ('regression: logical to visual mapping', [[1, 1, 1, 3, 2, 2, 2, 2, 4, 4], 2, 6], [[0, 3], [7, 8]]), ('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 1, 1, 1], 2, 1], [[4, 5]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('control layout', [[2, 2], 2, 1], [[1, 2]]), ('control layout', [[0, 0, 0, 0, 0, 1, 1, 1], 4, 2], [[2, 4]])], [('regression: logical to visual mapping', [[3, 3], 1, 0], [[1, 2]]), ('regression: logical to visual mapping', [[2, 2, 2, 1, 4, 4], 4, 3], [[2, 3]]), ('regression: logical to visual mapping', [[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1], 6, 3], [[5, 8]]), ('regression: logical to visual mapping', [[1, 4, 4, 4, 4, 4, 4, 1, 1, 2], 10, 5], [[0, 3], [7, 9]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('control layout', [[1, 0, 0, 1, 1], 2, 0], [[0, 2]]), ('control layout', [[2, 1, 1, 1, 1, 1, 4], 7, 0], [[0, 7]])], [('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 1, 1], 0, 3], [[2, 5]]), ('regression: logical to visual mapping', [[2, 4, 1, 1, 1, 1, 1], 6, 1], [[1, 5], [6, 7]]), ('regression: logical to visual mapping', [[4, 4, 4, 4, 4, 4, 1, 1, 1, 2, 2], 9, 1], [[2, 5], [6, 11]]), ('regression: logical to visual mapping', [[2, 1, 1, 1, 1, 1, 1, 1, 2, 4, 4], 7, 10], [[0, 2], [3, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[2, 2, 2, 2, 2, 4], 2, 0], [[0, 2]]), ('control layout', [[1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1], 10, 10], [])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, 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":"894a1fbe187dcd3458054d70abb5e3fa86703e4e930450478e36089c832a0c8a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def reorder(lv):\n        vis = list(range(len(lv)))\n        odd = [l for l in lv if l % 2 == 1]\n        if not odd:\n            return vis\n        for lev in range(max(lv), min(odd) - 1, -1):\n            i = 0\n            while i < len(vis):\n                if lv[vis[i]] >= lev:\n                    j = i\n                    while j < len(vis) and lv[vis[j]] >= lev:\n                        j += 1\n                    vis[i:j] = vis[i:j][::-1]\n                    i = j\n                else:\n                    i += 1\n        return vis\n    \n    levels, a, b = x\n    a, b = min(a, b), max(a, b)\n    vis = reorder(levels)\n    pos = [0] * len(levels)\n    for v, i in enumerate(vis):\n        pos[i] = v\n    sel = sorted(pos[i] for i in range(a, b))\n    rects = []\n    for p in sel:\n        if rects and rects[-1][1] == p:\n            rects[-1][1] = p + 1\n        else:\n            rects.append([p, p + 1])\n    return rects\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('regression: logical to visual mapping', [[4, 4, 2, 4, 1], 4, 2], [[3, 5]]), ('regression: logical to visual mapping', [[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1], 6, 3], [[5, 8]]), ('regression: logical to visual mapping', [[4, 4, 4, 1], 2, 3], [[3, 4]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3], 10, 10], []), ('control layout', [[3, 2, 2, 2, 2, 2], 2, 4], [[2, 4]]), ('control layout', [[2, 2, 3, 3, 2, 2, 0, 0], 8, 2], [[2, 8]])], [('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0], 12, 9], [[0, 2], [11, 12]]), ('regression: logical to visual mapping', [[1, 0, 1, 2, 2, 2, 3, 2, 1, 1, 3], 9, 4], [[4, 5], [6, 10]]), ('regression: logical to visual mapping', [[4, 4, 2, 2, 1, 1, 1, 1, 1, 1], 7, 0], [[3, 10]]), ('regression: logical to visual mapping', [[2, 2, 2, 2, 1, 1, 1], 0, 1], [[3, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[2, 3, 3, 3, 3, 3, 0, 0, 0, 2, 2], 6, 9], [[6, 9]]), ('control layout', [[2, 3, 3], 3, 3], [])], [('regression: logical to visual mapping', [[3, 3, 3, 3, 1], 4, 5], [[0, 1]]), ('regression: logical to visual mapping', [[1, 1, 1, 2], 3, 0], [[1, 4]]), ('regression: logical to visual mapping', [[1, 1, 1, 3, 2, 2, 2, 2, 4, 4], 2, 6], [[0, 3], [7, 8]]), ('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 1, 1, 1], 2, 1], [[4, 5]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('control layout', [[2, 2], 2, 1], [[1, 2]]), ('control layout', [[0, 0, 0, 0, 0, 1, 1, 1], 4, 2], [[2, 4]])], [('regression: logical to visual mapping', [[3, 3], 1, 0], [[1, 2]]), ('regression: logical to visual mapping', [[2, 2, 2, 1, 4, 4], 4, 3], [[2, 3]]), ('regression: logical to visual mapping', [[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1], 6, 3], [[5, 8]]), ('regression: logical to visual mapping', [[1, 4, 4, 4, 4, 4, 4, 1, 1, 2], 10, 5], [[0, 3], [7, 9]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('control layout', [[1, 0, 0, 1, 1], 2, 0], [[0, 2]]), ('control layout', [[2, 1, 1, 1, 1, 1, 4], 7, 0], [[0, 7]])], [('regression: logical to visual mapping', [[2, 2, 2, 2, 2, 2, 1, 1], 0, 3], [[2, 5]]), ('regression: logical to visual mapping', [[2, 4, 1, 1, 1, 1, 1], 6, 1], [[1, 5], [6, 7]]), ('regression: logical to visual mapping', [[4, 4, 4, 4, 4, 4, 1, 1, 1, 2, 2], 9, 1], [[2, 5], [6, 11]]), ('regression: logical to visual mapping', [[2, 1, 1, 1, 1, 1, 1, 1, 2, 4, 4], 7, 10], [[0, 2], [3, 4]]), ('backward selection', [[1, 1, 1], 3, 1], [[0, 2]]), ('selection crossing direction change', [[0, 0, 1, 1, 0], 1, 4], [[1, 4]]), ('control layout', [[2, 2, 2, 2, 2, 4], 2, 0], [[0, 2]]), ('control layout', [[1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1], 10, 10], [])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, 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 toy bidi model over stipulated class labels and integer levels; it is inspired by, but does not claim conformance to, any published algorithm. 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-bidirectional-text-layout-selection-highlight-logical-to-visual-mapping","generated_at":"2026-09-29T14:49:56.122203+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Mixed right-to-left and left-to-right text must resolve levels and visual order exactly, or words, numbers and carets land in the wrong place.","repair":"Map each selected logical index through the visual position table.","root_cause":"The logical offsets are used directly as visual slots.","sha256":"df1afd9e63324bb5cce3de0a3e6a1c12b857d64adf2f193f558c102dcf7da674","title":"Bidi selection highlight: logical to visual mapping · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.561,"exit_code":1,"observations":[{"actual":[[0,2]],"check":"backward selection","expected":[[0,2]],"passed":true},{"actual":[[1,3]],"check":"regression: logical to visual mapping","expected":[[3,5]],"passed":false},{"actual":[[5,6],[8,10]],"check":"regression: logical to visual mapping","expected":[[5,8]],"passed":false},{"actual":[[1,2]],"check":"regression: logical to visual mapping","expected":[[3,4]],"passed":false},{"actual":[[1,4]],"check":"selection crossing direction change","expected":[[1,4]],"passed":true},{"actual":[],"check":"control layout","expected":[],"passed":true},{"actual":[[2,4]],"check":"control layout","expected":[[2,4]],"passed":true},{"actual":[[2,8]],"check":"control layout","expected":[[2,8]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"backward selection\", \"actual\": [[0, 2]], \"expected\": [[0, 2]], \"passed\": true}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[1, 3]], \"expected\": [[3, 5]], \"passed\": false}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[5, 6], [8, 10]], \"expected\": [[5, 8]], \"passed\": false}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[1, 2]], \"expected\": [[3, 4]], \"passed\": false}, {\"check\": \"selection crossing direction change\", \"actual\": [[1, 4]], \"expected\": [[1, 4]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[2, 4]], \"expected\": [[2, 4]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[2, 8]], \"expected\": [[2, 8]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.3,"exit_code":1,"observations":[{"actual":[[1,3]],"check":"backward selection","expected":[[0,2]],"passed":false},{"actual":[[2,4]],"check":"regression: logical to visual mapping","expected":[[3,5]],"passed":false},{"actual":[[3,6]],"check":"regression: logical to visual mapping","expected":[[5,8]],"passed":false},{"actual":[[2,3]],"check":"regression: logical to visual mapping","expected":[[3,4]],"passed":false},{"actual":[[1,4]],"check":"selection crossing direction change","expected":[[1,4]],"passed":true},{"actual":[],"check":"control layout","expected":[],"passed":true},{"actual":[[2,4]],"check":"control layout","expected":[[2,4]],"passed":true},{"actual":[[2,8]],"check":"control layout","expected":[[2,8]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"backward selection\", \"actual\": [[1, 3]], \"expected\": [[0, 2]], \"passed\": false}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[2, 4]], \"expected\": [[3, 5]], \"passed\": false}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[3, 6]], \"expected\": [[5, 8]], \"passed\": false}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[2, 3]], \"expected\": [[3, 4]], \"passed\": false}, {\"check\": \"selection crossing direction change\", \"actual\": [[1, 4]], \"expected\": [[1, 4]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[2, 4]], \"expected\": [[2, 4]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[2, 8]], \"expected\": [[2, 8]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.06,"exit_code":0,"observations":[{"actual":[[0,2]],"check":"backward selection","expected":[[0,2]],"passed":true},{"actual":[[3,5]],"check":"regression: logical to visual mapping","expected":[[3,5]],"passed":true},{"actual":[[5,8]],"check":"regression: logical to visual mapping","expected":[[5,8]],"passed":true},{"actual":[[3,4]],"check":"regression: logical to visual mapping","expected":[[3,4]],"passed":true},{"actual":[[1,4]],"check":"selection crossing direction change","expected":[[1,4]],"passed":true},{"actual":[],"check":"control layout","expected":[],"passed":true},{"actual":[[2,4]],"check":"control layout","expected":[[2,4]],"passed":true},{"actual":[[2,8]],"check":"control layout","expected":[[2,8]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"backward selection\", \"actual\": [[0, 2]], \"expected\": [[0, 2]], \"passed\": true}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[3, 5]], \"expected\": [[3, 5]], \"passed\": true}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[5, 8]], \"expected\": [[5, 8]], \"passed\": true}, {\"check\": \"regression: logical to visual mapping\", \"actual\": [[3, 4]], \"expected\": [[3, 4]], \"passed\": true}, {\"check\": \"selection crossing direction change\", \"actual\": [[1, 4]], \"expected\": [[1, 4]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[2, 4]], \"expected\": [[2, 4]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[2, 8]], \"expected\": [[2, 8]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}