Unlimited VDS mappings were refused, and printf-style source names
("f-%b.h5") were not expanded, so those regions read as fill (read-matrix
case 0470: 29 of 30 values wrong). All 7 virtual datasets in the libhdf5
test set use such mappings.
Implement H5Dvirtual.c's semantics in the vds module:
- %b is the block number, %% a literal %, other specifiers are an error;
block j of the virtual selection comes from the source named with j,
probing from 0 to the first missing source (printf gap 0);
- unlimited source/virtual selections are clipped to what the source's
current extent fills (H5S_hyper_get_clip_extent_match, partial last
block included);
- the extent is recomputed as H5Dget_space does (view "last available":
the largest clip, never below what limited mappings need), exposed as
vds::virtual_dataset_extent and used by Dataset::shape();
- a source in the other byte order is byte-swapped; other conversions stay
an error.
Tests: vds_interop::vds_printf_source_names,
vds_unlimited_mappings_follow_source_extents (h5py low-level API, earliest
and latest format) and vds_libhdf5_test_files (vds-eiger, 4_vds and
vds-percival-unlim-maxmin from HDF5's tools/test/testfiles/vds, committed
as fixtures) all compare shape and values with h5py; unit tests for the
clip arithmetic, name parsing and mapping rules.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
779 B
779 B
VDS test files from libhdf5
Copied unchanged from the HDF Group's HDF5 repository,
tools/test/testfiles/vds/ (the h5dump/h5ls VDS test data). HDF5 is
distributed under a BSD-style license (see COPYING in the HDF5 source).
| File | What it exercises |
|---|---|
vds-eiger.h5 + f-0.h5, f-3.h5 |
printf-style source name f-%b.h5; f-3.h5 lies past the first missing source and must be ignored (extent 5, not 20) |
4_vds.h5 + 4_0.h5..4_2.h5 |
printf-style 4_%b.h5 with version-2 (1.10 format) hyperslab selections |
vds-percival-unlim-maxmin.h5 + a.h5..d.h5 |
four interleaved unlimited mappings whose sources have different lengths |
Used by crates/clawhdf5/tests/vds_interop.rs::vds_libhdf5_test_files,
which compares our reads with h5py's.