[ { "name": "ten pounds three ways keeps the penny, larger share first", "args": [ { "minor": 1000, "currency": "GBP" }, 3 ], "expect": [ { "minor": 334, "currency": "GBP" }, { "minor": 333, "currency": "GBP" }, { "minor": 333, "currency": "GBP" } ] }, { "name": "a refund splits as the mirror image, unlike allocate's -333, -333, -334", "args": [ { "minor": -1000, "currency": "GBP" }, 3 ], "expect": [ { "minor": -334, "currency": "GBP" }, { "minor": -333, "currency": "GBP" }, { "minor": -333, "currency": "GBP" } ] }, { "name": "an exact split has no leftover", "args": [ { "minor": 1000, "currency": "GBP" }, 4 ], "expect": [ { "minor": 250, "currency": "GBP" }, { "minor": 250, "currency": "GBP" }, { "minor": 250, "currency": "GBP" }, { "minor": 250, "currency": "GBP" } ] }, { "name": "two leftover pennies go to the first two parts", "args": [ { "minor": 10000, "currency": "GBP" }, 6 ], "expect": [ { "minor": 1667, "currency": "GBP" }, { "minor": 1667, "currency": "GBP" }, { "minor": 1667, "currency": "GBP" }, { "minor": 1667, "currency": "GBP" }, { "minor": 1666, "currency": "GBP" }, { "minor": 1666, "currency": "GBP" } ] }, { "name": "fewer pennies than parts leaves some parts at zero", "args": [ { "minor": 2, "currency": "GBP" }, 3 ], "expect": [ { "minor": 1, "currency": "GBP" }, { "minor": 1, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ] }, { "name": "a negative amount smaller than the parts", "args": [ { "minor": -2, "currency": "GBP" }, 5 ], "expect": [ { "minor": -1, "currency": "GBP" }, { "minor": -1, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ] }, { "name": "zero splits into zeros", "args": [ { "minor": 0, "currency": "GBP" }, 3 ], "expect": [ { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ] }, { "name": "one part is the whole amount", "args": [ { "minor": 999, "currency": "GBP" }, 1 ], "expect": [ { "minor": 999, "currency": "GBP" } ] }, { "name": "yen splits in whole yen", "args": [ { "minor": 100, "currency": "JPY" }, 3 ], "expect": [ { "minor": 34, "currency": "JPY" }, { "minor": 33, "currency": "JPY" }, { "minor": 33, "currency": "JPY" } ] }, { "name": "dinar splits in fils", "args": [ { "minor": 1000, "currency": "KWD" }, 3 ], "expect": [ { "minor": 334, "currency": "KWD" }, { "minor": 333, "currency": "KWD" }, { "minor": 333, "currency": "KWD" } ] }, { "name": "zero parts is an error", "args": [ { "minor": 100, "currency": "GBP" }, 0 ], "expectError": "parts must be at least 1" }, { "name": "negative parts is an error", "args": [ { "minor": 100, "currency": "GBP" }, -2 ], "expectError": "parts must be at least 1" }, { "name": "fractional parts is an error", "args": [ { "minor": 100, "currency": "GBP" }, 2.5 ], "expectError": "parts must be a whole number" } ]