diff --git a/test/test_xchunk_store_manager.cpp b/test/test_xchunk_store_manager.cpp index 822276d..db2aafd 100644 --- a/test/test_xchunk_store_manager.cpp +++ b/test/test_xchunk_store_manager.cpp @@ -37,6 +37,17 @@ namespace xt } } + template + inline void check_file_equal(const std::string& path, const T&& ref) + { + std::ifstream in_file; + in_file.open(path); + xt::xarray data; + data = xt::load_bin(in_file); + EXPECT_EQ(data, ref); + in_file.close(); + } + TEST(xchunked_array, disk_array) { std::vector shape = {4, 4}; @@ -59,21 +70,18 @@ namespace xt std::ifstream in_file; xt::xarray data; in_file.open(chunk_dir + "/1.0"); - auto i1 = xt::xistream_wrapper(in_file); - data = xt::load_bin(i1); + data = xt::load_bin(in_file); EXPECT_EQ(data(1), v1); in_file.close(); a1.chunks().flush(); in_file.open(chunk_dir + "/0.1"); - auto i2 = xt::xistream_wrapper(in_file); - data = xt::load_bin(i2); + data = xt::load_bin(in_file); EXPECT_EQ(data(2), v2); in_file.close(); in_file.open(chunk_dir + "/0.0"); - auto i3 = xt::xistream_wrapper(in_file); - data = xt::load_bin(i3); + data = xt::load_bin(in_file); EXPECT_EQ(data(0), v3); in_file.close(); } @@ -125,6 +133,34 @@ namespace xt } } + TEST(xchunked_array, chunked_assign_chunked) + { + std::vector shape = {4, 4}; + std::vector chunk_shape = {2, 2}; + std::string chunk_dir1 = "files4"; + fs::create_directory(chunk_dir1); + auto a1 = chunked_file_array>(shape, chunk_shape, chunk_dir1); + std::string chunk_dir2 = "files5"; + fs::create_directory(chunk_dir2); + auto a2 = chunked_file_array>(shape, chunk_shape, chunk_dir2); + auto a3 = arange(4 * 4).reshape({4, 4}); + noalias(a2) = a3; + a2.chunks().flush(); + // check that a2 has correct chunks + check_file_equal(chunk_dir2 + "/0.0", xt::xarray({0, 1, 4, 5})); + check_file_equal(chunk_dir2 + "/1.0", xt::xarray({8, 9, 12, 13})); + check_file_equal(chunk_dir2 + "/0.1", xt::xarray({2, 3, 6, 7})); + check_file_equal(chunk_dir2 + "/1.1", xt::xarray({10, 11, 14, 15})); + + noalias(a1) = a2; + a1.chunks().flush(); + // check that a1 has correct chunks + check_file_equal(chunk_dir1 + "/0.0", xt::xarray({0, 1, 4, 5})); + check_file_equal(chunk_dir1 + "/1.0", xt::xarray({8, 9, 12, 13})); + check_file_equal(chunk_dir1 + "/0.1", xt::xarray({2, 3, 6, 7})); + check_file_equal(chunk_dir1 + "/1.1", xt::xarray({10, 11, 14, 15})); + } + TEST(xchunked_array, shape_initializer_list) { std::vector shape = {4, 4};