Functional Weave
Code in Rust

money.compare@2.0.0

vectors.json

7,670 bytes · view raw

[
  {"fn": "compareMoney", "name": "less is -1", "args": [{"minor": 100, "currency": "GBP"}, {"minor": 200, "currency": "GBP"}], "expect": -1},
  {"fn": "compareMoney", "name": "greater is 1", "args": [{"minor": 200, "currency": "GBP"}, {"minor": 100, "currency": "GBP"}], "expect": 1},
  {"fn": "compareMoney", "name": "equal is 0", "args": [{"minor": 1999, "currency": "GBP"}, {"minor": 1999, "currency": "GBP"}], "expect": 0},
  {"fn": "compareMoney", "name": "the answer is 1, not the difference of 1998", "args": [{"minor": 1999, "currency": "GBP"}, {"minor": 1, "currency": "GBP"}], "expect": 1},
  {"fn": "compareMoney", "name": "a larger debt is less", "args": [{"minor": -500, "currency": "GBP"}, {"minor": -100, "currency": "GBP"}], "expect": -1},
  {"fn": "compareMoney", "name": "zero is more than a credit", "args": [{"minor": 0, "currency": "GBP"}, {"minor": -1, "currency": "GBP"}], "expect": 1},
  {"fn": "compareMoney", "name": "one minor unit apart", "args": [{"minor": 10000, "currency": "GBP"}, {"minor": 10001, "currency": "GBP"}], "expect": -1},
  {"fn": "compareMoney", "name": "yen compares in whole yen", "args": [{"minor": 1500, "currency": "JPY"}, {"minor": 1499, "currency": "JPY"}], "expect": 1},
  {"fn": "compareMoney", "name": "the largest safe amounts still compare exactly", "args": [{"minor": 9007199254740991, "currency": "GBP"}, {"minor": 9007199254740990, "currency": "GBP"}], "expect": 1},
  {"fn": "compareMoney", "name": "opposite extremes", "args": [{"minor": -9007199254740991, "currency": "GBP"}, {"minor": 9007199254740991, "currency": "GBP"}], "expect": -1},
  {"fn": "compareMoney", "name": "comparing across currencies is an error, not an answer", "args": [{"minor": 1000, "currency": "GBP"}, {"minor": 1000, "currency": "EUR"}], "expectError": "currency mismatch"},
  {"fn": "minMoney", "name": "the smaller of two amounts", "args": [{"minor": 500, "currency": "GBP"}, {"minor": 300, "currency": "GBP"}], "expect": {"minor": 300, "currency": "GBP"}},
  {"fn": "minMoney", "name": "order does not matter", "args": [{"minor": 300, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}], "expect": {"minor": 300, "currency": "GBP"}},
  {"fn": "minMoney", "name": "equal amounts give that amount", "args": [{"minor": 1999, "currency": "GBP"}, {"minor": 1999, "currency": "GBP"}], "expect": {"minor": 1999, "currency": "GBP"}},
  {"fn": "minMoney", "name": "a refund is smaller than a charge", "args": [{"minor": -250, "currency": "GBP"}, {"minor": 100, "currency": "GBP"}], "expect": {"minor": -250, "currency": "GBP"}},
  {"fn": "minMoney", "name": "the larger debt is the smaller amount", "args": [{"minor": -500, "currency": "GBP"}, {"minor": -100, "currency": "GBP"}], "expect": {"minor": -500, "currency": "GBP"}},
  {"fn": "minMoney", "name": "zero against a one penny credit", "args": [{"minor": 0, "currency": "GBP"}, {"minor": -1, "currency": "GBP"}], "expect": {"minor": -1, "currency": "GBP"}},
  {"fn": "minMoney", "name": "yen compare in whole yen", "args": [{"minor": 1500, "currency": "JPY"}, {"minor": 1499, "currency": "JPY"}], "expect": {"minor": 1499, "currency": "JPY"}},
  {"fn": "minMoney", "name": "opposite extremes of the safe range", "args": [{"minor": 9007199254740991, "currency": "GBP"}, {"minor": -9007199254740991, "currency": "GBP"}], "expect": {"minor": -9007199254740991, "currency": "GBP"}},
  {"fn": "minMoney", "name": "mixed currencies are an error, not an answer", "args": [{"minor": 100, "currency": "GBP"}, {"minor": 200, "currency": "EUR"}], "expectError": "currency mismatch"},
  {"fn": "maxMoney", "name": "the larger of two amounts", "args": [{"minor": 500, "currency": "GBP"}, {"minor": 300, "currency": "GBP"}], "expect": {"minor": 500, "currency": "GBP"}},
  {"fn": "maxMoney", "name": "order does not matter", "args": [{"minor": 300, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}], "expect": {"minor": 500, "currency": "GBP"}},
  {"fn": "maxMoney", "name": "equal amounts give that amount", "args": [{"minor": 1999, "currency": "GBP"}, {"minor": 1999, "currency": "GBP"}], "expect": {"minor": 1999, "currency": "GBP"}},
  {"fn": "maxMoney", "name": "a charge is larger than a refund", "args": [{"minor": -250, "currency": "GBP"}, {"minor": 100, "currency": "GBP"}], "expect": {"minor": 100, "currency": "GBP"}},
  {"fn": "maxMoney", "name": "the smaller debt is the larger amount", "args": [{"minor": -500, "currency": "GBP"}, {"minor": -100, "currency": "GBP"}], "expect": {"minor": -100, "currency": "GBP"}},
  {"fn": "maxMoney", "name": "zero against a one penny credit", "args": [{"minor": 0, "currency": "GBP"}, {"minor": -1, "currency": "GBP"}], "expect": {"minor": 0, "currency": "GBP"}},
  {"fn": "maxMoney", "name": "one minor unit apart at the top of the safe range", "args": [{"minor": 9007199254740990, "currency": "GBP"}, {"minor": 9007199254740991, "currency": "GBP"}], "expect": {"minor": 9007199254740991, "currency": "GBP"}},
  {"fn": "maxMoney", "name": "mixed currencies are an error, not an answer", "args": [{"minor": 100, "currency": "USD"}, {"minor": 100, "currency": "GBP"}], "expectError": "currency mismatch"},
  {"fn": "clampMoney", "name": "inside the range it is unchanged", "args": [{"minor": 750, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}, {"minor": 1000, "currency": "GBP"}], "expect": {"minor": 750, "currency": "GBP"}},
  {"fn": "clampMoney", "name": "below the range it is lifted to min", "args": [{"minor": 100, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}, {"minor": 1000, "currency": "GBP"}], "expect": {"minor": 500, "currency": "GBP"}},
  {"fn": "clampMoney", "name": "above the range it is capped at max", "args": [{"minor": 2500, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}, {"minor": 1000, "currency": "GBP"}], "expect": {"minor": 1000, "currency": "GBP"}},
  {"fn": "clampMoney", "name": "exactly min is kept", "args": [{"minor": 500, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}, {"minor": 1000, "currency": "GBP"}], "expect": {"minor": 500, "currency": "GBP"}},
  {"fn": "clampMoney", "name": "exactly max is kept", "args": [{"minor": 1000, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}, {"minor": 1000, "currency": "GBP"}], "expect": {"minor": 1000, "currency": "GBP"}},
  {"fn": "clampMoney", "name": "a refund is capped at the original charge, as a negative range", "args": [{"minor": -1500, "currency": "GBP"}, {"minor": -1000, "currency": "GBP"}, {"minor": 0, "currency": "GBP"}], "expect": {"minor": -1000, "currency": "GBP"}},
  {"fn": "clampMoney", "name": "zero-width range pins the amount", "args": [{"minor": 42, "currency": "GBP"}, {"minor": 0, "currency": "GBP"}, {"minor": 0, "currency": "GBP"}], "expect": {"minor": 0, "currency": "GBP"}},
  {"fn": "clampMoney", "name": "a range entirely of credits", "args": [{"minor": -10, "currency": "GBP"}, {"minor": -500, "currency": "GBP"}, {"minor": -100, "currency": "GBP"}], "expect": {"minor": -100, "currency": "GBP"}},
  {"fn": "clampMoney", "name": "bounds the wrong way round are an error", "args": [{"minor": 750, "currency": "GBP"}, {"minor": 1000, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}], "expectError": "min must not be greater than max"},
  {"fn": "clampMoney", "name": "a min in another currency is an error", "args": [{"minor": 750, "currency": "GBP"}, {"minor": 500, "currency": "EUR"}, {"minor": 1000, "currency": "GBP"}], "expectError": "currency mismatch"},
  {"fn": "clampMoney", "name": "a max in another currency is an error", "args": [{"minor": 750, "currency": "GBP"}, {"minor": 500, "currency": "GBP"}, {"minor": 1000, "currency": "USD"}], "expectError": "currency mismatch"}
]