[
{
"name": "\u00a3100,000 mortgage at 5% over 25 years is \u00a3584.59 a month",
"args": [
{
"minor": 10000000,
"currency": "GBP"
},
500,
300,
12,
"half-up"
],
"expect": {
"minor": 58459,
"currency": "GBP"
}
},
{
"name": "the same mortgage rounded up so it never under-repays",
"args": [
{
"minor": 10000000,
"currency": "GBP"
},
500,
300,
12,
"up"
],
"expect": {
"minor": 58460,
"currency": "GBP"
}
},
{
"name": "\u00a31,000 at 12% over a year",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
1200,
12,
12,
"half-up"
],
"expect": {
"minor": 8885,
"currency": "GBP"
}
},
{
"name": "rounding down the same loan",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
1200,
12,
12,
"down"
],
"expect": {
"minor": 8884,
"currency": "GBP"
}
},
{
"name": "zero rate is the principal divided equally",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
0,
12,
12,
"half-up"
],
"expect": {
"minor": 8333,
"currency": "GBP"
}
},
{
"name": "zero rate rounded up",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
0,
12,
12,
"up"
],
"expect": {
"minor": 8334,
"currency": "GBP"
}
},
{
"name": "\u00a3150.00 over a year at 0% divides exactly",
"args": [
{
"minor": 15000,
"currency": "GBP"
},
0,
12,
12,
"half-up"
],
"expect": {
"minor": 1250,
"currency": "GBP"
}
},
{
"name": "an exact half penny (\u00a31.50 over 12 months is 12.5p) rounds away from zero under half-up",
"args": [
{
"minor": 150,
"currency": "GBP"
},
0,
12,
12,
"half-up"
],
"expect": {
"minor": 13,
"currency": "GBP"
}
},
{
"name": "half-even sends the exact half to the even penny",
"args": [
{
"minor": 150,
"currency": "GBP"
},
0,
12,
12,
"half-even"
],
"expect": {
"minor": 12,
"currency": "GBP"
}
},
{
"name": "\u00a325,000 car loan at 3.99% over five years",
"args": [
{
"minor": 2500000,
"currency": "GBP"
},
399,
60,
12,
"half-up"
],
"expect": {
"minor": 46030,
"currency": "GBP"
}
},
{
"name": "weekly payments over two years at 6.5%",
"args": [
{
"minor": 1000000,
"currency": "GBP"
},
650,
24,
52,
"half-up"
],
"expect": {
"minor": 10260,
"currency": "GBP"
}
},
{
"name": "quarterly payments over three years at 8%",
"args": [
{
"minor": 500000,
"currency": "GBP"
},
800,
36,
4,
"half-up"
],
"expect": {
"minor": 47280,
"currency": "GBP"
}
},
{
"name": "a single annual payment is principal plus a year's interest",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
1000,
12,
1,
"half-up"
],
"expect": {
"minor": 110000,
"currency": "GBP"
}
},
{
"name": "fortnightly over three years",
"args": [
{
"minor": 300000,
"currency": "GBP"
},
700,
36,
26,
"half-up"
],
"expect": {
"minor": 4269,
"currency": "GBP"
}
},
{
"name": "forty years at 4.25% in euros",
"args": [
{
"minor": 35000000,
"currency": "EUR"
},
425,
480,
12,
"half-up"
],
"expect": {
"minor": 151767,
"currency": "EUR"
}
},
{
"name": "a very high rate: 1000% over 12 months",
"args": [
{
"minor": 50000,
"currency": "GBP"
},
100000,
12,
12,
"half-up"
],
"expect": {
"minor": 41696,
"currency": "GBP"
}
},
{
"name": "a zero principal is refused",
"args": [
{
"minor": 0,
"currency": "GBP"
},
500,
12,
12,
"half-up"
],
"expectError": "principal must be greater than zero"
},
{
"name": "a negative rate is refused",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
-1,
12,
12,
"half-up"
],
"expectError": "annualRateBasisPoints must be between 0 and 100000"
},
{
"name": "payments per year above 52 are refused",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
500,
12,
365,
"half-up"
],
"expectError": "paymentsPerYear must be between 1 and 52"
},
{
"name": "a zero term is refused",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
500,
0,
12,
"half-up"
],
"expectError": "termMonths must be at least 1"
},
{
"name": "a term that is not a whole number of payments",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
500,
13,
4,
"half-up"
],
"expectError": "is not a whole number of payments"
},
{
"name": "more payments than the limit",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
500,
1200,
52,
"half-up"
],
"expectError": "payment limit"
},
{
"name": "an unknown rounding mode",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
500,
12,
12,
"nearest"
],
"expectError": "unknown rounding mode"
}
]