[
{
"name": "£1,000 a month, 1-15 January, annual-daily: 15 × £1,000 × 12 ÷ 365 = £493.15",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2025-01-01",
"2025-01-15",
"annual-daily"
],
"expect": {
"minor": 49315,
"currency": "GBP"
}
},
{
"name": "the same days by calendar month: 15/31 of £1,000 = £483.87",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2025-01-01",
"2025-01-15",
"calendar-month"
],
"expect": {
"minor": 48387,
"currency": "GBP"
}
},
{
"name": "one day, annual-daily: £32.88",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2025-03-10",
"2025-03-10",
"annual-daily"
],
"expect": {
"minor": 3288,
"currency": "GBP"
}
},
{
"name": "14 days of a leap February by calendar month: 14/29",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2024-02-01",
"2024-02-14",
"calendar-month"
],
"expect": {
"minor": 48276,
"currency": "GBP"
}
},
{
"name": "14 days of a common February by calendar month: exactly half",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2023-02-01",
"2023-02-14",
"calendar-month"
],
"expect": {
"minor": 50000,
"currency": "GBP"
}
},
{
"name": "a whole calendar month is exactly the monthly rent",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2023-02-01",
"2023-02-28",
"calendar-month"
],
"expect": {
"minor": 100000,
"currency": "GBP"
}
},
{
"name": "a whole February annual-daily is 28/365 of a year, not a month",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2023-02-01",
"2023-02-28",
"annual-daily"
],
"expect": {
"minor": 92055,
"currency": "GBP"
}
},
{
"name": "20 January to 10 February by calendar month: 12/31 + 10/28, rounded once",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2023-01-20",
"2023-02-10",
"calendar-month"
],
"expect": {
"minor": 74424,
"currency": "GBP"
}
},
{
"name": "20 January to 10 February annual-daily: 22 days",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2023-01-20",
"2023-02-10",
"annual-daily"
],
"expect": {
"minor": 72329,
"currency": "GBP"
}
},
{
"name": "across a year end by calendar month: 1/31 + 1/31",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2024-12-31",
"2025-01-01",
"calendar-month"
],
"expect": {
"minor": 6452,
"currency": "GBP"
}
},
{
"name": "an exact half penny rounds up: £1,000.01 for 15 of April's 30 days",
"args": [
{
"minor": 100001,
"currency": "GBP"
},
"2025-04-01",
"2025-04-15",
"calendar-month"
],
"expect": {
"minor": 50001,
"currency": "GBP"
}
},
{
"name": "a credit rounds symmetrically",
"args": [
{
"minor": -100000,
"currency": "GBP"
},
"2025-01-01",
"2025-01-15",
"calendar-month"
],
"expect": {
"minor": -48387,
"currency": "GBP"
}
},
{
"name": "a whole leap year by calendar month is twelve months' rent",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2024-01-01",
"2024-12-31",
"calendar-month"
],
"expect": {
"minor": 1200000,
"currency": "GBP"
}
},
{
"name": "a whole leap year annual-daily is 366/365 of a year",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2024-01-01",
"2024-12-31",
"annual-daily"
],
"expect": {
"minor": 1203288,
"currency": "GBP"
}
},
{
"name": "zero rent",
"args": [
{
"minor": 0,
"currency": "GBP"
},
"2025-01-01",
"2025-01-15",
"annual-daily"
],
"expect": {
"minor": 0,
"currency": "GBP"
}
},
{
"name": "the currency is kept",
"args": [
{
"minor": 100000,
"currency": "EUR"
},
"2025-01-01",
"2025-01-15",
"calendar-month"
],
"expect": {
"minor": 48387,
"currency": "EUR"
}
},
{
"name": "an end before the start is refused",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2025-01-15",
"2025-01-14",
"annual-daily"
],
"expectError": "toDate 2025-01-14 is before fromDate 2025-01-15"
},
{
"name": "more than 366 days is refused",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2024-01-01",
"2025-01-01",
"calendar-month"
],
"expectError": "the period must be at most 366 days"
},
{
"name": "an unknown method is refused",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2025-01-01",
"2025-01-15",
"30-360"
],
"expectError": "unknown method"
},
{
"name": "a date that does not exist is refused",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
"2023-02-01",
"2023-02-30",
"calendar-month"
],
"expectError": "is not a real calendar date"
},
{
"name": "a rent beyond the exact range is refused",
"args": [
{
"minor": 1000000001,
"currency": "GBP"
},
"2025-01-01",
"2025-01-15",
"annual-daily"
],
"expectError": "monthlyRent must be at most"
}
]