Functional Weave
Code in Rust

inventory.pallet-fit@1.0.0

vectors.json

5,513 bytes · view raw

[
  {"name": "600x400 on a UK pallet: a plain grid gets 4 a layer, turning one row gets 5", "args": [{"lengthMm": 600, "widthMm": 400, "heightMm": 300, "weightGrams": 12000}, "uk", 1500, 1000000, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 1000, "cartonHeightMm": 300, "perLayer": 5, "layers": 5, "perPallet": 25, "limitedBy": "height", "loadHeightMm": 1500, "loadWeightGrams": 300000}},
  {"name": "600x400 on a EUR pallet is the classic 4 a layer", "args": [{"lengthMm": 600, "widthMm": 400, "heightMm": 300, "weightGrams": 12000}, "euro", 1500, 1000000, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 800, "cartonHeightMm": 300, "perLayer": 4, "layers": 5, "perPallet": 20, "limitedBy": "height", "loadHeightMm": 1500, "loadWeightGrams": 240000}},
  {"name": "400x300 on a EUR pallet: 8 a layer turned the other way, not 6", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 250, "weightGrams": 5000}, "euro", 1600, null, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 800, "cartonHeightMm": 250, "perLayer": 8, "layers": 6, "perPallet": 48, "limitedBy": "height", "loadHeightMm": 1500, "loadWeightGrams": 240000}},
  {"name": "weight binds first: 25 cartons of 20 kg reach 500 kg in the fourth layer", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 250, "weightGrams": 20000}, "euro", 1600, 500000, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 800, "cartonHeightMm": 250, "perLayer": 8, "layers": 6, "perPallet": 25, "limitedBy": "weight", "loadHeightMm": 1000, "loadWeightGrams": 500000}},
  {"name": "upright: 500x300x200 is 8 a layer, 7 layers in 1500 mm, 56 cartons", "args": [{"lengthMm": 500, "widthMm": 300, "heightMm": 200, "weightGrams": 1000}, "uk", 1500, null, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 1000, "cartonHeightMm": 200, "perLayer": 8, "layers": 7, "perPallet": 56, "limitedBy": "height", "loadHeightMm": 1400, "loadWeightGrams": 56000}},
  {"name": "laid on its side the same carton gets 60: 12 a layer, 5 layers of 300 mm", "args": [{"lengthMm": 500, "widthMm": 300, "heightMm": 200, "weightGrams": 1000}, "uk", 1500, null, false], "expect": {"palletLengthMm": 1200, "palletWidthMm": 1000, "cartonHeightMm": 300, "perLayer": 12, "layers": 5, "perPallet": 60, "limitedBy": "height", "loadHeightMm": 1500, "loadWeightGrams": 60000}},
  {"name": "a carton longer than the deck does not fit at all", "args": [{"lengthMm": 1300, "widthMm": 500, "heightMm": 500, "weightGrams": 1000}, "euro", 1600, null, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 800, "cartonHeightMm": 500, "perLayer": 0, "layers": 3, "perPallet": 0, "limitedBy": "footprint", "loadHeightMm": 0, "loadWeightGrams": 0}},
  {"name": "a carton taller than the load height makes no layers", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 1800, "weightGrams": 1000}, "euro", 1600, null, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 800, "cartonHeightMm": 1800, "perLayer": 8, "layers": 0, "perPallet": 0, "limitedBy": "height", "loadHeightMm": 0, "loadWeightGrams": 0}},
  {"name": "a weight limit below one carton loads nothing", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 250, "weightGrams": 20000}, "euro", 1600, 10000, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 800, "cartonHeightMm": 250, "perLayer": 8, "layers": 6, "perPallet": 0, "limitedBy": "weight", "loadHeightMm": 0, "loadWeightGrams": 0}},
  {"name": "weightless cartons are never weight-limited", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 250, "weightGrams": 0}, "euro", 1600, 1, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 800, "cartonHeightMm": 250, "perLayer": 8, "layers": 6, "perPallet": 48, "limitedBy": "height", "loadHeightMm": 1500, "loadWeightGrams": 0}},
  {"name": "a perfect fit: 1200x1000 fills a UK layer with one carton", "args": [{"lengthMm": 1200, "widthMm": 1000, "heightMm": 500, "weightGrams": 30000}, "uk", 1000, null, true], "expect": {"palletLengthMm": 1200, "palletWidthMm": 1000, "cartonHeightMm": 500, "perLayer": 1, "layers": 2, "perPallet": 2, "limitedBy": "height", "loadHeightMm": 1000, "loadWeightGrams": 60000}},
  {"name": "a zero dimension is an error", "args": [{"lengthMm": 0, "widthMm": 300, "heightMm": 250, "weightGrams": 1000}, "euro", 1600, null, true], "expectError": "lengthMm must be a whole number greater than zero"},
  {"name": "a fractional dimension is an error", "args": [{"lengthMm": 400, "widthMm": 300.5, "heightMm": 250, "weightGrams": 1000}, "euro", 1600, null, true], "expectError": "widthMm must be a whole number greater than zero"},
  {"name": "a negative weight is an error", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 250, "weightGrams": -1}, "euro", 1600, null, true], "expectError": "weightGrams must be a whole number, not negative"},
  {"name": "a zero load height is an error", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 250, "weightGrams": 1000}, "euro", 0, null, true], "expectError": "maxLoadHeightMm must be a whole number greater than zero"},
  {"name": "a negative weight limit is an error", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 250, "weightGrams": 1000}, "euro", 1600, -5, true], "expectError": "maxLoadWeightGrams must be a whole number, not negative"},
  {"name": "an unknown pallet is an error", "args": [{"lengthMm": 400, "widthMm": 300, "heightMm": 250, "weightGrams": 1000}, "us", 1600, null, true], "expectError": "unknown pallet \"us\": expected uk or euro"}
]