Functional Weave
Code in TypeScript

money.apply-rate@1.0.0

vectors.json

1,549 bytes · view raw

[
  { "name": "20 percent VAT on 100 pounds", "args": [{ "minor": 10000, "currency": "GBP" }, 2000, "half-up"], "expect": { "minor": 2000, "currency": "GBP" } },
  { "name": "20 percent of 1.99 rounds up", "args": [{ "minor": 199, "currency": "GBP" }, 2000, "half-up"], "expect": { "minor": 40, "currency": "GBP" } },
  { "name": "5 percent reduced rate", "args": [{ "minor": 4999, "currency": "GBP" }, 500, "half-up"], "expect": { "minor": 250, "currency": "GBP" } },
  { "name": "exact half rounds up under half-up", "args": [{ "minor": 5, "currency": "GBP" }, 5000, "half-up"], "expect": { "minor": 3, "currency": "GBP" } },
  { "name": "exact half rounds to even under half-even", "args": [{ "minor": 5, "currency": "GBP" }, 5000, "half-even"], "expect": { "minor": 2, "currency": "GBP" } },
  { "name": "down never rounds up", "args": [{ "minor": 199, "currency": "GBP" }, 2000, "down"], "expect": { "minor": 39, "currency": "GBP" } },
  { "name": "zero rate", "args": [{ "minor": 12345, "currency": "GBP" }, 0, "half-up"], "expect": { "minor": 0, "currency": "GBP" } },
  { "name": "100 percent is the amount itself", "args": [{ "minor": 12345, "currency": "GBP" }, 10000, "half-up"], "expect": { "minor": 12345, "currency": "GBP" } },
  { "name": "quarter of a percent", "args": [{ "minor": 100000, "currency": "GBP" }, 25, "half-up"], "expect": { "minor": 250, "currency": "GBP" } },
  { "name": "credits rate symmetrically", "args": [{ "minor": -199, "currency": "GBP" }, 2000, "half-up"], "expect": { "minor": -40, "currency": "GBP" } }
]