Functional Weave
Code in TypeScript

manufacturing.takt-time@1.0.0

vectors.json

2,403 bytes · view raw

[
  { "name": "an 8-hour shift less two 15-minute breaks (27000 s) for 450 units is 60 s", "args": [27000, 450, "down"], "expect": { "exact": { "numerator": 60, "denominator": 1 }, "seconds": 60 } },
  { "name": "27000 s for 400 units is exactly 67.5 s; down keeps pace at 67", "args": [27000, 400, "down"], "expect": { "exact": { "numerator": 135, "denominator": 2 }, "seconds": 67 } },
  { "name": "67.5 s rounds half-up to 68", "args": [27000, 400, "half-up"], "expect": { "exact": { "numerator": 135, "denominator": 2 }, "seconds": 68 } },
  { "name": "67.5 s rounds half-even to 68 (68 is even)", "args": [27000, 400, "half-even"], "expect": { "exact": { "numerator": 135, "denominator": 2 }, "seconds": 68 } },
  { "name": "an exact half on an even second: 26 s over 4 units is 6.5, half-even goes down to 6", "args": [26, 4, "half-even"], "expect": { "exact": { "numerator": 13, "denominator": 2 }, "seconds": 6 } },
  { "name": "27000 s for 460 units is 1350/23 = 58.70 s; half-up gives 59", "args": [27000, 460, "half-up"], "expect": { "exact": { "numerator": 1350, "denominator": 23 }, "seconds": 59 } },
  { "name": "1350/23 rounds down to 58", "args": [27000, 460, "down"], "expect": { "exact": { "numerator": 1350, "denominator": 23 }, "seconds": 58 } },
  { "name": "two shifts over a 5-day week: 270000 s for 4800 units is 56.25 s, up gives 57", "args": [270000, 4800, "up"], "expect": { "exact": { "numerator": 225, "denominator": 4 }, "seconds": 57 } },
  { "name": "demand larger than the seconds available: takt under one second", "args": [3600, 7200, "half-up"], "expect": { "exact": { "numerator": 1, "denominator": 2 }, "seconds": 1 } },
  { "name": "no available time gives a takt of zero", "args": [0, 100, "down"], "expect": { "exact": { "numerator": 0, "denominator": 1 }, "seconds": 0 } },
  { "name": "zero demand is an error", "args": [27000, 0, "down"], "expectError": "demand must be a whole number of units greater than zero" },
  { "name": "negative available time is an error", "args": [-1, 10, "down"], "expectError": "availableSeconds must be a whole number of seconds, not negative" },
  { "name": "fractional demand is an error", "args": [27000, 2.5, "down"], "expectError": "demand must be a whole number of units greater than zero" },
  { "name": "an unknown rounding mode is an error", "args": [27000, 400, "nearest"], "expectError": "unknown rounding mode" }
]