void test_next_fragment_single() { char *sam_filename = "testdata/test_next_fragment_single.sam"; samfile_t *samfile = samopen(sam_filename, "r", NULL); bam1_t *reads[] = { bam_init1(), bam_init1() }; int len; len = next_fragment(reads, samfile, 2); assert_equals(1, len, "Num reads"); assert_str_equals("seq.1", bam1_qname(reads[0]), "qname"); len = next_fragment(reads, samfile, 2); assert_equals(1, len, "Num reads"); assert_str_equals("seq.2", bam1_qname(reads[0]), "qname"); len = next_fragment(reads, samfile, 2); assert_equals(0, len, "Num reads"); samclose(samfile); }
void feeder(struct dpipe *source, struct FeederState *state) { if (!state->file || feof(state->file)) next_fragment(source, state); if (state->file) { { char * const transfer = emalloc(BUFSIZ, WHERE(feeder)); const int count = efread(transfer, 1, BUFSIZ, state->file, WHERE(feeder)); if (count > 0) dpipe_Put(source, transfer, count); else dpipe_Close(source); } } else dpipe_Close(source); }