1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#include "unit_test.h"
#include <slow5/slow5.h>
#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);
}
|