-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_nucleotide.cpp
69 lines (63 loc) · 1.84 KB
/
test_nucleotide.cpp
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
#include <iostream>
#include <vector>
#include <initializer_list>
#include "edit_distance.h"
struct DNABase
{
DNABase(char b)
{
if (b == 'A' || b == 'T' || b == 'C' || b == 'G')
base = b;
else
std::cerr << "Illegal base: " << b << "\n";
}
friend bool operator==(DNABase x, DNABase y);
char base;
};
class Nucleotide
{
public:
Nucleotide(std::initializer_list<DNABase> seq) : _seq(seq) {}
std::vector<DNABase>::iterator begin() { return _seq.begin(); }
std::vector<DNABase>::iterator end() { return _seq.end(); }
private:
std::vector<DNABase> _seq;
};
bool operator==(DNABase x, DNABase y)
{
if ((x.base == 'A' && y.base == 'T') || (x.base == 'T' && y.base == 'A') ||
(x.base == 'C' && y.base == 'G') || (x.base == 'G' && y.base == 'C')) {
return true;
}
return false;
}
void print_nuc(Nucleotide n)
{
std::cout << "{ ";
for (DNABase item: n) {
std::cout << item.base << " ";
}
std::cout << "}";
std::cout << "\n";
}
int main()
{
int ham, lev, osa;
Nucleotide a1 {'A', 'G', 'C', 'T', 'G'};
Nucleotide b1 {'C', 'T', 'A', 'G'};
EditDistance d1(std::begin(a1), std::end(a1), std::begin(b1), std::end(b1));
ham = d1.hamming();
lev = d1.lev();
osa = d1.osa();
std::cout << "Test Case 1\n";
std::cout << "Nucleotides:\n";
print_nuc(a1);
print_nuc(b1);
std::cout << "User-defined object: Nucleotide\n";
std::cout << "------------------------------------------------------\n";
std::cout << "hamming distance : " << ham << " (N/A)" << "\n";
std::cout << "levenshtein distance : " << lev << "\n";
std::cout << "optimal string alignment distance : " << osa << "\n";
std::cout << "------------------------------------------------------\n\n";
return 0;
}