1 module dparasail; 2 3 public import dparasail.alignment; 4 public import dparasail.result; 5 6 7 unittest 8 { 9 import std.stdio; 10 import std.math : approxEqual; 11 12 auto p = Parasail("dnafull", 3, 2); 13 auto q = p.sw_striped("GATTA", "GACTA"); 14 15 assert(q.queryPosition == 0); 16 assert(q.position == 0); 17 assert(q.score == 16); 18 assert(q.cigar.alignedLength == 5); 19 assert(q.cigar.toString == "2=1X2="); 20 q.writeAlignment; 21 assert(approxEqual(q.identity, 0.8)); 22 assert(approxEqual(q.similarity, 1.0)); 23 assert(approxEqual(q.gapRate, 0.0)); 24 25 26 auto q2 = p.sw_striped("GGCTTCTGATCAGGCTTCT", "GACTA"); 27 28 assert(q2.queryPosition == 7); 29 assert(q2.position == 0); 30 assert(q2.score == 14); 31 assert(q2.cigar.alignedLength == 5); 32 assert(q2.cigar.toString == "7S2=1D1=1I1=7S"); 33 q2.writeAlignment; 34 assert(approxEqual(q2.identity, 0.667)); 35 assert(approxEqual(q2.similarity, 0.667)); 36 assert(approxEqual(q2.gapRate, 0.333)); 37 38 auto q3 = p.sw_striped("GACTAA", "GGCTTCTGATCAGGCTTCT"); 39 40 assert(q3.queryPosition == 0); 41 assert(q3.position == 7); 42 assert(q3.score == 14); 43 assert(q3.cigar.alignedLength == 5); 44 assert(q3.cigar.toString == "2=1D1=1I1=1S"); 45 q3.writeAlignment; 46 assert(approxEqual(q3.identity, 0.667)); 47 assert(approxEqual(q3.similarity, 0.667)); 48 assert(approxEqual(q3.gapRate, 0.333)); 49 50 auto q4 = p.nw_scan("GATTA", "GACTA"); 51 52 assert(q4.queryPosition == 0); 53 assert(q4.position == 0); 54 assert(q4.score == 16); 55 assert(q4.cigar.alignedLength == 5); 56 assert(q4.cigar.toString == "2=1X2="); 57 q4.writeAlignment; 58 assert(approxEqual(q4.identity, 0.8)); 59 assert(approxEqual(q4.similarity, 1.0)); 60 assert(approxEqual(q4.gapRate, 0.0)); 61 62 auto q5 = p.nw_scan("GGCTTCTGATCAGGCTTCT", "GACTA"); 63 64 assert(q5.queryPosition == 0); 65 assert(q5.position == 0); 66 assert(q5.score == -14); 67 assert(q5.cigar.alignedLength == 5); 68 assert(q5.cigar.toString == "1=1X2=4I1=10S"); 69 q5.writeAlignment; 70 writeln(q5.identity); 71 writeln(q5.similarity); 72 writeln(q5.gapRate); 73 assert(approxEqual(q5.identity, 0.444)); 74 assert(approxEqual(q5.similarity, 0.556)); 75 assert(approxEqual(q5.gapRate, 0.444)); 76 77 // TODO: reconcile issues where cigar manipulation for 78 // use with bams changes output statistics 79 80 // auto q52 = p.aligner!("nw","stats")("GGCTTCTGATCAGGCTTCT", "GACTA"); 81 82 // writeln(q52.queryPosition); 83 // writeln(q52.position); 84 // writeln(q52.score); 85 // assert(q52.queryPosition == 0); 86 // assert(q52.position == 0); 87 // assert(q52.score == -14); 88 // q5.writeAlignment; 89 // writeln(q52.identity); 90 // writeln(q52.similarity); 91 // writeln(q52.gapRate); 92 // assert(approxEqual(q5.identity, 0.444)); 93 // assert(approxEqual(q5.similarity, 0.556)); 94 // assert(approxEqual(q5.gapRate, 0.444)); 95 // assert(approxEqual(q5.identity, 0.211)); 96 // assert(approxEqual(q5.similarity, 0.263)); 97 // assert(approxEqual(q5.gapRate, 0.737)); 98 99 auto q6 = p.nw_scan("GACTAA", "GGCTTCTGATCAGGCTTCT"); 100 assert(q6.queryPosition == 0); 101 assert(q6.position == 0); 102 assert(q6.score == -8); 103 assert(q6.cigar.alignedLength == 12); 104 assert(q6.cigar.toString == "1=1X2=4D1=2D1="); 105 q6.writeAlignment; 106 writeln(q6.identity); 107 writeln(q6.similarity); 108 writeln(q6.gapRate); 109 assert(approxEqual(q6.identity, 0.4167)); 110 assert(approxEqual(q6.similarity, 0.5)); 111 assert(approxEqual(q6.gapRate, 0.5)); 112 113 // TODO: report potiential bug as 114 // parasail similarity == identity 115 // when it shoudl not be 116 117 // auto q62 = p.aligner!("nw","stats")("GACTAA", "GGCTTCTGATCAGGCTTCT"); 118 // writeln(q62.queryPosition); 119 // writeln(q62.position); 120 // writeln(q62.score); 121 // writeln(q62.identity); 122 // writeln(q62.similarity); 123 // writeln(q62.gapRate); 124 // assert(q6.queryPosition == 0); 125 // assert(q6.position == 0); 126 // assert(q6.score == -8); 127 // assert(q6.cigar.alignedLength == 12); 128 // assert(q6.cigar.toString == "1=1X2=4D1=2D1="); 129 // q6.writeAlignment; 130 // writeln(q6.identity); 131 // writeln(q6.similarity); 132 // writeln(q6.gapRate); 133 // assert(approxEqual(q6.identity, 0.4167)); 134 // assert(approxEqual(q6.similarity, 0.5)); 135 // assert(approxEqual(q6.gapRate, 0.5)); 136 // assert(approxEqual(q6.identity, 0.263)); 137 // assert(approxEqual(q6.similarity, 0.316)); 138 // assert(approxEqual(q6.gapRate, 0.684)); 139 140 }