///|
/// An instrument records [frame, sensor] data with independently typed metadata.
fn main raise {
let doc = @h5.Document::new()
doc.add_group("/acquisition")
let samples = @h5.ArrayValue::from_floats(Simple([3, 4]), [
20.1, 20.3, 21.0, 22.0, 20.2, 20.4, 21.2, 22.1, 20.4, 20.5, 21.3, 22.4,
])
doc.add_dataset("/acquisition/temperature", samples)
doc.set_attribute(
"/acquisition/temperature",
"units",
@h5.ArrayValue::from_strings(Scalar, ["Celsius"], 8),
)
doc.set_attribute(
"/acquisition",
"revision",
@h5.ArrayValue::from_unsigned(Scalar, [2UL]),
)
doc.add_soft_link("/latest", "/acquisition/temperature")
let bytes = doc.encode()
let file = @h5.H5File::open(bytes)
let selection = @h5.Selection::new(Simple([3, 4]), [
{ start: 0, stride: 2, count: 2, block: 1, },
{ start: 1, stride: 1, count: 2, block: 1, },
])
let excerpt = file.read_selection("/latest", selection)
assert_eq(excerpt.dataspace(), Simple([2, 2]))
assert_eq(excerpt.float_at(0), 20.3)
assert_eq(excerpt.float_at(3), 21.3)
assert_eq(file.attributes(path="/acquisition")[0].value.unsigned_at(0), 2UL)
println(
"instrument: four selected values and unit metadata verified; HDF5 bytes=\{bytes.length()}",
)
}