hyperpack 0.2.0

Exact-aware packing carriers and feasibility replay for the Hyper ecosystem
Documentation
use std::hint::black_box;
use std::time::Instant;

use hyperpack::{AxisBox3, Bin3, FeasibilityReplay3, Item3, ItemId, Placement3, Real};

fn r(value: i32) -> Real {
    value.into()
}

fn main() {
    let bin = Bin3 {
        size: AxisBox3::new(r(100), r(100), r(10)).unwrap(),
    };
    let mut items = Vec::new();
    let mut placements = Vec::new();
    for index in 0..50 {
        let id = ItemId::new(format!("item-{index}")).unwrap();
        items.push(Item3 {
            id: id.clone(),
            size: AxisBox3::new(r(2), r(2), r(1)).unwrap(),
        });
        placements.push(Placement3 {
            item: id,
            x: r((index % 25) * 2),
            y: r((index / 25) * 2),
            z: r(0),
        });
    }

    let iterations = 1_000_u32;
    let started = Instant::now();
    let mut checks = 0_usize;
    for _ in 0..iterations {
        let replay = FeasibilityReplay3::replay(black_box(&bin), &items, &placements).unwrap();
        checks ^= replay.containment_checks;
        checks ^= replay.no_overlap_checks;
    }
    let elapsed = started.elapsed();
    println!(
        "packing_feasibility_replay: {iterations} iterations in {elapsed:?} ({:?}/iter), checks={checks}",
        elapsed / iterations
    );
}