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