From 829cad084789f9a677bd749f79762616dbaed006 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 5 May 2026 13:27:38 +0200 Subject: [PATCH] jfjoch_test: Fix tests after change for default NXmxVDS --- tests/HDF5WritingTest.cpp | 2 +- tests/JFJochReaderTest.cpp | 6 +++--- writer/HDF5Objects.cpp | 34 +++++++++++++++++++--------------- writer/HDF5Objects.h | 11 ++++++++--- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/tests/HDF5WritingTest.cpp b/tests/HDF5WritingTest.cpp index eb4206bd..ac140c9c 100644 --- a/tests/HDF5WritingTest.cpp +++ b/tests/HDF5WritingTest.cpp @@ -698,7 +698,7 @@ TEST_CASE("HDF5DataType", "[HDF5]") { TEST_CASE("HDF5Writer_Link", "[HDF5][Full]") { DiffractionExperiment x(DetJF(1)); - x.ImagesPerTrigger(7).ImagesPerFile(2).Compression(CompressionAlgorithm::NO_COMPRESSION).FilePrefix("link"); + x.ImagesPerTrigger(7).ImagesPerFile(2).Compression(CompressionAlgorithm::NO_COMPRESSION).FilePrefix("link").SetFileWriterFormat(FileWriterFormat::NXmxLegacy); x.OverwriteExistingFiles(true); { RegisterHDF5Filter(); diff --git a/tests/JFJochReaderTest.cpp b/tests/JFJochReaderTest.cpp index 3b94a52f..3807a470 100644 --- a/tests/JFJochReaderTest.cpp +++ b/tests/JFJochReaderTest.cpp @@ -273,13 +273,13 @@ TEST_CASE("JFJochReader_Goniometer", "[HDF5][Full]") { DataMessage message{}; for (int i = 0; i < 5; i++) { message.image = CompressedImage(image, x.GetXPixelsNum(), x.GetYPixelsNum()); - message.number = 0; + message.number = i; REQUIRE_NOTHROW(file_set.WriteHDF5(message)); } EndMessage end_message; - end_message.max_image_number = 4; + end_message.max_image_number = 5; file_set.WriteHDF5(end_message); file_set.Finalize(); @@ -337,7 +337,7 @@ TEST_CASE("JFJochReader_GridScan", "[HDF5][Full]") { } EndMessage end_message; - end_message.max_image_number = 4; + end_message.max_image_number = 5; file_set.WriteHDF5(end_message); file_set.Finalize(); diff --git a/writer/HDF5Objects.cpp b/writer/HDF5Objects.cpp index 06cd4166..6c0d0cc0 100644 --- a/writer/HDF5Objects.cpp +++ b/writer/HDF5Objects.cpp @@ -26,23 +26,27 @@ HDF5Id::HDF5Id(const HDF5Id &other) { } } +HDF5DataSpace::HDF5DataSpace(ScalarTag) : HDF5Id() { + id = H5Screate(H5S_SCALAR); + if (id < 0) + throw JFJochException(JFJochExceptionCategory::HDF5, "Cannot create scalar dataspace"); + + ndims = 0; +} + HDF5DataSpace::HDF5DataSpace(const std::vector &dims, const std::vector &max_dims) : HDF5Id() { if (dims.empty()) throw JFJochException(JFJochExceptionCategory::HDF5, "Dimension vector empty"); - if ((dims.size() == 1) && (dims[0] == 1)) - id = H5Screate(H5S_SCALAR); - else { - if (max_dims.empty()) { - if (dims[0] == 0) - throw JFJochException(JFJochExceptionCategory::HDF5, "Value dimension cannot be 0"); + if (max_dims.empty()) { + if (dims[0] == 0) + throw JFJochException(JFJochExceptionCategory::HDF5, "Value dimension cannot be 0"); - id = H5Screate_simple(dims.size(), dims.data(), nullptr); - } else { - if (max_dims.size() != dims.size()) - throw JFJochException(JFJochExceptionCategory::HDF5, "Discrepancy in size of dims/max_dims"); - id = H5Screate_simple(dims.size(), dims.data(), max_dims.data()); - } + id = H5Screate_simple(dims.size(), dims.data(), nullptr); + } else { + if (max_dims.size() != dims.size()) + throw JFJochException(JFJochExceptionCategory::HDF5, "Discrepancy in size of dims/max_dims"); + id = H5Screate_simple(dims.size(), dims.data(), max_dims.data()); } if (id < 0) throw JFJochException(JFJochExceptionCategory::HDF5, "Cannot create dataspace"); @@ -326,7 +330,7 @@ void HDF5Fapl::SetVersionTo1p10orNewer() { template static HDF5Object& WriteOrCreateScalarAttr(HDF5Object& object, const std::string& name, const T& val) { - HDF5DataSpace dataspace; + HDF5DataSpace dataspace(HDF5DataSpace::Scalar); HDF5DataType datatype(val); hid_t attr_id = -1; @@ -373,7 +377,7 @@ static HDF5Object& WriteOrCreateScalarAttr(HDF5Object& object, const std::string } HDF5Object & HDF5Object::Attr(const std::string &name, const std::string &val) { - HDF5DataSpace dataspace; + HDF5DataSpace dataspace(HDF5DataSpace::Scalar); HDF5DataType datatype(val); hid_t attr_id = -1; @@ -656,7 +660,7 @@ std::unique_ptr HDF5Object::SaveScalar(const std::string &name, con std::unique_ptr HDF5Object::SaveScalar(const std::string &name, const char *val) { HDF5DataType data_type(val); - HDF5DataSpace data_space({1}); + HDF5DataSpace data_space(HDF5DataSpace::Scalar); auto dataset = std::make_unique(*this, name, data_type, data_space); dataset->Write(data_type, val); return dataset; diff --git a/writer/HDF5Objects.h b/writer/HDF5Objects.h index 3fda329c..f006f039 100644 --- a/writer/HDF5Objects.h +++ b/writer/HDF5Objects.h @@ -53,6 +53,11 @@ public: class HDF5DataSpace : public HDF5Id { uint8_t ndims = 1; public: + struct ScalarTag {}; + static constexpr ScalarTag Scalar{}; + + explicit HDF5DataSpace(ScalarTag); + explicit HDF5DataSpace(const std::vector& dims = {1}, const std::vector &max_dims = {}); explicit HDF5DataSpace(const HDF5DataSet& data_set); uint8_t GetNumOfDimensions() const; @@ -347,7 +352,7 @@ public: inline std::unique_ptr SaveScalar(const HDF5Object& parent, const std::string &name, const char* val) { HDF5DataType data_type(val); - HDF5DataSpace data_space({1}); + HDF5DataSpace data_space(HDF5DataSpace::Scalar); auto dataset = std::make_unique(parent, name, data_type, data_space); dataset->Write(data_type, val); return dataset; @@ -359,7 +364,7 @@ inline std::unique_ptr SaveScalar(const HDF5Object& parent, const s template std::unique_ptr SaveScalar(const HDF5Object& parent, const std::string &name, T val) { HDF5DataType data_type(val); - HDF5DataSpace data_space({1}); + HDF5DataSpace data_space(HDF5DataSpace::Scalar); auto dataset = std::make_unique(parent, name, data_type, data_space); dataset->Write(data_type, &val); return dataset; @@ -367,7 +372,7 @@ template std::unique_ptr SaveScalar(const HDF5Object& par template std::unique_ptr HDF5Object::SaveScalar(const std::string &name, T val) { HDF5DataType data_type(val); - HDF5DataSpace data_space({1}); + HDF5DataSpace data_space(HDF5DataSpace::Scalar); auto dataset = std::make_unique(*this, name, data_type, data_space); dataset->Write(data_type, &val); return dataset;