Functional Weave
Code in TypeScript

math.big-integer@1.0.0

vectors.json

4,026 bytes · view raw

[
  {
    "name": "adds past 64 bits",
    "args": [
      "123456789012345678901234567890",
      "add",
      "987654321098765432109876543210"
    ],
    "expect": "1111111110111111111011111111100"
  },
  {
    "name": "i64 max plus one does not wrap",
    "args": [
      "9223372036854775807",
      "add",
      "1"
    ],
    "expect": "9223372036854775808"
  },
  {
    "name": "subtracting a larger number goes negative",
    "args": [
      "123456789012345678901234567890",
      "subtract",
      "987654321098765432109876543210"
    ],
    "expect": "-864197532086419753208641975320"
  },
  {
    "name": "2^64 squared is 2^128",
    "args": [
      "18446744073709551616",
      "multiply",
      "18446744073709551616"
    ],
    "expect": "340282366920938463463374607431768211456"
  },
  {
    "name": "negative times negative is positive",
    "args": [
      "-99999999999999999999",
      "multiply",
      "-3"
    ],
    "expect": "299999999999999999997"
  },
  {
    "name": "anything times zero is zero",
    "args": [
      "-123456789012345678901234567890",
      "multiply",
      "0"
    ],
    "expect": "0"
  },
  {
    "name": "divide truncates towards zero",
    "args": [
      "-7",
      "divide",
      "2"
    ],
    "expect": "-3"
  },
  {
    "name": "remainder takes the sign of the dividend",
    "args": [
      "-7",
      "remainder",
      "2"
    ],
    "expect": "-1"
  },
  {
    "name": "positive by negative divisor",
    "args": [
      "7",
      "remainder",
      "-2"
    ],
    "expect": "1"
  },
  {
    "name": "long division of large numbers",
    "args": [
      "1606938044258990275541962092341162602522202993782792835313721",
      "divide",
      "717897987691852588770249"
    ],
    "expect": "2238393297946874000179418290327143433"
  },
  {
    "name": "remainder of large numbers",
    "args": [
      "1606938044258990275541962092341162602522202993782792835313721",
      "remainder",
      "717897987691852588770249"
    ],
    "expect": "249667313308346329188904"
  },
  {
    "name": "power of two",
    "args": [
      "2",
      "power",
      "100"
    ],
    "expect": "1267650600228229401496703205376"
  },
  {
    "name": "a negative base to an odd power",
    "args": [
      "-3",
      "power",
      "41"
    ],
    "expect": "-36472996377170786403"
  },
  {
    "name": "zero to the zero is one",
    "args": [
      "0",
      "power",
      "0"
    ],
    "expect": "1"
  },
  {
    "name": "minus one to a huge power",
    "args": [
      "-1",
      "power",
      "1000000001"
    ],
    "expect": "-1"
  },
  {
    "name": "compound growth factor 1.0045^12, scaled",
    "args": [
      "10045",
      "power",
      "12"
    ],
    "expect": "1055356751950102607459752843054131873164306640625"
  },
  {
    "name": "a malformed number is refused",
    "args": [
      "01",
      "add",
      "1"
    ],
    "expectError": "not a whole number in decimal"
  },
  {
    "name": "minus zero is refused",
    "args": [
      "-0",
      "add",
      "1"
    ],
    "expectError": "not a whole number in decimal"
  },
  {
    "name": "a decimal point is refused",
    "args": [
      "1.5",
      "add",
      "1"
    ],
    "expectError": "not a whole number in decimal"
  },
  {
    "name": "division by zero",
    "args": [
      "1",
      "divide",
      "0"
    ],
    "expectError": "division by zero"
  },
  {
    "name": "remainder by zero",
    "args": [
      "1",
      "remainder",
      "0"
    ],
    "expectError": "division by zero"
  },
  {
    "name": "a negative exponent is refused",
    "args": [
      "2",
      "power",
      "-1"
    ],
    "expectError": "exponent must not be negative"
  },
  {
    "name": "a power beyond the size limit is refused before it is built",
    "args": [
      "3",
      "power",
      "50000"
    ],
    "expectError": "result too large"
  },
  {
    "name": "an unknown operation",
    "args": [
      "1",
      "modulo",
      "2"
    ],
    "expectError": "unknown operation"
  }
]