Functional Weave
Code in Rust

manufacturing.capacity@1.0.0

vectors.json

6,024 bytes · view raw

[
  {"name": "a week across five centres: CNC 1938 min capacity against 2000 routed (two loads) is 103.20%; the lathe's 479.52 min is overloaded by 480; a painted-out centre has no percentage; packing at 110% efficiency has 950 spare", "args": [[{"id": "CNC", "availableMinutes": 2400, "efficiencyBasisPoints": 9500, "utilisationBasisPoints": 8500}, {"id": "LATHE", "availableMinutes": 480, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 9990}, {"id": "PAINT", "availableMinutes": 480, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 0}, {"id": "PACK", "availableMinutes": 960, "efficiencyBasisPoints": 11000, "utilisationBasisPoints": 9000}, {"id": "ASSY", "availableMinutes": 2400, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 10000}], [{"workCentre": "CNC", "minutes": 1800}, {"workCentre": "ASSY", "minutes": 1200}, {"workCentre": "LATHE", "minutes": 480}, {"workCentre": "PAINT", "minutes": 30}, {"workCentre": "CNC", "minutes": 200}]], "expect": [{"workCentre": "CNC", "capacityMinutes": 1938, "loadMinutes": 2000, "spareMinutes": -62, "loadBasisPoints": 10320, "overloaded": true}, {"workCentre": "LATHE", "capacityMinutes": 479, "loadMinutes": 480, "spareMinutes": -1, "loadBasisPoints": 10010, "overloaded": true}, {"workCentre": "PAINT", "capacityMinutes": 0, "loadMinutes": 30, "spareMinutes": -30, "loadBasisPoints": null, "overloaded": true}, {"workCentre": "PACK", "capacityMinutes": 950, "loadMinutes": 0, "spareMinutes": 950, "loadBasisPoints": 0, "overloaded": false}, {"workCentre": "ASSY", "capacityMinutes": 2400, "loadMinutes": 1200, "spareMinutes": 1200, "loadBasisPoints": 5000, "overloaded": false}]},
  {"name": "a load exactly equal to capacity is full, not overloaded", "args": [[{"id": "ASSY", "availableMinutes": 2400, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 10000}], [{"workCentre": "ASSY", "minutes": 2400}]], "expect": [{"workCentre": "ASSY", "capacityMinutes": 2400, "loadMinutes": 2400, "spareMinutes": 0, "loadBasisPoints": 10000, "overloaded": false}]},
  {"name": "one minute over is an overload", "args": [[{"id": "ASSY", "availableMinutes": 2400, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 10000}], [{"workCentre": "ASSY", "minutes": 2401}]], "expect": [{"workCentre": "ASSY", "capacityMinutes": 2400, "loadMinutes": 2401, "spareMinutes": -1, "loadBasisPoints": 10004, "overloaded": true}]},
  {"name": "capacity 479.52 with 479 minutes of load fits: rounded down capacity and the exact one agree", "args": [[{"id": "LATHE", "availableMinutes": 480, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 9990}], [{"workCentre": "LATHE", "minutes": 479}]], "expect": [{"workCentre": "LATHE", "capacityMinutes": 479, "loadMinutes": 479, "spareMinutes": 0, "loadBasisPoints": 9989, "overloaded": false}]},
  {"name": "a centre with zero capacity and no load is not overloaded", "args": [[{"id": "PAINT", "availableMinutes": 480, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 0}], []], "expect": [{"workCentre": "PAINT", "capacityMinutes": 0, "loadMinutes": 0, "spareMinutes": 0, "loadBasisPoints": null, "overloaded": false}]},
  {"name": "a load percentage half-way between basis points rounds up: 1 minute on 20000 is 0.5 bp", "args": [[{"id": "BIG", "availableMinutes": 20000, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 10000}], [{"workCentre": "BIG", "minutes": 1}]], "expect": [{"workCentre": "BIG", "capacityMinutes": 20000, "loadMinutes": 1, "spareMinutes": 19999, "loadBasisPoints": 1, "overloaded": false}]},
  {"name": "no work centres, no result", "args": [[], []], "expect": []},
  {"name": "a load on a work centre not in the list is an error", "args": [[{"id": "CNC", "availableMinutes": 2400, "efficiencyBasisPoints": 9500, "utilisationBasisPoints": 8500}, {"id": "LATHE", "availableMinutes": 480, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 9990}, {"id": "PAINT", "availableMinutes": 480, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 0}, {"id": "PACK", "availableMinutes": 960, "efficiencyBasisPoints": 11000, "utilisationBasisPoints": 9000}, {"id": "ASSY", "availableMinutes": 2400, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 10000}], [{"workCentre": "WELD", "minutes": 60}]], "expectError": "a load names work centre \"WELD\", which is not in the list"},
  {"name": "a work centre listed twice is an error", "args": [[{"id": "CNC", "availableMinutes": 2400, "efficiencyBasisPoints": 9500, "utilisationBasisPoints": 8500}, {"id": "CNC", "availableMinutes": 480, "efficiencyBasisPoints": 10000, "utilisationBasisPoints": 10000}], []], "expectError": "duplicate work centre \"CNC\""},
  {"name": "utilisation over 100% is an error", "args": [[{"id": "CNC", "availableMinutes": 2400, "efficiencyBasisPoints": 9500, "utilisationBasisPoints": 10001}], []], "expectError": "utilisationBasisPoints of \"CNC\" must be a whole number from 0 to 10000"},
  {"name": "negative efficiency is an error", "args": [[{"id": "CNC", "availableMinutes": 2400, "efficiencyBasisPoints": -1, "utilisationBasisPoints": 8500}], []], "expectError": "efficiencyBasisPoints of \"CNC\" must be a whole number, not negative"},
  {"name": "negative available time is an error", "args": [[{"id": "CNC", "availableMinutes": -10, "efficiencyBasisPoints": 9500, "utilisationBasisPoints": 8500}], []], "expectError": "availableMinutes of \"CNC\" must be a whole number of minutes, not negative"},
  {"name": "a negative load is an error", "args": [[{"id": "CNC", "availableMinutes": 2400, "efficiencyBasisPoints": 9500, "utilisationBasisPoints": 8500}], [{"workCentre": "CNC", "minutes": -5}]], "expectError": "a load on \"CNC\" must be a whole number of minutes, not negative"},
  {"name": "a fractional load is an error", "args": [[{"id": "CNC", "availableMinutes": 2400, "efficiencyBasisPoints": 9500, "utilisationBasisPoints": 8500}], [{"workCentre": "CNC", "minutes": 2.5}]], "expectError": "a load on \"CNC\" must be a whole number of minutes, not negative"}
]