boolean element_is_key(Key key, Element e, short kmer_size) { if (key == NULL) { printf("Do not call element_is_key wth a NULL pointer. Exiting\n"); exit(1); } return binary_kmer_comparison_operator(*key, e.kmer); }
Orientation db_node_get_orientation(BinaryKmer * k, Element * e, short kmer_size) { if (binary_kmer_comparison_operator(e->kmer, *k) == true) { return forward; } BinaryKmer tmp_kmer; if (binary_kmer_comparison_operator(e->kmer, *(binary_kmer_reverse_complement (k, kmer_size, &tmp_kmer))) == true) { return reverse; } printf("programming error - you have called db_node_get_orientation with a kmer that is neither equal to the kmer in this node, nor its rev comp\n"); char tmpseq1[kmer_size]; char tmpseq2[kmer_size]; printf("Arg 1 Kmer is %s and Arg 2 node kmer is %s\n", binary_kmer_to_seq(k, kmer_size, tmpseq1), binary_kmer_to_seq(&(e->kmer), kmer_size, tmpseq2)); exit(1); }
void test_hash_table_find_or_insert() { short kmer_size; long long max_key_given_kmer_size; //adds binary kmers to a hash, then tries to find them //will go through all possible bin kmers given the kmer_size, stepping // with granulatiry step. Since for kmer_size large (eg 21) it takes to long to try ALL // possible 21-mers, the last argument allows you to specify the largest one to test BinaryKmer tmp_kmer; BinaryKmer tmp_kmer2; void test(short kmer_size, int num_bits, int bucket, int max_tries, int step, long long max_kmer_to_test) { int number_of_bits = num_bits; int bucket_size = bucket; long long bad_reads = 0; int max_retries = max_tries; boolean found = false; HashTable* hash_table = hash_table_new(number_of_bits,bucket_size,max_retries,kmer_size); long long i; for (i=0; i< max_kmer_to_test; i++) { BinaryKmer b; binary_kmer_initialise_to_zero(&b); b[NUMBER_OF_BITFIELDS_IN_BINARY_KMER-1]=(bitfield_of_64bits) i; hash_table_find_or_insert(element_get_key(&b, hash_table->kmer_size, &tmp_kmer),&found, hash_table); if (found==false) { CU_ASSERT(binary_kmer_comparison_operator(b,*(element_get_key(&b, hash_table->kmer_size, &tmp_kmer)) ) ); } } Element* e=NULL; for (i=0; i< max_kmer_to_test; i=i+step) { BinaryKmer b; binary_kmer_initialise_to_zero(&b); b[NUMBER_OF_BITFIELDS_IN_BINARY_KMER-1]=(bitfield_of_64bits) i; e = hash_table_find(element_get_key(&b,hash_table->kmer_size,&tmp_kmer), hash_table); CU_ASSERT(e!=NULL); if (e !=NULL) { CU_ASSERT(binary_kmer_comparison_operator(e->kmer, *element_get_key(&b, hash_table->kmer_size, &tmp_kmer2)) ); } else { die("Error: e is NULL for i=%lld - unable to find\n",i); } } hash_table_free(&hash_table); CU_ASSERT(hash_table == NULL); }