| 1 | [ |
| 2 | {"id": "today", "input": "today", "now": "2026-08-28T10:30", "expected": "2026-08-28T09:00"}, |
| 3 | {"id": "tomorrow", "input": "tomorrow", "now": "2026-08-28T10:30", "expected": "2026-08-29T09:00"}, |
| 4 | {"id": "yesterday", "input": "yesterday", "now": "2026-08-28T10:30", "expected": "2026-08-27T09:00"}, |
| 5 | {"id": "case-insensitive", "input": " Tomorrow ", "now": "2026-08-28T10:30", "expected": "2026-08-29T09:00"}, |
| 6 | |
| 7 | {"id": "in-3-days", "input": "in 3 days", "now": "2026-08-28T10:30", "expected": "2026-08-31T09:00"}, |
| 8 | {"id": "in-2-weeks", "input": "in 2 weeks", "now": "2026-08-28T10:30", "expected": "2026-09-11T09:00"}, |
| 9 | {"id": "in-2-week-singular", "input": "in 2 week", "now": "2026-08-28T10:30", "expected": "2026-09-11T09:00"}, |
| 10 | {"id": "in-1-month", "input": "in 1 month", "now": "2026-08-28T10:30", "expected": "2026-09-28T09:00"}, |
| 11 | {"id": "days-ago", "input": "2 days ago", "now": "2026-08-28T10:30", "expected": "2026-08-26T09:00"}, |
| 12 | {"id": "in-2-hours", "input": "in 2 hours", "now": "2026-08-28T10:30", "expected": "2026-08-28T12:30"}, |
| 13 | {"id": "in-30-minutes", "input": "in 30 minutes", "now": "2026-08-28T10:30", "expected": "2026-08-28T11:00"}, |
| 14 | {"id": "in-30-mins", "input": "in 30 mins", "now": "2026-08-28T10:30", "expected": "2026-08-28T11:00"}, |
| 15 | |
| 16 | {"id": "next-week", "input": "next week", "now": "2026-08-28T10:30", "expected": "2026-09-04T09:00"}, |
| 17 | {"id": "last-week", "input": "last week", "now": "2026-08-28T10:30", "expected": "2026-08-21T09:00"}, |
| 18 | {"id": "next-month", "input": "next month", "now": "2026-08-28T10:30", "expected": "2026-09-28T09:00"}, |
| 19 | |
| 20 | {"id": "bare-weekday-never-today", "input": "fri", "now": "2026-08-28T10:30", "expected": "2026-09-04T09:00"}, |
| 21 | {"id": "next-monday", "input": "next monday", "now": "2026-08-28T10:30", "expected": "2026-08-31T09:00"}, |
| 22 | {"id": "last-monday", "input": "last monday", "now": "2026-08-28T10:30", "expected": "2026-08-24T09:00"}, |
| 23 | {"id": "next-fri-9am", "input": "next fri 9am", "now": "2026-08-28T10:30", "expected": "2026-09-04T09:00"}, |
| 24 | |
| 25 | {"id": "day-month-time", "input": "25 dec 6pm", "now": "2026-08-28T10:30", "expected": "2026-12-25T18:00"}, |
| 26 | {"id": "month-day", "input": "dec 25", "now": "2026-08-28T10:30", "expected": "2026-12-25T09:00"}, |
| 27 | {"id": "day-month-year", "input": "25 december 2027", "now": "2026-08-28T10:30", "expected": "2027-12-25T09:00"}, |
| 28 | {"id": "day-month-clock", "input": "25 dec 10:00", "now": "2026-08-28T10:30", "expected": "2026-12-25T10:00"}, |
| 29 | {"id": "day-month-rolls-forward", "input": "4 sep", "now": "2026-12-01T10:30", "expected": "2027-09-04T09:00"}, |
| 30 | {"id": "day-month-this-year", "input": "4 sep 2026", "now": "2026-08-28T10:30", "expected": "2026-09-04T09:00"}, |
| 31 | |
| 32 | {"id": "clock", "input": "14:30", "now": "2026-08-28T10:30", "expected": "2026-08-28T14:30"}, |
| 33 | {"id": "pm", "input": "3pm", "now": "2026-08-28T10:30", "expected": "2026-08-28T15:00"}, |
| 34 | {"id": "am", "input": "9am", "now": "2026-08-28T10:30", "expected": "2026-08-28T09:00"}, |
| 35 | {"id": "midday-pm", "input": "12pm", "now": "2026-08-28T10:30", "expected": "2026-08-28T12:00"}, |
| 36 | {"id": "midnight-am", "input": "12am", "now": "2026-08-28T10:30", "expected": "2026-08-28T00:00"}, |
| 37 | {"id": "noon", "input": "noon", "now": "2026-08-28T10:30", "expected": "2026-08-28T12:00"}, |
| 38 | {"id": "midday", "input": "midday", "now": "2026-08-28T10:30", "expected": "2026-08-28T12:00"}, |
| 39 | {"id": "midnight", "input": "midnight", "now": "2026-08-28T10:30", "expected": "2026-08-28T00:00"}, |
| 40 | {"id": "midnight-tomorrow", "input": "midnight tomorrow", "now": "2026-08-28T10:30", "expected": "2026-08-29T00:00"}, |
| 41 | {"id": "tomorrow-time", "input": "tomorrow 6pm", "now": "2026-08-28T10:30", "expected": "2026-08-29T18:00"}, |
| 42 | {"id": "at-is-optional", "input": "tomorrow at 6pm", "now": "2026-08-28T10:30", "expected": "2026-08-29T18:00"}, |
| 43 | {"id": "at-carries-a-bare-hour", "input": "tomorrow at 6", "now": "2026-08-28T10:30", "expected": "2026-08-29T06:00"}, |
| 44 | |
| 45 | {"id": "wire-date", "input": "2026-12-25", "now": "2026-08-28T10:30", "expected": "2026-12-25T09:00"}, |
| 46 | {"id": "wire-datetime", "input": "2026-12-25T18:30", "now": "2026-08-28T10:30", "expected": "2026-12-25T18:30"}, |
| 47 | {"id": "numeric-day-first", "input": "25/12/2026", "now": "2026-08-28T10:30", "expected": "2026-12-25T09:00"}, |
| 48 | {"id": "numeric-month-first-swaps", "input": "12/25/2026", "now": "2026-08-28T10:30", "expected": "2026-12-25T09:00"}, |
| 49 | {"id": "numeric-short-year", "input": "25/12/26", "now": "2026-08-28T10:30", "expected": "2026-12-25T09:00"}, |
| 50 | |
| 51 | {"id": "bare-year-does-not-commit-today", "input": "2030", "now": "2026-08-28T10:30", "expected": "2030-08-28T09:00"}, |
| 52 | {"id": "own-display-reads-back", "input": "Fri, Aug 28, 2026", "now": "2026-08-28T10:30", "expected": "2026-08-28T09:00"}, |
| 53 | {"id": "own-display-year-edited", "input": "Fri, Aug 28, 2030", "now": "2026-08-28T10:30", "expected": "2030-08-28T09:00"}, |
| 54 | |
| 55 | {"id": "range-end-time-only-lands-on-the-start-day", "input": "5pm", "now": "2026-08-28T10:30", "prev": "2026-08-20T09:00", "base": "2026-12-25T10:00", "expected": "2026-12-25T17:00"}, |
| 56 | {"id": "range-end-partial-date-keeps-its-own-day", "input": "2030", "now": "2026-08-28T10:30", "prev": "2026-08-20T17:00", "base": "2026-12-25T10:00", "expected": "2030-08-20T17:00"}, |
| 57 | {"id": "no-time-inherits-the-fields-clock", "input": "tomorrow", "now": "2026-08-28T10:30", "prev": "2026-08-20T17:45", "expected": "2026-08-29T17:45"}, |
| 58 | |
| 59 | {"id": "no-phrase-inside-a-word", "input": "atlas", "now": "2026-08-28T10:30", "expected": null}, |
| 60 | {"id": "spelled-out-quantity", "input": "in two weeks", "now": "2026-08-28T10:30", "expected": null}, |
| 61 | {"id": "both-directions-at-once-is-a-contradiction", "input": "in 2 weeks ago", "now": "2026-08-28T10:30", "expected": null}, |
| 62 | {"id": "meridiem-detached", "input": "6 pm", "now": "2026-08-28T10:30", "expected": "2026-08-28T18:00"}, |
| 63 | {"id": "relative-day-with-a-clock", "input": "in 2 days at 5pm", "now": "2026-08-28T10:30", "expected": "2026-08-30T17:00"}, |
| 64 | {"id": "own-datetime-display-reads-back", "input": "Fri, Aug 28, 2026, 9:00 AM", "now": "2026-08-28T10:30", "expected": "2026-08-28T09:00"}, |
| 65 | {"id": "midnight-boundary", "input": "24:00", "now": "2026-08-28T10:30", "expected": null}, |
| 66 | |
| 67 | {"id": "bare-year-below-a-thousand-is-refused", "input": "0500", "now": "2026-08-28T10:30", "expected": null}, |
| 68 | {"id": "three-digit-year-is-refused", "input": "0999", "now": "2026-08-28T10:30", "expected": null}, |
| 69 | {"id": "earliest-year-a-carrier-can-hold", "input": "1000", "now": "2026-08-28T10:30", "expected": "1000-08-28T09:00"}, |
| 70 | |
| 71 | {"id": "impossible-hour-with-a-meridiem", "input": "25pm", "now": "2026-08-28T10:30", "expected": null}, |
| 72 | {"id": "impossible-hour-with-am", "input": "99am", "now": "2026-08-28T10:30", "expected": null}, |
| 73 | {"id": "hour-zero-with-am-is-midnight", "input": "0am", "now": "2026-08-28T10:30", "expected": "2026-08-28T00:00"}, |
| 74 | {"id": "hour-zero-with-pm-is-noon", "input": "0pm", "now": "2026-08-28T10:30", "expected": "2026-08-28T12:00"}, |
| 75 | {"id": "month-day-year-below-a-thousand", "input": "25 dec 0500", "now": "2026-08-28T10:30", "expected": null}, |
| 76 | {"id": "month-day-year-zero", "input": "25 dec 0000", "now": "2026-08-28T10:30", "expected": null}, |
| 77 | {"id": "month-day-three-digit-year", "input": "25 dec 500", "now": "2026-08-28T10:30", "expected": null}, |
| 78 | {"id": "wire-date-below-a-thousand", "input": "0500-12-25", "now": "2026-08-28T10:30", "expected": null}, |
| 79 | {"id": "numeric-date-below-a-thousand", "input": "25/12/0500", "now": "2026-08-28T10:30", "expected": null}, |
| 80 | |
| 81 | {"id": "junk", "input": "wibble", "now": "2026-08-28T10:30", "expected": null}, |
| 82 | {"id": "empty", "input": "", "now": "2026-08-28T10:30", "expected": null}, |
| 83 | {"id": "blank", "input": " ", "now": "2026-08-28T10:30", "expected": null}, |
| 84 | {"id": "dangling-modifier", "input": "next", "now": "2026-08-28T10:30", "expected": null}, |
| 85 | {"id": "month-with-no-day", "input": "december", "now": "2026-08-28T10:30", "expected": null}, |
| 86 | {"id": "leftover-number", "input": "25 dec 26 27", "now": "2026-08-28T10:30", "expected": null}, |
| 87 | {"id": "trailing-junk", "input": "tomorrow wibble", "now": "2026-08-28T10:30", "expected": null}, |
| 88 | {"id": "impossible-day", "input": "31 february", "now": "2026-08-28T10:30", "expected": null}, |
| 89 | {"id": "impossible-clock", "input": "25:00", "now": "2026-08-28T10:30", "expected": null}, |
| 90 | {"id": "impossible-minute", "input": "14:70", "now": "2026-08-28T10:30", "expected": null}, |
| 91 | |
| 92 | {"id": "day-and-a-month-prefix", "input": "5j", "now": "2026-08-28T10:30", "expected": "2027-01-05T09:00", "alternatives": ["2027-06-05T09:00", "2027-07-05T09:00"]}, |
| 93 | {"id": "day-and-a-month-prefix-spaced", "input": "5 j", "now": "2026-08-28T10:30", "expected": "2027-01-05T09:00", "alternatives": ["2027-06-05T09:00", "2027-07-05T09:00"]}, |
| 94 | {"id": "a-longer-prefix-offers-fewer-months", "input": "5 ju", "now": "2026-08-28T10:30", "expected": "2027-06-05T09:00", "alternatives": ["2027-07-05T09:00"]}, |
| 95 | {"id": "an-unambiguous-prefix-is-one-reading", "input": "5 jun", "now": "2026-08-28T10:30", "expected": "2027-06-05T09:00", "alternatives": []}, |
| 96 | {"id": "a-prefix-month-still-ahead-keeps-this-year", "input": "25 dece", "now": "2026-08-28T10:30", "expected": "2026-12-25T09:00", "alternatives": []}, |
| 97 | |
| 98 | {"id": "a-word-of-the-vocabulary-completes", "input": "tomo", "now": "2026-08-28T10:30", "expected": "2026-08-29T09:00"}, |
| 99 | {"id": "yesterday-half-typed", "input": "yest", "now": "2026-08-28T10:30", "expected": "2026-08-27T09:00"}, |
| 100 | {"id": "midnight-half-typed", "input": "midn", "now": "2026-08-28T10:30", "expected": "2026-08-28T00:00"}, |
| 101 | {"id": "a-weekday-half-typed", "input": "wedn", "now": "2026-08-28T10:30", "expected": "2026-09-02T09:00"}, |
| 102 | |
| 103 | {"id": "a-prefix-of-no-month-is-still-refused", "input": "5 z", "now": "2026-08-28T10:30", "expected": null}, |
| 104 | {"id": "junk-that-is-not-a-prefix-is-still-junk", "input": "wibbl", "now": "2026-08-28T10:30", "expected": null}, |
| 105 | {"id": "two-unfinished-words-complete-neither", "input": "qq 5 j", "now": "2026-08-28T10:30", "expected": null}, |
| 106 | {"id": "a-month-prefix-with-no-day-is-refused", "input": "dece", "now": "2026-08-28T10:30", "expected": null} |
| 107 | ] |
| 108 | |