void test_seq_nonacgt(){ seq_t S; seq_init( &S, "11ACGTNN7682394689NNTGCA11", "name"); seq_subject_init( &S); g_assert_cmpstr(S.S, ==, "ACGTTGCA"); g_assert_cmpuint(S.len, ==, 8 ); g_assert( FLAGS & F_NON_ACGT); g_assert_cmpstr(S.RS, ==, "TGCAACGT#ACGTTGCA"); g_assert_cmpuint(S.RSlen, ==, 8*2+1); g_assert( S.gc == 0.5); seq_free( &S); FLAGS = F_NONE; seq_init( &S, "@ACGT_!0TGCA ", "name"); seq_subject_init( &S); g_assert_cmpstr(S.S, ==, "ACGT!TGCA"); g_assert_cmpuint(S.len, ==, 9 ); g_assert( FLAGS & F_NON_ACGT); g_assert_cmpstr(S.RS, ==, "TGCA;ACGT#ACGT!TGCA"); g_assert_cmpuint(S.RSlen, ==, 9*2+1); seq_free( &S); FLAGS = F_NONE; }
void test_seq_full(){ seq_t S; seq_init( &S, "ACGTTGCA", "name"); int check = seq_subject_init( &S); g_assert_cmpint(check, ==, 0); g_assert_cmpstr(S.RS, ==, "TGCAACGT#ACGTTGCA"); g_assert_cmpuint(S.RSlen, ==, 8*2+1); g_assert( S.gc == 0.5); seq_free( &S); }
/** * @param sequences - An array of pointers to the sequences. * @param n - The number of sequences. */ void run(seq_t *sequences, size_t n) { seq_t *subject = &sequences[0]; esa_s E; if (seq_subject_init(subject) || esa_init(&E, subject)) { errx(1, "Failed to create index for %s.", subject->name); } size_t i = 0; // now compare every other sequence to the subject for (size_t j = 0; j < n; j++) { if (j == i) { continue; } // TODO: Provide a nicer progress indicator. if (FLAGS & F_EXTRA_VERBOSE) { #pragma omp critical { fprintf(stderr, "comparing %zu and %zu\n", i, j); } } size_t ql = sequences[j].len; if (FLAGS & F_FORWARD) { printf("> %s\n", sequences[j].name); dist_anchor(&E, sequences[j].S, ql, subject->gc); } if (FLAGS & F_REVCOMP) { char *R = revcomp(sequences[j].S, ql); printf("> %s Reverse\n", sequences[j].name); dist_anchor(&E, R, ql, subject->gc); free(R); } } esa_free(&E); seq_subject_free(subject); }