diff options
Diffstat (limited to 'src/libdisfluid/disfluid-tests.h')
-rw-r--r-- | src/libdisfluid/disfluid-tests.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/libdisfluid/disfluid-tests.h b/src/libdisfluid/disfluid-tests.h index 0843404..fc16d4c 100644 --- a/src/libdisfluid/disfluid-tests.h +++ b/src/libdisfluid/disfluid-tests.h @@ -21,6 +21,7 @@ static inline int test_append_count (const char *filename, size_t *n); # include "string-desc.h" # include "disfluid-append-only-file.h" # include "disfluid-trie.h" +# include "disfluid-cache-group.h" # define BYTES * 1 @@ -839,6 +840,57 @@ START_TEST (test_aof_trie_fold) END_TEST /* *INDENT-ON* */ +/* *INDENT-OFF* */ +START_TEST (test_aof_cache_group) +/* *INDENT-ON* */ + +{ + /* The group has 2 entries: 8001 and 8002. */ + char filename[] = "/tmp/test-ao-cache-group-XXXXXX"; + int file = mkstemp (filename); + ck_assert_int_ge (file, 0); + static const char *magic_data = "disfluid c.group"; + const string_desc_t file_magic = { + ._data = (char *) magic_data, + ._nbytes = strlen (magic_data) + }; + int error = ao_file_prepare (file, file_magic); + ck_assert_int_eq (error, 0); + size_t top; + error = ao_file_lock_for_writing (file, &top); + ck_assert_int_eq (error, 0); + ck_assert_int_eq (top, 0); + static const size_t expected_offsets[] = { 8001, 8002 }; + size_t final_offset = 42; + error = + ao_cache_group_push (file, &final_offset, + sizeof (expected_offsets) / + sizeof (expected_offsets[0]), expected_offsets); + ck_assert_int_eq (error, 0); + /* The array is 16 bytes, and the header too. */ + ck_assert_int_eq (final_offset, 32); + /* Commit */ + error = ao_file_commit_transaction (file); + ck_assert_int_eq (error, 0); + /* Check */ + size_t actual_n_offsets = 42; + size_t *actual_offsets = NULL; + error = + ao_cache_group_read (file, final_offset, &actual_n_offsets, + &actual_offsets); + ck_assert_int_eq (error, 0); + ck_assert_int_eq (actual_n_offsets, 2); + ck_assert_ptr_nonnull (actual_offsets); + ck_assert_int_eq (actual_offsets[0], 8001); + ck_assert_int_eq (actual_offsets[1], 8002); + FREE (actual_offsets); + remove (filename); + close (file); +} +/* *INDENT-OFF* */ +END_TEST +/* *INDENT-ON* */ + static inline char * tests_read_whole_file (int file) { @@ -896,6 +948,7 @@ run_tests (size_t *n_tests, size_t *n_errors) tcase_add_test (aof, test_aof_recover); tcase_add_test (aof, test_aof_can_read_locked_file); tcase_add_test (aof, test_aof_trie_fold); + tcase_add_test (aof, test_aof_cache_group); suite_add_tcase (suite, aof); SRunner *runner = srunner_create (suite); char log_file_name[] = "/tmp/disfluid-unit-tests-XXXXXX"; |