[
{ "name": "70 a week over a 10-day lead time, plus 20 safety stock", "args": [70, 7, 10, 20], "expect": 120 },
{ "name": "1000 a month over 7 days is 233.33, rounded up to 234, plus 50", "args": [1000, 30, 7, 50], "expect": 284 },
{ "name": "a fraction under a half still rounds up: 2 a week over 2 days is 0.57, so 1", "args": [2, 7, 2, 0], "expect": 1 },
{ "name": "an exact half rounds up: 15 per 2 days over 1 day is 7.5, so 8", "args": [15, 2, 1, 0], "expect": 8 },
{ "name": "a yearly figure: 3650 a year over 14 days is exactly 140", "args": [3650, 365, 14, 0], "expect": 140 },
{ "name": "a daily rate: 10 a day over 5 days, no safety stock", "args": [10, 1, 5, 0], "expect": 50 },
{ "name": "zero lead time leaves only the safety stock", "args": [1000, 30, 0, 25], "expect": 25 },
{ "name": "zero demand leaves only the safety stock", "args": [0, 30, 14, 25], "expect": 25 },
{ "name": "a demand period of zero days is an error", "args": [1000, 0, 7, 0], "expectError": "demandPeriodDays must be a whole number of days, at least 1" },
{ "name": "negative demand is an error", "args": [-10, 7, 7, 0], "expectError": "demand must be a whole number" },
{ "name": "negative lead time is an error", "args": [10, 7, -1, 0], "expectError": "leadTimeDays must be a whole number" },
{ "name": "negative safety stock is an error", "args": [10, 7, 7, -5], "expectError": "safetyStock must be a whole number" },
{ "name": "a fractional lead time is an error: express it in the period's days", "args": [10, 7, 2.5, 0], "expectError": "leadTimeDays must be a whole number" }
]