[ {"name": "daily", "args": [{"frequency": "daily", "interval": 1, "anchor": "2026-09-28"}], "expect": "Every day"}, {"name": "every 3 days", "args": [{"frequency": "daily", "interval": 3, "anchor": "2026-09-28"}], "expect": "Every 3 days"}, {"name": "the largest interval", "args": [{"frequency": "daily", "interval": 999, "anchor": "2026-09-28"}], "expect": "Every 999 days"}, {"name": "weekdays", "args": [{"frequency": "weekdays", "interval": 1, "anchor": "2026-09-28"}], "expect": "Every weekday"}, {"name": "weekly from a Monday", "args": [{"frequency": "weekly", "interval": 1, "anchor": "2026-09-28"}], "expect": "Every week on Monday"}, {"name": "every 2 weeks from a Sunday", "args": [{"frequency": "weekly", "interval": 2, "anchor": "2026-10-04"}], "expect": "Every 2 weeks on Sunday"}, {"name": "weekly from a Friday", "args": [{"frequency": "weekly", "interval": 1, "anchor": "2026-10-02"}], "expect": "Every week on Friday"}, {"name": "monthly on the 31st", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-01-31"}], "expect": "Every month on the 31st"}, {"name": "quarterly on the 1st", "args": [{"frequency": "monthly", "interval": 3, "anchor": "2026-10-01"}], "expect": "Every 3 months on the 1st"}, {"name": "2nd", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-10-02"}], "expect": "Every month on the 2nd"}, {"name": "3rd", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-10-03"}], "expect": "Every month on the 3rd"}, {"name": "4th", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-10-04"}], "expect": "Every month on the 4th"}, {"name": "11th, not 11st", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-10-11"}], "expect": "Every month on the 11th"}, {"name": "12th, not 12nd", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-10-12"}], "expect": "Every month on the 12th"}, {"name": "13th, not 13rd", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-10-13"}], "expect": "Every month on the 13th"}, {"name": "21st", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-10-21"}], "expect": "Every month on the 21st"}, {"name": "22nd", "args": [{"frequency": "monthly", "interval": 2, "anchor": "2026-10-22"}], "expect": "Every 2 months on the 22nd"}, {"name": "23rd", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-10-23"}], "expect": "Every month on the 23rd"}, {"name": "30th", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-09-30"}], "expect": "Every month on the 30th"}, {"name": "yearly on a leap day", "args": [{"frequency": "yearly", "interval": 1, "anchor": "2024-02-29"}], "expect": "Every year on 29 Feb"}, {"name": "every 2 years on New Year's Day", "args": [{"frequency": "yearly", "interval": 2, "anchor": "2027-01-01"}], "expect": "Every 2 years on 1 Jan"}, {"name": "yearly at Christmas", "args": [{"frequency": "yearly", "interval": 1, "anchor": "2026-12-25"}], "expect": "Every year on 25 Dec"}, {"name": "an unknown frequency", "args": [{"frequency": "fortnightly", "interval": 1, "anchor": "2026-09-28"}], "expectError": "unknown repeat frequency \"fortnightly\": expected daily, weekdays, weekly, monthly or yearly"}, {"name": "interval 0", "args": [{"frequency": "daily", "interval": 0, "anchor": "2026-09-28"}], "expectError": "repeat interval must be 1 or more, received 0"}, {"name": "a negative interval", "args": [{"frequency": "weekly", "interval": -2, "anchor": "2026-09-28"}], "expectError": "repeat interval must be 1 or more, received -2"}, {"name": "a fractional interval", "args": [{"frequency": "daily", "interval": 1.5, "anchor": "2026-09-28"}], "expectError": "repeat interval must be 1 or more, received 1.5"}, {"name": "weekdays cannot skip weeks", "args": [{"frequency": "weekdays", "interval": 2, "anchor": "2026-09-28"}], "expectError": "weekday repeats cannot skip weeks: interval must be 1, received 2"}, {"name": "an anchor that never existed", "args": [{"frequency": "monthly", "interval": 1, "anchor": "2026-02-30"}], "expectError": "\"2026-02-30\" is not a real calendar date"}, {"name": "a malformed anchor, even for a daily rule", "args": [{"frequency": "daily", "interval": 1, "anchor": "2026-9-28"}], "expectError": "\"2026-9-28\" is not an ISO date (YYYY-MM-DD)"}, {"name": "an anchor with a trailing newline", "args": [{"frequency": "yearly", "interval": 1, "anchor": "2026-09-28\n"}], "expectError": "is not an ISO date (YYYY-MM-DD)"} ]