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