Functional Weave
Code in Rust

insurance.age-banding@1.0.0

vectors.json

8,489 bytes · view raw

[
 {
  "name": "26 at inception is in the 25-29 band",
  "args": [
   "2000-06-15",
   "2026-09-23",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 26,
   "label": "25-29"
  }
 },
 {
  "name": "a birthday on the inception date counts: 25 that day",
  "args": [
   "2001-09-23",
   "2026-09-23",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 25,
   "label": "25-29"
  }
 },
 {
  "name": "the day before the 25th birthday is still 24",
  "args": [
   "2001-09-23",
   "2026-09-22",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 24,
   "label": "21-24"
  }
 },
 {
  "name": "a 29 February birthday has not turned 21 on 28 February",
  "args": [
   "2004-02-29",
   "2025-02-28",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 20,
   "label": "17-20"
  }
 },
 {
  "name": "and turns 21 on 1 March",
  "args": [
   "2004-02-29",
   "2025-03-01",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 21,
   "label": "21-24"
  }
 },
 {
  "name": "in a leap year it turns on 29 February",
  "args": [
   "2004-02-29",
   "2028-02-29",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 24,
   "label": "21-24"
  }
 },
 {
  "name": "the open top band",
  "args": [
   "1950-01-01",
   "2026-09-23",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 76,
   "label": "70+"
  }
 },
 {
  "name": "exactly the youngest age",
  "args": [
   "2009-09-23",
   "2026-09-23",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 17,
   "label": "17-20"
  }
 },
 {
  "name": "the upper edge of a band is inside it",
  "args": [
   "1976-09-24",
   "2026-09-23",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 49,
   "label": "30-49"
  }
 },
 {
  "name": "a single open band covers everyone from its minimum",
  "args": [
   "1990-01-01",
   "2026-01-01",
   [
    {
     "label": "all",
     "minAge": 0,
     "maxAge": null
    }
   ]
  ],
  "expect": {
   "age": 36,
   "label": "all"
  }
 },
 {
  "name": "too young for any band",
  "args": [
   "2010-01-01",
   "2026-09-23",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expectError": "no band for age 16"
 },
 {
  "name": "an age in a gap between bands is refused",
  "args": [
   "2004-01-01",
   "2026-09-23",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "25+",
     "minAge": 25,
     "maxAge": null
    }
   ]
  ],
  "expectError": "no band for age 22"
 },
 {
  "name": "overlapping bands are refused",
  "args": [
   "2000-01-01",
   "2026-09-23",
   [
    {
     "label": "17-25",
     "minAge": 17,
     "maxAge": 25
    },
    {
     "label": "25-30",
     "minAge": 25,
     "maxAge": 30
    }
   ]
  ],
  "expectError": "bands must be youngest first and not overlap"
 },
 {
  "name": "an open band that is not last is refused",
  "args": [
   "2000-01-01",
   "2026-09-23",
   [
    {
     "label": "17+",
     "minAge": 17,
     "maxAge": null
    },
    {
     "label": "25-30",
     "minAge": 25,
     "maxAge": 30
    }
   ]
  ],
  "expectError": "only the last band may have no maxAge"
 },
 {
  "name": "a band whose maximum is below its minimum is refused",
  "args": [
   "2000-01-01",
   "2026-09-23",
   [
    {
     "label": "odd",
     "minAge": 30,
     "maxAge": 20
    }
   ]
  ],
  "expectError": "maxAge must be a whole number no less than minAge"
 },
 {
  "name": "no bands is refused",
  "args": [
   "2000-01-01",
   "2026-09-23",
   []
  ],
  "expectError": "bands must not be empty"
 },
 {
  "name": "inception before birth is refused",
  "args": [
   "2026-09-23",
   "2026-01-01",
   [
    {
     "label": "17-20",
     "minAge": 17,
     "maxAge": 20
    },
    {
     "label": "21-24",
     "minAge": 21,
     "maxAge": 24
    },
    {
     "label": "25-29",
     "minAge": 25,
     "maxAge": 29
    },
    {
     "label": "30-49",
     "minAge": 30,
     "maxAge": 49
    },
    {
     "label": "50-69",
     "minAge": 50,
     "maxAge": 69
    },
    {
     "label": "70+",
     "minAge": 70,
     "maxAge": null
    }
   ]
  ],
  "expectError": "is before birthDate"
 },
 {
  "name": "a fractional minimum age is refused",
  "args": [
   "2000-01-01",
   "2026-09-23",
   [
    {
     "label": "x",
     "minAge": 17.5,
     "maxAge": null
    }
   ]
  ],
  "expectError": "minAge must be a whole number"
 }
]