TEST_F(Hdf5Test, WriteDataset) { { hdf::HDFFile<> file(file_name_, hdf::HDFFile<>::truncate); std::vector<hsize_t> dims; dims.resize(2); dims[0] = 3; dims[1] = 2; hdf::Slab<2> filespace(dims); auto datasetint = file.createDataset< int>("/test", filespace); } hdf::HDFFile<> file(file_name_); auto dataset = file.openDataset("/test"); std::vector<int> testdata(6); testdata[0] = 1; testdata[1] = 2; testdata[2] = 3; testdata[3] = 4; testdata[4] = 5; testdata[5] = 6; dataset->writeData(testdata); { std::vector<hsize_t> dims; dims.resize(2); dims[0] = 2; dims[1] = 3; hdf::Slab<2> filespace(dims); auto datasetint = file.createDataset< int>("/test2", filespace); datasetint->writeData(testdata); std::vector<int> readData2; datasetint->readData(readData2); ASSERT_TRUE(readData2.size() == 6); ASSERT_TRUE(readData2[0] == 1); ASSERT_TRUE(readData2[1] == 2); ASSERT_TRUE(readData2[2] == 3); ASSERT_TRUE(readData2[3] == 4); } std::vector<int> readData; dataset->readData(readData); ASSERT_TRUE(readData.size() == 6); ASSERT_TRUE(readData[0] == 1); ASSERT_TRUE(readData[1] == 2); ASSERT_TRUE(readData[2] == 3); ASSERT_TRUE(readData[3] == 4); }
void test_large_dataset_write() { hdf::HDFFile<> file("test.h5", hdf::HDFFile<>::truncate); std::size_t nElements = 1ul << 31; std::vector<hsize_t> dims; dims.resize(2); dims[1] = 3; dims[0] = nElements; hdf::Slab<2> filespace(dims); auto dataset = file.createDataset<int>("/test", filespace); { std::vector<int> testdata(nElements*3); for (std::size_t i =0; i < nElements*3; ++i) { testdata[i] = 1; } dataset->writeData(testdata); } std::vector<int> readData; dataset->readData(readData); assert(readData.size() == nElements*3); assert(readData[0] == 1); assert(readData[1] == 1); assert(readData[2] == 1); assert(readData[3] == 1); }
inline typename boost::enable_if<is_multi_array<T>, void>::type write_dataset(dataset& dset, T const& value, slice const& file_slice) { // --- create memory dataspace for the complete input array h5xx::dataspace memspace = h5xx::create_dataspace(value); // --- create file dataspace and select the slice (hyperslab) from it h5xx::dataspace filespace(dset); filespace.select(file_slice); write_dataset(dset, value, memspace, filespace); }
typename boost::enable_if<is_multi_array<T>, void>::type read_dataset(dataset & data_set, T & array, slice const& file_slice) { // --- create memory dataspace for the complete input array h5xx::dataspace memspace = h5xx::create_dataspace(array); // --- create file dataspace and select the slice (hyperslab) from it h5xx::dataspace filespace(data_set); filespace.select(file_slice); // --- read_dataset(data_set, array, memspace, filespace); }
TEST_F(Hdf5Test, OpenDataset) { hdf::HDFFile<> file(file_name_, hdf::HDFFile<>::truncate); { std::vector<hsize_t> dims; dims.resize(2); dims[0] = 15; dims[1] = 5; hdf::Slab<2> filespace(dims); auto datasetint = file.createDataset<int>("/test", filespace); } auto dataset = file.openDataset("/test"); }
TEST_F(Hdf5Test, CreateDataset) { hdf::HDFFile<> file(file_name_, hdf::HDFFile<>::truncate); std::vector<hsize_t> dims; dims.resize(2); dims[0] = 20; dims[1] = 5; hdf::Slab<2> filespace(dims); auto datasetint = file.createDataset<int>( "/test", filespace); auto datasetfloat = file.createDataset< float>("/test-float", filespace); auto datasetdouble = file.createDataset<double>("/test-double", filespace); }