{"abstract":"\"Twenty-First\" becomes \"21TH\".","category":"Postal address normalization","checks":10,"contract":"Uppercase, turn hyphens into spaces and split. A tens word (TWENTY, THIRTY, FORTY) immediately followed by a unit ordinal (FIRST..NINTH) forms one number; unit ordinals and TENTH..THIRTEENTH stand alone; digit tokens ending in ST/ND/RD/TH are re-suffixed. Each number is written with the suffix TH for values ending 11-13 (mod 100), else ST/ND/RD for final digits 1/2/3, else TH. Other tokens pass through.","evaluation_group":"w2-postal-address-normalization-ordinal-street","failed_approach":"Indexing with n % 100 still misses 21, 22 and 23.","family":"w2-postal-address-normalization-ordinal-street-final-digit-key","id":"FA-96121","implementations":{"attempt":{"sha256":"8eae066ff7a67d0b3bc7123ee6f7190883651726799f164b8434253948acf77f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    UNITS = {'FIRST': 1, 'SECOND': 2, 'THIRD': 3, 'FOURTH': 4, 'FIFTH': 5, 'SIXTH': 6, 'SEVENTH': 7,\n             'EIGHTH': 8, 'NINTH': 9}\n    TEENS = {'TENTH': 10, 'ELEVENTH': 11, 'TWELFTH': 12, 'THIRTEENTH': 13}\n    TENS = {'TWENTY': 20, 'THIRTY': 30, 'FORTY': 40}\n    def suffix(n):\n        if n % 100 in (11, 12, 13):\n            return 'TH'\n        return {1: 'ST', 2: 'ND', 3: 'RD'}.get(n % 100, 'TH')\n    t = x.upper().replace('-', ' ').split()\n    out, i = [], 0\n    while i < len(t):\n        w = t[i]\n        if w in TENS and i + 1 < len(t) and t[i + 1] in UNITS:\n            n = TENS[w] + UNITS[t[i + 1]]\n            i += 2\n        elif w in UNITS or w in TEENS:\n            n = UNITS.get(w) or TEENS[w]\n            i += 1\n        elif w[:-2].isdigit() and w[-2:] in ('ST', 'ND', 'RD', 'TH'):\n            n = int(w[:-2])\n            i += 1\n        else:\n            out.append(w)\n            i += 1\n            continue\n        out.append(str(n) + suffix(n))\n    return ' '.join(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['hyphenated compound ordinal', 'Twenty-First AVE', '21ST AVE'], ['spaced compound ordinal', 'THIRTY SECOND AVE', '32ND AVE'], ['spaced compound followed by suffix', 'TWENTY THIRD AVE NORTH', '23RD AVE NORTH'], ['eleventh', 'ELEVENTH AVE', '11TH AVE'], ['thirteenth', 'THIRTEENTH AVE', '13TH AVE'], ['three-digit teen ordinal', '111TH AVE', '111TH AVE'], ['numeric ordinal with wrong suffix', '2ST AVE', '2ND AVE'], ['numeric ordinal with another wrong suffix', '43ND AVE', '43RD AVE'], ['simple ordinal', 'THIRD AVE', '3RD AVE'], ['tens word not followed by a unit is a name', 'FORTY OAKS AVE', 'FORTY OAKS AVE']], [['hyphenated compound ordinal', 'Twenty-First ST', '21ST ST'], ['spaced compound ordinal', 'THIRTY SECOND ST', '32ND ST'], ['spaced compound followed by suffix', 'TWENTY THIRD ST NORTH', '23RD ST NORTH'], ['eleventh', 'ELEVENTH ST', '11TH ST'], ['thirteenth', 'THIRTEENTH ST', '13TH ST'], ['three-digit teen ordinal', '211TH ST', '211TH ST'], ['numeric ordinal with wrong suffix', '2ST ST', '2ND ST'], ['numeric ordinal with another wrong suffix', '43ND ST', '43RD ST'], ['simple ordinal', 'THIRD ST', '3RD ST'], ['tens word not followed by a unit is a name', 'FORTY OAKS ST', 'FORTY OAKS ST']], [['hyphenated compound ordinal', 'Twenty-First PL', '21ST PL'], ['spaced compound ordinal', 'THIRTY SECOND PL', '32ND PL'], ['spaced compound followed by suffix', 'TWENTY THIRD PL NORTH', '23RD PL NORTH'], ['eleventh', 'ELEVENTH PL', '11TH PL'], ['thirteenth', 'THIRTEENTH PL', '13TH PL'], ['three-digit teen ordinal', '311TH PL', '311TH PL'], ['numeric ordinal with wrong suffix', '2ST PL', '2ND PL'], ['numeric ordinal with another wrong suffix', '43ND PL', '43RD PL'], ['simple ordinal', 'THIRD PL', '3RD PL'], ['tens word not followed by a unit is a name', 'FORTY OAKS PL', 'FORTY OAKS PL']], [['hyphenated compound ordinal', 'Twenty-First CT', '21ST CT'], ['spaced compound ordinal', 'THIRTY SECOND CT', '32ND CT'], ['spaced compound followed by suffix', 'TWENTY THIRD CT NORTH', '23RD CT NORTH'], ['eleventh', 'ELEVENTH CT', '11TH CT'], ['thirteenth', 'THIRTEENTH CT', '13TH CT'], ['three-digit teen ordinal', '411TH CT', '411TH CT'], ['numeric ordinal with wrong suffix', '2ST CT', '2ND CT'], ['numeric ordinal with another wrong suffix', '43ND CT', '43RD CT'], ['simple ordinal', 'THIRD CT', '3RD CT'], ['tens word not followed by a unit is a name', 'FORTY OAKS CT', 'FORTY OAKS CT']], [['hyphenated compound ordinal', 'Twenty-First LN', '21ST LN'], ['spaced compound ordinal', 'THIRTY SECOND LN', '32ND LN'], ['spaced compound followed by suffix', 'TWENTY THIRD LN NORTH', '23RD LN NORTH'], ['eleventh', 'ELEVENTH LN', '11TH LN'], ['thirteenth', 'THIRTEENTH LN', '13TH LN'], ['three-digit teen ordinal', '511TH LN', '511TH LN'], ['numeric ordinal with wrong suffix', '2ST LN', '2ND LN'], ['numeric ordinal with another wrong suffix', '43ND LN', '43RD LN'], ['simple ordinal', 'THIRD LN', '3RD LN'], ['tens word not followed by a unit is a name', 'FORTY OAKS LN', 'FORTY OAKS LN']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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":"a6d7bf57405d489479221085365e8c6aa40411af9414c8a520d3ad68ac694512","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    UNITS = {'FIRST': 1, 'SECOND': 2, 'THIRD': 3, 'FOURTH': 4, 'FIFTH': 5, 'SIXTH': 6, 'SEVENTH': 7,\n             'EIGHTH': 8, 'NINTH': 9}\n    TEENS = {'TENTH': 10, 'ELEVENTH': 11, 'TWELFTH': 12, 'THIRTEENTH': 13}\n    TENS = {'TWENTY': 20, 'THIRTY': 30, 'FORTY': 40}\n    def suffix(n):\n        if n % 100 in (11, 12, 13):\n            return 'TH'\n        return {1: 'ST', 2: 'ND', 3: 'RD'}.get(n, 'TH')\n    t = x.upper().replace('-', ' ').split()\n    out, i = [], 0\n    while i < len(t):\n        w = t[i]\n        if w in TENS and i + 1 < len(t) and t[i + 1] in UNITS:\n            n = TENS[w] + UNITS[t[i + 1]]\n            i += 2\n        elif w in UNITS or w in TEENS:\n            n = UNITS.get(w) or TEENS[w]\n            i += 1\n        elif w[:-2].isdigit() and w[-2:] in ('ST', 'ND', 'RD', 'TH'):\n            n = int(w[:-2])\n            i += 1\n        else:\n            out.append(w)\n            i += 1\n            continue\n        out.append(str(n) + suffix(n))\n    return ' '.join(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['hyphenated compound ordinal', 'Twenty-First AVE', '21ST AVE'], ['spaced compound ordinal', 'THIRTY SECOND AVE', '32ND AVE'], ['spaced compound followed by suffix', 'TWENTY THIRD AVE NORTH', '23RD AVE NORTH'], ['eleventh', 'ELEVENTH AVE', '11TH AVE'], ['thirteenth', 'THIRTEENTH AVE', '13TH AVE'], ['three-digit teen ordinal', '111TH AVE', '111TH AVE'], ['numeric ordinal with wrong suffix', '2ST AVE', '2ND AVE'], ['numeric ordinal with another wrong suffix', '43ND AVE', '43RD AVE'], ['simple ordinal', 'THIRD AVE', '3RD AVE'], ['tens word not followed by a unit is a name', 'FORTY OAKS AVE', 'FORTY OAKS AVE']], [['hyphenated compound ordinal', 'Twenty-First ST', '21ST ST'], ['spaced compound ordinal', 'THIRTY SECOND ST', '32ND ST'], ['spaced compound followed by suffix', 'TWENTY THIRD ST NORTH', '23RD ST NORTH'], ['eleventh', 'ELEVENTH ST', '11TH ST'], ['thirteenth', 'THIRTEENTH ST', '13TH ST'], ['three-digit teen ordinal', '211TH ST', '211TH ST'], ['numeric ordinal with wrong suffix', '2ST ST', '2ND ST'], ['numeric ordinal with another wrong suffix', '43ND ST', '43RD ST'], ['simple ordinal', 'THIRD ST', '3RD ST'], ['tens word not followed by a unit is a name', 'FORTY OAKS ST', 'FORTY OAKS ST']], [['hyphenated compound ordinal', 'Twenty-First PL', '21ST PL'], ['spaced compound ordinal', 'THIRTY SECOND PL', '32ND PL'], ['spaced compound followed by suffix', 'TWENTY THIRD PL NORTH', '23RD PL NORTH'], ['eleventh', 'ELEVENTH PL', '11TH PL'], ['thirteenth', 'THIRTEENTH PL', '13TH PL'], ['three-digit teen ordinal', '311TH PL', '311TH PL'], ['numeric ordinal with wrong suffix', '2ST PL', '2ND PL'], ['numeric ordinal with another wrong suffix', '43ND PL', '43RD PL'], ['simple ordinal', 'THIRD PL', '3RD PL'], ['tens word not followed by a unit is a name', 'FORTY OAKS PL', 'FORTY OAKS PL']], [['hyphenated compound ordinal', 'Twenty-First CT', '21ST CT'], ['spaced compound ordinal', 'THIRTY SECOND CT', '32ND CT'], ['spaced compound followed by suffix', 'TWENTY THIRD CT NORTH', '23RD CT NORTH'], ['eleventh', 'ELEVENTH CT', '11TH CT'], ['thirteenth', 'THIRTEENTH CT', '13TH CT'], ['three-digit teen ordinal', '411TH CT', '411TH CT'], ['numeric ordinal with wrong suffix', '2ST CT', '2ND CT'], ['numeric ordinal with another wrong suffix', '43ND CT', '43RD CT'], ['simple ordinal', 'THIRD CT', '3RD CT'], ['tens word not followed by a unit is a name', 'FORTY OAKS CT', 'FORTY OAKS CT']], [['hyphenated compound ordinal', 'Twenty-First LN', '21ST LN'], ['spaced compound ordinal', 'THIRTY SECOND LN', '32ND LN'], ['spaced compound followed by suffix', 'TWENTY THIRD LN NORTH', '23RD LN NORTH'], ['eleventh', 'ELEVENTH LN', '11TH LN'], ['thirteenth', 'THIRTEENTH LN', '13TH LN'], ['three-digit teen ordinal', '511TH LN', '511TH LN'], ['numeric ordinal with wrong suffix', '2ST LN', '2ND LN'], ['numeric ordinal with another wrong suffix', '43ND LN', '43RD LN'], ['simple ordinal', 'THIRD LN', '3RD LN'], ['tens word not followed by a unit is a name', 'FORTY OAKS LN', 'FORTY OAKS LN']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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":"a6ccec3922b4c3ec9439f3274f48425c134f5c9d504c800b9e455025a7b9921b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    UNITS = {'FIRST': 1, 'SECOND': 2, 'THIRD': 3, 'FOURTH': 4, 'FIFTH': 5, 'SIXTH': 6, 'SEVENTH': 7,\n             'EIGHTH': 8, 'NINTH': 9}\n    TEENS = {'TENTH': 10, 'ELEVENTH': 11, 'TWELFTH': 12, 'THIRTEENTH': 13}\n    TENS = {'TWENTY': 20, 'THIRTY': 30, 'FORTY': 40}\n    def suffix(n):\n        if n % 100 in (11, 12, 13):\n            return 'TH'\n        return {1: 'ST', 2: 'ND', 3: 'RD'}.get(n % 10, 'TH')\n    t = x.upper().replace('-', ' ').split()\n    out, i = [], 0\n    while i < len(t):\n        w = t[i]\n        if w in TENS and i + 1 < len(t) and t[i + 1] in UNITS:\n            n = TENS[w] + UNITS[t[i + 1]]\n            i += 2\n        elif w in UNITS or w in TEENS:\n            n = UNITS.get(w) or TEENS[w]\n            i += 1\n        elif w[:-2].isdigit() and w[-2:] in ('ST', 'ND', 'RD', 'TH'):\n            n = int(w[:-2])\n            i += 1\n        else:\n            out.append(w)\n            i += 1\n            continue\n        out.append(str(n) + suffix(n))\n    return ' '.join(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['hyphenated compound ordinal', 'Twenty-First AVE', '21ST AVE'], ['spaced compound ordinal', 'THIRTY SECOND AVE', '32ND AVE'], ['spaced compound followed by suffix', 'TWENTY THIRD AVE NORTH', '23RD AVE NORTH'], ['eleventh', 'ELEVENTH AVE', '11TH AVE'], ['thirteenth', 'THIRTEENTH AVE', '13TH AVE'], ['three-digit teen ordinal', '111TH AVE', '111TH AVE'], ['numeric ordinal with wrong suffix', '2ST AVE', '2ND AVE'], ['numeric ordinal with another wrong suffix', '43ND AVE', '43RD AVE'], ['simple ordinal', 'THIRD AVE', '3RD AVE'], ['tens word not followed by a unit is a name', 'FORTY OAKS AVE', 'FORTY OAKS AVE']], [['hyphenated compound ordinal', 'Twenty-First ST', '21ST ST'], ['spaced compound ordinal', 'THIRTY SECOND ST', '32ND ST'], ['spaced compound followed by suffix', 'TWENTY THIRD ST NORTH', '23RD ST NORTH'], ['eleventh', 'ELEVENTH ST', '11TH ST'], ['thirteenth', 'THIRTEENTH ST', '13TH ST'], ['three-digit teen ordinal', '211TH ST', '211TH ST'], ['numeric ordinal with wrong suffix', '2ST ST', '2ND ST'], ['numeric ordinal with another wrong suffix', '43ND ST', '43RD ST'], ['simple ordinal', 'THIRD ST', '3RD ST'], ['tens word not followed by a unit is a name', 'FORTY OAKS ST', 'FORTY OAKS ST']], [['hyphenated compound ordinal', 'Twenty-First PL', '21ST PL'], ['spaced compound ordinal', 'THIRTY SECOND PL', '32ND PL'], ['spaced compound followed by suffix', 'TWENTY THIRD PL NORTH', '23RD PL NORTH'], ['eleventh', 'ELEVENTH PL', '11TH PL'], ['thirteenth', 'THIRTEENTH PL', '13TH PL'], ['three-digit teen ordinal', '311TH PL', '311TH PL'], ['numeric ordinal with wrong suffix', '2ST PL', '2ND PL'], ['numeric ordinal with another wrong suffix', '43ND PL', '43RD PL'], ['simple ordinal', 'THIRD PL', '3RD PL'], ['tens word not followed by a unit is a name', 'FORTY OAKS PL', 'FORTY OAKS PL']], [['hyphenated compound ordinal', 'Twenty-First CT', '21ST CT'], ['spaced compound ordinal', 'THIRTY SECOND CT', '32ND CT'], ['spaced compound followed by suffix', 'TWENTY THIRD CT NORTH', '23RD CT NORTH'], ['eleventh', 'ELEVENTH CT', '11TH CT'], ['thirteenth', 'THIRTEENTH CT', '13TH CT'], ['three-digit teen ordinal', '411TH CT', '411TH CT'], ['numeric ordinal with wrong suffix', '2ST CT', '2ND CT'], ['numeric ordinal with another wrong suffix', '43ND CT', '43RD CT'], ['simple ordinal', 'THIRD CT', '3RD CT'], ['tens word not followed by a unit is a name', 'FORTY OAKS CT', 'FORTY OAKS CT']], [['hyphenated compound ordinal', 'Twenty-First LN', '21ST LN'], ['spaced compound ordinal', 'THIRTY SECOND LN', '32ND LN'], ['spaced compound followed by suffix', 'TWENTY THIRD LN NORTH', '23RD LN NORTH'], ['eleventh', 'ELEVENTH LN', '11TH LN'], ['thirteenth', 'THIRTEENTH LN', '13TH LN'], ['three-digit teen ordinal', '511TH LN', '511TH LN'], ['numeric ordinal with wrong suffix', '2ST LN', '2ND LN'], ['numeric ordinal with another wrong suffix', '43ND LN', '43RD LN'], ['simple ordinal', 'THIRD LN', '3RD LN'], ['tens word not followed by a unit is a name', 'FORTY OAKS LN', 'FORTY OAKS LN']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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 contract over synthetic, obviously fictitious addresses. The rules are stipulated for this model only and make no claim of conformance with any postal authority 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-postal-address-normalization-ordinal-street-final-digit-key","generated_at":"2026-09-29T14:52:19.971669+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"\"Twenty-First Ave\" and \"21st Ave\" must produce the same key or two addresses for one building never match.","repair":"Index the table with n % 10.","root_cause":"The ST/ND/RD table is indexed with n rather than its final digit.","sha256":"7d175e006e5228423fb801a0e958bfeffa366cd8d89ec9d7a08e1faf829beed7","title":"Ordinal street name normalizer: suffix lookup uses the whole number · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.655,"exit_code":1,"observations":[{"actual":"21TH AVE","check":"hyphenated compound ordinal","expected":"21ST AVE","passed":false},{"actual":"32TH AVE","check":"spaced compound ordinal","expected":"32ND AVE","passed":false},{"actual":"23TH AVE NORTH","check":"spaced compound followed by suffix","expected":"23RD AVE NORTH","passed":false},{"actual":"11TH AVE","check":"eleventh","expected":"11TH AVE","passed":true},{"actual":"13TH AVE","check":"thirteenth","expected":"13TH AVE","passed":true},{"actual":"111TH AVE","check":"three-digit teen ordinal","expected":"111TH AVE","passed":true},{"actual":"2ND AVE","check":"numeric ordinal with wrong suffix","expected":"2ND AVE","passed":true},{"actual":"43TH AVE","check":"numeric ordinal with another wrong suffix","expected":"43RD AVE","passed":false},{"actual":"3RD AVE","check":"simple ordinal","expected":"3RD AVE","passed":true},{"actual":"FORTY OAKS AVE","check":"tens word not followed by a unit is a name","expected":"FORTY OAKS AVE","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hyphenated compound ordinal\", \"actual\": \"21TH AVE\", \"expected\": \"21ST AVE\", \"passed\": false}, {\"check\": \"spaced compound ordinal\", \"actual\": \"32TH AVE\", \"expected\": \"32ND AVE\", \"passed\": false}, {\"check\": \"spaced compound followed by suffix\", \"actual\": \"23TH AVE NORTH\", \"expected\": \"23RD AVE NORTH\", \"passed\": false}, {\"check\": \"eleventh\", \"actual\": \"11TH AVE\", \"expected\": \"11TH AVE\", \"passed\": true}, {\"check\": \"thirteenth\", \"actual\": \"13TH AVE\", \"expected\": \"13TH AVE\", \"passed\": true}, {\"check\": \"three-digit teen ordinal\", \"actual\": \"111TH AVE\", \"expected\": \"111TH AVE\", \"passed\": true}, {\"check\": \"numeric ordinal with wrong suffix\", \"actual\": \"2ND AVE\", \"expected\": \"2ND AVE\", \"passed\": true}, {\"check\": \"numeric ordinal with another wrong suffix\", \"actual\": \"43TH AVE\", \"expected\": \"43RD AVE\", \"passed\": false}, {\"check\": \"simple ordinal\", \"actual\": \"3RD AVE\", \"expected\": \"3RD AVE\", \"passed\": true}, {\"check\": \"tens word not followed by a unit is a name\", \"actual\": \"FORTY OAKS AVE\", \"expected\": \"FORTY OAKS AVE\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.849,"exit_code":1,"observations":[{"actual":"21TH AVE","check":"hyphenated compound ordinal","expected":"21ST AVE","passed":false},{"actual":"32TH AVE","check":"spaced compound ordinal","expected":"32ND AVE","passed":false},{"actual":"23TH AVE NORTH","check":"spaced compound followed by suffix","expected":"23RD AVE NORTH","passed":false},{"actual":"11TH AVE","check":"eleventh","expected":"11TH AVE","passed":true},{"actual":"13TH AVE","check":"thirteenth","expected":"13TH AVE","passed":true},{"actual":"111TH AVE","check":"three-digit teen ordinal","expected":"111TH AVE","passed":true},{"actual":"2ND AVE","check":"numeric ordinal with wrong suffix","expected":"2ND AVE","passed":true},{"actual":"43TH AVE","check":"numeric ordinal with another wrong suffix","expected":"43RD AVE","passed":false},{"actual":"3RD AVE","check":"simple ordinal","expected":"3RD AVE","passed":true},{"actual":"FORTY OAKS AVE","check":"tens word not followed by a unit is a name","expected":"FORTY OAKS AVE","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hyphenated compound ordinal\", \"actual\": \"21TH AVE\", \"expected\": \"21ST AVE\", \"passed\": false}, {\"check\": \"spaced compound ordinal\", \"actual\": \"32TH AVE\", \"expected\": \"32ND AVE\", \"passed\": false}, {\"check\": \"spaced compound followed by suffix\", \"actual\": \"23TH AVE NORTH\", \"expected\": \"23RD AVE NORTH\", \"passed\": false}, {\"check\": \"eleventh\", \"actual\": \"11TH AVE\", \"expected\": \"11TH AVE\", \"passed\": true}, {\"check\": \"thirteenth\", \"actual\": \"13TH AVE\", \"expected\": \"13TH AVE\", \"passed\": true}, {\"check\": \"three-digit teen ordinal\", \"actual\": \"111TH AVE\", \"expected\": \"111TH AVE\", \"passed\": true}, {\"check\": \"numeric ordinal with wrong suffix\", \"actual\": \"2ND AVE\", \"expected\": \"2ND AVE\", \"passed\": true}, {\"check\": \"numeric ordinal with another wrong suffix\", \"actual\": \"43TH AVE\", \"expected\": \"43RD AVE\", \"passed\": false}, {\"check\": \"simple ordinal\", \"actual\": \"3RD AVE\", \"expected\": \"3RD AVE\", \"passed\": true}, {\"check\": \"tens word not followed by a unit is a name\", \"actual\": \"FORTY OAKS AVE\", \"expected\": \"FORTY OAKS AVE\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.273,"exit_code":0,"observations":[{"actual":"21ST AVE","check":"hyphenated compound ordinal","expected":"21ST AVE","passed":true},{"actual":"32ND AVE","check":"spaced compound ordinal","expected":"32ND AVE","passed":true},{"actual":"23RD AVE NORTH","check":"spaced compound followed by suffix","expected":"23RD AVE NORTH","passed":true},{"actual":"11TH AVE","check":"eleventh","expected":"11TH AVE","passed":true},{"actual":"13TH AVE","check":"thirteenth","expected":"13TH AVE","passed":true},{"actual":"111TH AVE","check":"three-digit teen ordinal","expected":"111TH AVE","passed":true},{"actual":"2ND AVE","check":"numeric ordinal with wrong suffix","expected":"2ND AVE","passed":true},{"actual":"43RD AVE","check":"numeric ordinal with another wrong suffix","expected":"43RD AVE","passed":true},{"actual":"3RD AVE","check":"simple ordinal","expected":"3RD AVE","passed":true},{"actual":"FORTY OAKS AVE","check":"tens word not followed by a unit is a name","expected":"FORTY OAKS AVE","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hyphenated compound ordinal\", \"actual\": \"21ST AVE\", \"expected\": \"21ST AVE\", \"passed\": true}, {\"check\": \"spaced compound ordinal\", \"actual\": \"32ND AVE\", \"expected\": \"32ND AVE\", \"passed\": true}, {\"check\": \"spaced compound followed by suffix\", \"actual\": \"23RD AVE NORTH\", \"expected\": \"23RD AVE NORTH\", \"passed\": true}, {\"check\": \"eleventh\", \"actual\": \"11TH AVE\", \"expected\": \"11TH AVE\", \"passed\": true}, {\"check\": \"thirteenth\", \"actual\": \"13TH AVE\", \"expected\": \"13TH AVE\", \"passed\": true}, {\"check\": \"three-digit teen ordinal\", \"actual\": \"111TH AVE\", \"expected\": \"111TH AVE\", \"passed\": true}, {\"check\": \"numeric ordinal with wrong suffix\", \"actual\": \"2ND AVE\", \"expected\": \"2ND AVE\", \"passed\": true}, {\"check\": \"numeric ordinal with another wrong suffix\", \"actual\": \"43RD AVE\", \"expected\": \"43RD AVE\", \"passed\": true}, {\"check\": \"simple ordinal\", \"actual\": \"3RD AVE\", \"expected\": \"3RD AVE\", \"passed\": true}, {\"check\": \"tens word not followed by a unit is a name\", \"actual\": \"FORTY OAKS AVE\", \"expected\": \"FORTY OAKS AVE\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}