Functional Weave
Code in TypeScript

math.gcd-lcm@2.0.0

vectors.json

4,274 bytes · view raw

[
  {"fn": "gcdLcm", "name": "12 and 18", "args": [12, 18], "expect": {"gcd": 6, "lcm": 36}},
  {"fn": "gcdLcm", "name": "coprime numbers", "args": [17, 5], "expect": {"gcd": 1, "lcm": 85}},
  {"fn": "gcdLcm", "name": "equal numbers", "args": [7, 7], "expect": {"gcd": 7, "lcm": 7}},
  {"fn": "gcdLcm", "name": "one divides the other", "args": [4, 20], "expect": {"gcd": 4, "lcm": 20}},
  {"fn": "gcdLcm", "name": "one with anything", "args": [1, 999], "expect": {"gcd": 1, "lcm": 999}},
  {"fn": "gcdLcm", "name": "negatives give non-negative answers", "args": [-4, 6], "expect": {"gcd": 2, "lcm": 12}},
  {"fn": "gcdLcm", "name": "both negative", "args": [-12, -18], "expect": {"gcd": 6, "lcm": 36}},
  {"fn": "gcdLcm", "name": "zero and n: gcd is n, lcm is zero", "args": [0, 5], "expect": {"gcd": 5, "lcm": 0}},
  {"fn": "gcdLcm", "name": "zero and a negative", "args": [-9, 0], "expect": {"gcd": 9, "lcm": 0}},
  {"fn": "gcdLcm", "name": "zero and zero", "args": [0, 0], "expect": {"gcd": 0, "lcm": 0}},
  {"fn": "gcdLcm", "name": "a times b overflows even though the lcm fits: divide first", "args": [3000000021, 5000000035], "expect": {"gcd": 1000000007, "lcm": 15000000105}},
  {"fn": "gcdLcm", "name": "the largest safe integer with itself", "args": [9007199254740991, 9007199254740991], "expect": {"gcd": 9007199254740991, "lcm": 9007199254740991}},
  {"fn": "gcdLcm", "name": "an lcm beyond 2^53 - 1 is an error", "args": [9007199254740991, 9007199254740990], "expectError": "exceeds 2^53 - 1"},
  {"fn": "gcdLcm", "name": "an input beyond 2^53 - 1 is an error", "args": [9007199254740992, 2], "expectError": "outside the safe integer range"},
  {"fn": "gcdLcm", "name": "a fractional input is an error", "args": [1.5, 3], "expectError": "must be an integer"},
  {"fn": "gcd", "name": "48 and 180 share 12", "args": [48, 180], "expect": 12},
  {"fn": "gcd", "name": "coprime numbers share only 1", "args": [35, 64], "expect": 1},
  {"fn": "gcd", "name": "order does not matter", "args": [180, 48], "expect": 12},
  {"fn": "gcd", "name": "a negative input gives a positive divisor", "args": [-48, 180], "expect": 12},
  {"fn": "gcd", "name": "both negative", "args": [-21, -14], "expect": 7},
  {"fn": "gcd", "name": "gcd of zero and n is |n|", "args": [0, -17], "expect": 17},
  {"fn": "gcd", "name": "gcd of zero and zero is zero", "args": [0, 0], "expect": 0},
  {"fn": "gcd", "name": "consecutive Fibonacci numbers, Euclid's slowest case, are coprime", "args": [5527939700884757, 8944394323791464], "expect": 1},
  {"fn": "gcd", "name": "the largest safe integer and one less share only 1", "args": [9007199254740991, 9007199254740990], "expect": 1},
  {"fn": "gcd", "name": "the largest safe integer with a factor of it", "args": [9007199254740991, 6361], "expect": 6361},
  {"fn": "gcd", "name": "an input beyond 2^53 - 1 is an error", "args": [2, 9007199254740992], "expectError": "outside the safe integer range"},
  {"fn": "gcd", "name": "a fractional input is an error", "args": [4, 2.5], "expectError": "must be an integer"},
  {"fn": "lcm", "name": "4 and 6 meet at 12", "args": [4, 6], "expect": 12},
  {"fn": "lcm", "name": "one divides the other", "args": [6, 42], "expect": 42},
  {"fn": "lcm", "name": "coprime numbers multiply", "args": [9, 28], "expect": 252},
  {"fn": "lcm", "name": "a negative input gives a positive multiple", "args": [-4, 6], "expect": 12},
  {"fn": "lcm", "name": "both negative", "args": [-15, -20], "expect": 60},
  {"fn": "lcm", "name": "anything with zero is zero", "args": [0, 12], "expect": 0},
  {"fn": "lcm", "name": "zero with zero is zero", "args": [0, 0], "expect": 0},
  {"fn": "lcm", "name": "a times b would overflow, but dividing first fits", "args": [3000000021, 5000000035], "expect": 15000000105},
  {"fn": "lcm", "name": "an lcm of exactly 2^53 - 1", "args": [9007199254740991, 1], "expect": 9007199254740991},
  {"fn": "lcm", "name": "an lcm of 3 x 2^52 is past the limit", "args": [4503599627370496, 3], "expectError": "exceeds 2^53 - 1"},
  {"fn": "lcm", "name": "an input beyond 2^53 - 1 is an error", "args": [-9007199254740992, 3], "expectError": "outside the safe integer range"},
  {"fn": "lcm", "name": "a fractional input is an error", "args": [0.5, 4], "expectError": "must be an integer"}
]