Functional Weave
Code in TypeScript

todo.recurrence-label@1.0.0

vectors.json

4,536 bytes · view raw

[
  {"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)"}
]