Functional Weave
Code in Rust

money.amount@1.0.2

vectors.json

1,927 bytes · view raw

[
  { "name": "pounds and pence", "args": [12000, "GBP"], "expect": { "minor": 12000, "currency": "GBP" } },
  { "name": "zero", "args": [0, "GBP"], "expect": { "minor": 0, "currency": "GBP" } },
  { "name": "negative amounts are allowed (credit notes)", "args": [-2599, "GBP"], "expect": { "minor": -2599, "currency": "GBP" } },
  { "name": "zero-decimal currency", "args": [1500, "JPY"], "expect": { "minor": 1500, "currency": "JPY" } },
  { "name": "lowercase currency is rejected", "args": [100, "gbp"], "expectError": "ISO 4217" },
  { "name": "non-integer minor units are rejected", "args": [10.5, "GBP"], "expectError": "integer minor units" },
  { "name": "the largest safe integer is held exactly", "args": [9007199254740991, "USD"], "expect": { "minor": 9007199254740991, "currency": "USD" } },
  { "name": "a negative zero-decimal amount", "args": [-1, "JPY"], "expect": { "minor": -1, "currency": "JPY" } },
  { "name": "a three-decimal currency is still whole minor units (fils)", "args": [1234, "KWD"], "expect": { "minor": 1234, "currency": "KWD" } },
  { "name": "a fractional credit is rejected, not rounded", "args": [-0.5, "GBP"], "expectError": "integer minor units" },
  { "name": "two letters are not a currency code", "args": [100, "GB"], "expectError": "ISO 4217" },
  { "name": "four letters are not a currency code", "args": [100, "GBPX"], "expectError": "ISO 4217" },
  { "name": "an empty currency is rejected", "args": [100, ""], "expectError": "ISO 4217" },
  { "name": "mixed case is rejected, not upper-cased", "args": [100, "Gbp"], "expectError": "ISO 4217" },
  { "name": "digits are not a currency code", "args": [100, "123"], "expectError": "ISO 4217" },
  { "name": "a trailing newline is not part of a currency code", "args": [100, "GBP\n"], "expectError": "ISO 4217" },
  { "name": "a leading newline is not part of a currency code", "args": [100, "\nGBP"], "expectError": "ISO 4217" }
]