1 /*
2 Copyright (C) 2021 The Blosc Developers <blosc@blosc.org>
3 https://blosc.org
4 License: BSD 3-Clause (see LICENSE.txt)
5 */
6
7 #include "test_common.h"
8 #include "cutest.h"
9
CUTEST_TEST_DATA(small_chunks)10 CUTEST_TEST_DATA(small_chunks) {
11 bool fix_windows_compilation;
12 };
13
CUTEST_TEST_SETUP(small_chunks)14 CUTEST_TEST_SETUP(small_chunks) {
15 blosc_init();
16 }
17
18
CUTEST_TEST_TEST(small_chunks)19 CUTEST_TEST_TEST(small_chunks) {
20 int rc;
21
22 int8_t itemsize = 8;
23 int32_t nitems = 50 * 1000;
24 int32_t chunksize = 10 * itemsize;
25 int32_t blocksize = 10 * itemsize;
26 int64_t nchunks = nitems * itemsize / chunksize;
27
28 blosc2_cparams cparams = BLOSC2_CPARAMS_DEFAULTS;
29 cparams.blocksize = blocksize;
30 blosc2_storage storage = BLOSC2_STORAGE_DEFAULTS;
31 storage.cparams = &cparams;
32 storage.urlpath = "ex_update.caterva";
33 blosc2_remove_dir("ex_update.caterva");
34
35 storage.contiguous = false;
36 blosc2_schunk *sc = blosc2_schunk_new(&storage);
37
38 int32_t chunk_nbytes = itemsize + BLOSC_MAX_OVERHEAD;
39 uint8_t *chunk = malloc(chunk_nbytes);
40 int64_t rep_val = 8;
41 blosc2_chunk_repeatval(cparams, chunksize, chunk, chunk_nbytes, &rep_val);
42
43 for (int i = 0; i < nchunks; ++i) {
44 rc = blosc2_schunk_append_chunk(sc, chunk, true);
45 CUTEST_ASSERT("Can not append chunk", rc == i + 1);
46 }
47 free(chunk);
48
49 bool needs_free;
50 rc = blosc2_schunk_get_chunk(sc, 999, &chunk, &needs_free);
51 if (rc < 0) {
52 return BLOSC2_ERROR_FAILURE;
53 }
54 CUTEST_ASSERT("Can not get chunk", rc >= 0);
55
56 if (needs_free) {
57 free(chunk);
58 }
59
60 blosc2_schunk_free(sc);
61
62 blosc2_remove_dir("ex_update.caterva");
63
64 blosc_destroy();
65
66 return 0;
67
68 }
69
CUTEST_TEST_TEARDOWN(small_chunks)70 CUTEST_TEST_TEARDOWN(small_chunks) {
71 blosc_destroy();
72 }
73
74
main()75 int main() {
76 CUTEST_TEST_RUN(small_chunks)
77 }
78