#include "unit_test.h" #include #include "slow5_extra.h" int slow5_open_valid(void) { struct slow5_file *s5p = slow5_open("test/data/exp/two_rg/exp_default.slow5", "r"); ASSERT(s5p != NULL); ASSERT(s5p->format == SLOW5_FORMAT_ASCII); ASSERT(s5p->header != NULL); ASSERT(s5p->header->version.major == 0); ASSERT(s5p->header->version.minor == 1); ASSERT(s5p->header->version.patch == 0); ASSERT(s5p->header->num_read_groups == 2); ASSERT(s5p->header->data.num_attrs == 32); ASSERT(strcmp(slow5_hdr_get("asic_id", 1, s5p->header), "420170566") == 0); ASSERT(strcmp(slow5_hdr_get("experiment_type", 1, s5p->header), "") == 0); ASSERT(strcmp(slow5_hdr_get("file_version", 1, s5p->header), "0.6") == 0); ASSERT(slow5_close(s5p) == 0); return EXIT_SUCCESS; } int slow5_get_valid(void) { struct slow5_file *s5p = slow5_open("test/data/exp/two_rg/exp_default.slow5", "r"); ASSERT(s5p != NULL); ASSERT(slow5_idx_load(s5p) == 0); struct slow5_rec *read = NULL; ASSERT(slow5_get("40aac17d-56a6-44db-934d-c0dbb853e2cd", &read, s5p) == 0); ASSERT(strcmp(read->read_id, "40aac17d-56a6-44db-934d-c0dbb853e2cd") == 0); ASSERT(read->read_group == 1); ASSERT(read->digitisation == 8192); ASSERT(read->offset == 26); ASSERT(read->range == 1444.86); ASSERT(read->sampling_rate == 4000); ASSERT(read->len_raw_signal == 46971); ASSERT(read->raw_signal[0] == 1233); ASSERT(read->raw_signal[read->len_raw_signal - 1] == 390); slow5_rec_free(read); ASSERT(slow5_close(s5p) == 0); return EXIT_SUCCESS; } int slow5_to_blow5_uncomp(void) { struct slow5_file *from = slow5_open("test/data/exp/two_rg/exp_default.slow5", "r"); ASSERT(from != NULL); FILE *to = fopen("test/data/out/two_rg/out_default.blow5", "w"); ASSERT(to != NULL); slow5_press_method_t method = {SLOW5_COMPRESS_NONE, SLOW5_COMPRESS_NONE}; ASSERT(slow5_hdr_fwrite(to, from->header, SLOW5_FORMAT_BINARY, method) != -1); struct slow5_rec *read = NULL; int ret; while ((ret = slow5_get_next(&read, from)) == 0) { ASSERT(slow5_rec_fwrite(to, read, from->header->aux_meta, SLOW5_FORMAT_BINARY, NULL) != -1); } slow5_rec_free(read); ASSERT(ret == SLOW5_ERR_EOF); ASSERT(slow5_eof_fwrite(to) != -1); ASSERT(slow5_close(from) == 0); ASSERT(fclose(to) == 0); return EXIT_SUCCESS; } int slow5_to_blow5_zlib(void) { struct slow5_file *from = slow5_open("test/data/exp/two_rg/exp_default.slow5", "r"); ASSERT(from != NULL); FILE *to = fopen("test/data/out/two_rg/out_default_gzip.blow5", "w"); ASSERT(to != NULL); slow5_press_method_t method = {SLOW5_COMPRESS_ZLIB, SLOW5_COMPRESS_NONE}; ASSERT(slow5_hdr_fwrite(to, from->header, SLOW5_FORMAT_BINARY, method) != -1); struct slow5_rec *read = NULL; int ret; struct slow5_press *zlib = slow5_press_init(method); ASSERT(zlib != NULL); while ((ret = slow5_get_next(&read, from)) == 0) { ASSERT(slow5_rec_fwrite(to, read, from->header->aux_meta, SLOW5_FORMAT_BINARY, zlib) != -1); } slow5_rec_free(read); ASSERT(ret == SLOW5_ERR_EOF); ASSERT(slow5_eof_fwrite(to) != -1); slow5_press_free(zlib); ASSERT(slow5_close(from) == 0); ASSERT(fclose(to) == 0); return EXIT_SUCCESS; } int slow5_add_rg_data_valid(void) { struct slow5_file *s5p = slow5_open("test/data/exp/one_fast5/exp_1_default.slow5", "r"); ASSERT(s5p != NULL); struct slow5_file *s5p_two = slow5_open("test/data/exp/two_rg/exp_default.slow5", "r"); ASSERT(s5p_two != NULL); khash_t(slow5_s2s) *rg_two = slow5_hdr_get_data(1, s5p_two->header); ASSERT(rg_two != NULL); ASSERT(slow5_hdr_add_rg_data(s5p->header, rg_two) == 1); ASSERT(s5p->header->num_read_groups == 2); slow5_press_method_t method = {SLOW5_COMPRESS_NONE, SLOW5_COMPRESS_NONE}; slow5_hdr_print(s5p->header, SLOW5_FORMAT_ASCII, method); ASSERT(slow5_close(s5p) == 0); ASSERT(slow5_close(s5p_two) == 0); return EXIT_SUCCESS; } int main(void) { slow5_set_log_level(SLOW5_LOG_OFF); slow5_set_exit_condition(SLOW5_EXIT_OFF); struct command tests[] = { CMD(slow5_open_valid) CMD(slow5_get_valid) CMD(slow5_to_blow5_uncomp) CMD(slow5_to_blow5_zlib) CMD(slow5_add_rg_data_valid) }; return RUN_TESTS(tests); }