///|
fn main raise {
  let p = @cutstock.problem([@cutstock.demand("part", "wood", 49, 4)], [
    @cutstock.stock("board", "wood", 100, 10, -1),
  ]).unwrap()
  let cases = @cutstock.kerf_scenarios(p, [0, 1, 2]).unwrap()
  assert_eq(cases[0].cost, Some(20))
  assert_eq(cases[2].cost, Some(40))
  for item in cases {
    println(
      "kerf=" +
      item.kerf.to_string() +
      " status=" +
      @cutstock.status_name(item.status),
    )
  }
  let scarce = @cutstock.with_inventory(p, [1]).unwrap()
  assert_eq(@cutstock.solve(scarce).unwrap().status(), @cutstock.Infeasible)
  let budgeted = @cutstock.solve(p, limits={ patterns: 1, nodes: 1, }).unwrap()
  assert_false(budgeted.status() == @cutstock.Optimal)
  println(@cutstock.text_report(p, budgeted).unwrap())
}