///|
/// Extract a spatial transect from a simulation cube [time, latitude, longitude].
fn main raise {
  let shape : @h5.Dataspace = Simple([4, 3, 5])
  let values = @h5.ArrayValue::from_floats(
    shape,
    Array::makei(60, i => i.to_double() * 0.25),
  )
  let doc = @h5.Document::new()
  doc.add_dataset("/pressure", values.with_byte_order(Big))
  doc.set_attribute(
    "/pressure",
    "axes",
    @h5.ArrayValue::from_strings(
      Simple([3]),
      ["time", "latitude", "longitude"],
      12,
    ),
  )
  let file = @h5.H5File::open(doc.encode())
  let selection = @h5.Selection::new(shape, [
    { start: 1, stride: 2, count: 2, block: 1, },
    { start: 1, stride: 1, count: 1, block: 1, },
    { start: 0, stride: 1, count: 5, block: 1, },
  ])
  let selected = file.read_selection("/pressure", selection)
  assert_eq(selected.dataspace(), Simple([2, 1, 5]))
  assert_eq(selected.float_at(0), 5.0)
  assert_eq(selected.float_at(9), 13.5)
  let spans = selection.spans(values.datatype())
  assert_eq(spans.length(), 2)
  assert_eq(
    file.attributes(path="/pressure")[0].value.string_at(2),
    "longitude",
  )
  println("simulation: 3D transect verified using two contiguous byte spans")
}