def test_raises_if_first_kmer_cannot_be_connected_to_second_kmer(self): # given builder = EmptyKmerBuilder(1) kmer1 = builder.build_or_get('AAA') kmer2 = builder.build_or_get('ACC') # when/then with pytest.raises(ValueError): connect_kmers(kmer1, kmer2, 0)
def test_raises_if_equal_kmers_are_not_the_same_object(self): # given kmer1 = EmptyKmerBuilder(1).build_or_get('AAA') kmer2 = EmptyKmerBuilder(1).build_or_get('AAA') assert kmer1 is not kmer2 # when/then with pytest.raises(ValueError): connect_kmers(kmer1, kmer2, 0)
def test_connects_kmer_to_itself(self): # given kmer = EmptyKmerBuilder(1).build_or_get('AAA') # when connect_kmers(kmer, kmer, 0) # then assert kmer.edges[0].is_edge('a') assert kmer.edges[0].is_edge('A')
def test_connects_kmer_to_itself_for_one_sided_connection(self): # given kmer = EmptyKmerBuilder(1).build_or_get('TAA') # when connect_kmers(kmer, kmer, 0) # then assert kmer.edges[0].is_edge('t') for letter in 'acgACGT': assert not kmer.edges[0].is_edge(letter)
def test_works_on_edit_distance_one_forward_in_any_order( self, data, letter, num_colors, add_letter_to_end, add_letter_to_revcomp): # given builder = EmptyKmerBuilder(num_colors) kmer1 = builder.build_or_get(data.draw(kmer_strings())) assert kmer1.kmer < reverse_complement(kmer1.kmer) if add_letter_to_revcomp: kmer1_string = reverse_complement(kmer1.kmer) else: kmer1_string = kmer1.kmer if add_letter_to_end: kmer2_string = kmer1_string[1:] + letter else: kmer2_string = letter + kmer1_string[:-1] kmer2 = builder.build_or_get(kmer2_string) if add_letter_to_revcomp: kmer1_edge_letter = reverse_complement(letter) else: kmer1_edge_letter = letter.lower() if add_letter_to_end: kmer1_edge_letter = kmer1_edge_letter.swapcase() kmer2_edge_letter = kmer1_string[0].lower() else: kmer2_edge_letter = kmer1_string[-1] if reverse_complement(kmer2_string) < kmer2_string: kmer2_edge_letter = reverse_complement( kmer2_edge_letter).swapcase() for color in range(num_colors): # when connect_kmers(kmer1, kmer2, color) # then assert kmer1.edges[color].is_edge(kmer1_edge_letter) assert kmer2.edges[color].is_edge(kmer2_edge_letter) # let's also test connected check if not add_letter_to_revcomp == add_letter_to_end: assert kmer1.has_outgoing_edge_to_kmer_in_color(kmer2, color) else: assert kmer1.has_incoming_edge_from_kmer_in_color(kmer2, color) # and let's check disconnect kmers disconnect_kmers(kmer1, kmer2, [color]) assert not kmer1.edges[color].is_edge(kmer1_edge_letter) assert not kmer2.edges[color].is_edge(kmer2_edge_letter)
def test_aag_act_connection(self): # given builder = EmptyKmerBuilder(1) kmer1 = builder.build_or_get('AAG') kmer2 = builder.build_or_get('ACT') # when connect_kmers(kmer1, kmer2, 0) # then assert kmer1.edges[0].is_edge('T') assert kmer2.edges[0].is_edge('T')