Functional Weave
Code in TypeScript

money.compare@1.0.0

vectors.json

2,476 bytes · view raw

[
  {
    "name": "less is -1",
    "args": [
      {
        "minor": 100,
        "currency": "GBP"
      },
      {
        "minor": 200,
        "currency": "GBP"
      }
    ],
    "expect": -1
  },
  {
    "name": "greater is 1",
    "args": [
      {
        "minor": 200,
        "currency": "GBP"
      },
      {
        "minor": 100,
        "currency": "GBP"
      }
    ],
    "expect": 1
  },
  {
    "name": "equal is 0",
    "args": [
      {
        "minor": 1999,
        "currency": "GBP"
      },
      {
        "minor": 1999,
        "currency": "GBP"
      }
    ],
    "expect": 0
  },
  {
    "name": "the answer is 1, not the difference of 1998",
    "args": [
      {
        "minor": 1999,
        "currency": "GBP"
      },
      {
        "minor": 1,
        "currency": "GBP"
      }
    ],
    "expect": 1
  },
  {
    "name": "a larger debt is less",
    "args": [
      {
        "minor": -500,
        "currency": "GBP"
      },
      {
        "minor": -100,
        "currency": "GBP"
      }
    ],
    "expect": -1
  },
  {
    "name": "zero is more than a credit",
    "args": [
      {
        "minor": 0,
        "currency": "GBP"
      },
      {
        "minor": -1,
        "currency": "GBP"
      }
    ],
    "expect": 1
  },
  {
    "name": "one minor unit apart",
    "args": [
      {
        "minor": 10000,
        "currency": "GBP"
      },
      {
        "minor": 10001,
        "currency": "GBP"
      }
    ],
    "expect": -1
  },
  {
    "name": "yen compares in whole yen",
    "args": [
      {
        "minor": 1500,
        "currency": "JPY"
      },
      {
        "minor": 1499,
        "currency": "JPY"
      }
    ],
    "expect": 1
  },
  {
    "name": "the largest safe amounts still compare exactly",
    "args": [
      {
        "minor": 9007199254740991,
        "currency": "GBP"
      },
      {
        "minor": 9007199254740990,
        "currency": "GBP"
      }
    ],
    "expect": 1
  },
  {
    "name": "opposite extremes",
    "args": [
      {
        "minor": -9007199254740991,
        "currency": "GBP"
      },
      {
        "minor": 9007199254740991,
        "currency": "GBP"
      }
    ],
    "expect": -1
  },
  {
    "name": "comparing across currencies is an error, not an answer",
    "args": [
      {
        "minor": 1000,
        "currency": "GBP"
      },
      {
        "minor": 1000,
        "currency": "EUR"
      }
    ],
    "expectError": "currency mismatch"
  }
]