1 // ==========================================================================
2 // test_alignment_dp_profile.h
3 // ==========================================================================
4 // Copyright (c) 2006-2018, Knut Reinert, FU Berlin
5 // All rights reserved.
6 //
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions are met:
9 //
10 // * Redistributions of source code must retain the above copyright
11 // notice, this list of conditions and the following disclaimer.
12 // * Redistributions in binary form must reproduce the above copyright
13 // notice, this list of conditions and the following disclaimer in the
14 // documentation and/or other materials provided with the distribution.
15 // * Neither the name of Knut Reinert or the FU Berlin nor the names of
16 // its contributors may be used to endorse or promote products derived
17 // from this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 // ARE DISCLAIMED. IN NO EVENT SHALL KNUT REINERT OR THE FU BERLIN BE LIABLE
23 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
29 // DAMAGE.
30 //
31 // ==========================================================================
32 // Author: Rene Rahn <rene.rahn@fu-berlin.de>
33 // ==========================================================================
34
35 #ifndef SANDBOX_RMAERKER_TESTS_ALIGN2_TEST_ALIGNMENT_DP_PROFILE_H_
36 #define SANDBOX_RMAERKER_TESTS_ALIGN2_TEST_ALIGNMENT_DP_PROFILE_H_
37
38 #include <seqan/basic.h>
39
40 #include <seqan/align.h>
41
testAlignmentDPProfileIsFreeEndGap()42 void testAlignmentDPProfileIsFreeEndGap()
43 {
44
45 using namespace seqan;
46
47 {
48 typedef DPProfile_<GlobalAlignment_<>, LinearGaps, TracebackOn<> > TDPProfile;
49
50 bool result0 = IsFreeEndGap_<TDPProfile, DPFirstRow>::VALUE;
51 bool result1 = IsFreeEndGap_<TDPProfile, DPFirstColumn>::VALUE;
52 bool result2 = IsFreeEndGap_<TDPProfile, DPLastRow>::VALUE;
53 bool result3 = IsFreeEndGap_<TDPProfile, DPLastColumn>::VALUE;
54
55 SEQAN_ASSERT_EQ(result0, false);
56 SEQAN_ASSERT_EQ(result1, false);
57 SEQAN_ASSERT_EQ(result2, false);
58 SEQAN_ASSERT_EQ(result3, false);
59 }
60
61 {
62 typedef DPProfile_<GlobalAlignment_<>, LinearGaps, TracebackOn<> > const TDPProfile;
63
64 bool result0 = IsFreeEndGap_<TDPProfile, DPFirstRow>::VALUE;
65 bool result1 = IsFreeEndGap_<TDPProfile, DPFirstColumn>::VALUE;
66 bool result2 = IsFreeEndGap_<TDPProfile, DPLastRow>::VALUE;
67 bool result3 = IsFreeEndGap_<TDPProfile, DPLastColumn>::VALUE;
68
69 SEQAN_ASSERT_EQ(result0, false);
70 SEQAN_ASSERT_EQ(result1, false);
71 SEQAN_ASSERT_EQ(result2, false);
72 SEQAN_ASSERT_EQ(result3, false);
73 }
74
75 {
76 typedef DPProfile_<GlobalAlignment_<FreeEndGaps_<True, False, True, False> >, LinearGaps, TracebackOn<> > TDPProfile;
77
78 bool result0 = IsFreeEndGap_<TDPProfile, DPFirstRow>::VALUE;
79 bool result1 = IsFreeEndGap_<TDPProfile, DPFirstColumn>::VALUE;
80 bool result2 = IsFreeEndGap_<TDPProfile, DPLastRow>::VALUE;
81 bool result3 = IsFreeEndGap_<TDPProfile, DPLastColumn>::VALUE;
82
83 SEQAN_ASSERT_EQ(result0, true);
84 SEQAN_ASSERT_EQ(result1, false);
85 SEQAN_ASSERT_EQ(result2, true);
86 SEQAN_ASSERT_EQ(result3, false);
87 }
88
89 {
90 typedef DPProfile_<GlobalAlignment_<FreeEndGaps_<True, False, True, False> >, LinearGaps, TracebackOn<> > const TDPProfile;
91
92 bool result0 = IsFreeEndGap_<TDPProfile, DPFirstRow>::VALUE;
93 bool result1 = IsFreeEndGap_<TDPProfile, DPFirstColumn>::VALUE;
94 bool result2 = IsFreeEndGap_<TDPProfile, DPLastRow>::VALUE;
95 bool result3 = IsFreeEndGap_<TDPProfile, DPLastColumn>::VALUE;
96
97 SEQAN_ASSERT_EQ(result0, true);
98 SEQAN_ASSERT_EQ(result1, false);
99 SEQAN_ASSERT_EQ(result2, true);
100 SEQAN_ASSERT_EQ(result3, false);
101 }
102
103 {
104 typedef DPProfile_<GlobalAlignment_<FreeEndGaps_<True, True, True, True> >, LinearGaps, TracebackOn<> > TDPProfile;
105
106 bool result0 = IsFreeEndGap_<TDPProfile, DPFirstRow>::VALUE;
107 bool result1 = IsFreeEndGap_<TDPProfile, DPFirstColumn>::VALUE;
108 bool result2 = IsFreeEndGap_<TDPProfile, DPLastRow>::VALUE;
109 bool result3 = IsFreeEndGap_<TDPProfile, DPLastColumn>::VALUE;
110
111 SEQAN_ASSERT_EQ(result0, true);
112 SEQAN_ASSERT_EQ(result1, true);
113 SEQAN_ASSERT_EQ(result2, true);
114 SEQAN_ASSERT_EQ(result3, true);
115 }
116
117 {
118 typedef DPProfile_<GlobalAlignment_<FreeEndGaps_<True, True, True, True> >, LinearGaps, TracebackOn<> > const TDPProfile;
119
120 bool result0 = IsFreeEndGap_<TDPProfile, DPFirstRow>::VALUE;
121 bool result1 = IsFreeEndGap_<TDPProfile, DPFirstColumn>::VALUE;
122 bool result2 = IsFreeEndGap_<TDPProfile, DPLastRow>::VALUE;
123 bool result3 = IsFreeEndGap_<TDPProfile, DPLastColumn>::VALUE;
124
125 SEQAN_ASSERT_EQ(result0, true);
126 SEQAN_ASSERT_EQ(result1, true);
127 SEQAN_ASSERT_EQ(result2, true);
128 SEQAN_ASSERT_EQ(result3, true);
129 }
130
131 {
132 typedef DPProfile_<LocalAlignment_<>, LinearGaps, TracebackOn<> > TDPProfile;
133
134 bool result0 = IsFreeEndGap_<TDPProfile, DPFirstRow>::VALUE;
135 bool result1 = IsFreeEndGap_<TDPProfile, DPFirstColumn>::VALUE;
136 bool result2 = IsFreeEndGap_<TDPProfile, DPLastRow>::VALUE;
137 bool result3 = IsFreeEndGap_<TDPProfile, DPLastColumn>::VALUE;
138
139 SEQAN_ASSERT_EQ(result0, true);
140 SEQAN_ASSERT_EQ(result1, true);
141 SEQAN_ASSERT_EQ(result2, true);
142 SEQAN_ASSERT_EQ(result3, true);
143 }
144
145 {
146 typedef DPProfile_<LocalAlignment_<>, LinearGaps, TracebackOn<> > const TDPProfile;
147
148 bool result0 = IsFreeEndGap_<TDPProfile, DPFirstRow>::VALUE;
149 bool result1 = IsFreeEndGap_<TDPProfile, DPFirstColumn>::VALUE;
150 bool result2 = IsFreeEndGap_<TDPProfile, DPLastRow>::VALUE;
151 bool result3 = IsFreeEndGap_<TDPProfile, DPLastColumn>::VALUE;
152
153 SEQAN_ASSERT_EQ(result0, true);
154 SEQAN_ASSERT_EQ(result1, true);
155 SEQAN_ASSERT_EQ(result2, true);
156 SEQAN_ASSERT_EQ(result3, true);
157 }
158
159 {
160 bool result0 = IsFreeEndGap_<Nothing, DPFirstRow>::VALUE;
161 bool result1 = IsFreeEndGap_<Nothing, DPFirstColumn>::VALUE;
162 bool result2 = IsFreeEndGap_<Nothing, DPLastRow>::VALUE;
163 bool result3 = IsFreeEndGap_<Nothing, DPLastColumn>::VALUE;
164
165 SEQAN_ASSERT_EQ(result0, false);
166 SEQAN_ASSERT_EQ(result1, false);
167 SEQAN_ASSERT_EQ(result2, false);
168 SEQAN_ASSERT_EQ(result3, false);
169 }
170
171 }
172
testAlignmentDPProfileIsGlobal()173 void testAlignmentDPProfileIsGlobal()
174 {
175 using namespace seqan;
176
177 {
178 typedef DPProfile_<GlobalAlignment_<>, LinearGaps, TracebackOn<> > TDPProfile;
179
180 bool result0 = IsGlobalAlignment_<TDPProfile>::VALUE;
181 bool result1 = IsGlobalAlignment_<GlobalAlignment_<> >::VALUE;
182
183 SEQAN_ASSERT_EQ(result0, true);
184 SEQAN_ASSERT_EQ(result1, true);
185 }
186
187 {
188 typedef DPProfile_<LocalAlignment_<>, AffineGaps, TracebackOff> TDPProfile;
189
190 bool result0 = IsGlobalAlignment_<TDPProfile>::VALUE;
191 bool result1 = IsGlobalAlignment_<LocalAlignment_<> >::VALUE;
192
193 SEQAN_ASSERT_EQ(result0, false);
194 SEQAN_ASSERT_EQ(result1, false);
195 }
196
197 {
198 typedef DPProfile_<GlobalAlignment_<>, LinearGaps, TracebackOn<> > const TDPProfile;
199
200 bool result0 = IsGlobalAlignment_<TDPProfile>::VALUE;
201 bool result1 = IsGlobalAlignment_<GlobalAlignment_<> >::VALUE;
202
203 SEQAN_ASSERT_EQ(result0, true);
204 SEQAN_ASSERT_EQ(result1, true);
205 }
206
207 {
208 typedef DPProfile_<LocalAlignment_<>, AffineGaps, TracebackOff> const TDPProfile;
209
210 bool result0 = IsGlobalAlignment_<TDPProfile>::VALUE;
211 bool result1 = IsGlobalAlignment_<LocalAlignment_<> >::VALUE;
212
213 SEQAN_ASSERT_EQ(result0, false);
214 SEQAN_ASSERT_EQ(result1, false);
215 }
216 }
217
testAlignmentDPProfileIsLocal()218 void testAlignmentDPProfileIsLocal()
219 {
220 using namespace seqan;
221
222 {
223 typedef DPProfile_<GlobalAlignment_<>, LinearGaps, TracebackOn<> > TDPProfile;
224
225 bool result0 = IsLocalAlignment_<TDPProfile>::VALUE;
226 bool result1 = IsLocalAlignment_<GlobalAlignment_<> >::VALUE;
227
228 SEQAN_ASSERT_EQ(result0, false);
229 SEQAN_ASSERT_EQ(result1, false);
230 }
231
232 {
233 typedef DPProfile_<LocalAlignment_<>, AffineGaps, TracebackOff> TDPProfile;
234
235 bool result0 = IsLocalAlignment_<TDPProfile>::VALUE;
236 bool result1 = IsLocalAlignment_<LocalAlignment_<> >::VALUE;
237
238 SEQAN_ASSERT_EQ(result0, true);
239 SEQAN_ASSERT_EQ(result1, true);
240 }
241
242 {
243 typedef DPProfile_<GlobalAlignment_<>, LinearGaps, TracebackOn<> > const TDPProfile;
244
245 bool result0 = IsLocalAlignment_<TDPProfile>::VALUE;
246 bool result1 = IsLocalAlignment_<GlobalAlignment_<> >::VALUE;
247
248 SEQAN_ASSERT_EQ(result0, false);
249 SEQAN_ASSERT_EQ(result1, false);
250 }
251
252 {
253 typedef DPProfile_<LocalAlignment_<>, AffineGaps, TracebackOff> const TDPProfile;
254
255 bool result0 = IsLocalAlignment_<TDPProfile>::VALUE;
256 bool result1 = IsLocalAlignment_<LocalAlignment_<> >::VALUE;
257
258 SEQAN_ASSERT_EQ(result0, true);
259 SEQAN_ASSERT_EQ(result1, true);
260 }
261 }
262
testAlignmetnDPProfileIsTracebackEnabled()263 void testAlignmetnDPProfileIsTracebackEnabled()
264 {
265 using namespace seqan;
266
267 {
268 typedef DPProfile_<GlobalAlignment_<>, LinearGaps, TracebackOn<> > TDPProfile;
269
270 bool result0 = IsTracebackEnabled_<TDPProfile>::VALUE;
271 bool result1 = IsTracebackEnabled_<TracebackOn<> >::VALUE;
272
273 SEQAN_ASSERT_EQ(result0, true);
274 SEQAN_ASSERT_EQ(result1, true);
275 }
276
277 {
278 typedef DPProfile_<LocalAlignment_<>, AffineGaps, TracebackOff> TDPProfile;
279
280 bool result0 = IsTracebackEnabled_<TDPProfile>::VALUE;
281 bool result1 = IsTracebackEnabled_<TracebackOff>::VALUE;
282
283 SEQAN_ASSERT_EQ(result0, false);
284 SEQAN_ASSERT_EQ(result1, false);
285 }
286
287 {
288 typedef DPProfile_<GlobalAlignment_<>, LinearGaps, TracebackOn<> > const TDPProfile;
289
290 bool result0 = IsTracebackEnabled_<TDPProfile>::VALUE;
291 bool result1 = IsTracebackEnabled_<TracebackOn<> >::VALUE;
292
293 SEQAN_ASSERT_EQ(result0, true);
294 SEQAN_ASSERT_EQ(result1, true);
295 }
296
297 {
298 typedef DPProfile_<LocalAlignment_<>, AffineGaps, TracebackOff> const TDPProfile;
299
300 bool result0 = IsTracebackEnabled_<TDPProfile>::VALUE;
301 bool result1 = IsTracebackEnabled_<TracebackOff>::VALUE;
302
303 SEQAN_ASSERT_EQ(result0, false);
304 SEQAN_ASSERT_EQ(result1, false);
305 }
306 }
307
SEQAN_DEFINE_TEST(test_alignment_dp_profile_is_free_end_gaps)308 SEQAN_DEFINE_TEST(test_alignment_dp_profile_is_free_end_gaps)
309 {
310 testAlignmentDPProfileIsFreeEndGap();
311 }
312
SEQAN_DEFINE_TEST(test_alignment_dp_profile_is_global_alignment)313 SEQAN_DEFINE_TEST(test_alignment_dp_profile_is_global_alignment)
314 {
315 testAlignmentDPProfileIsGlobal();
316 }
317
SEQAN_DEFINE_TEST(test_alignment_dp_profile_is_local_alignment)318 SEQAN_DEFINE_TEST(test_alignment_dp_profile_is_local_alignment)
319 {
320 testAlignmentDPProfileIsLocal();
321 }
322
SEQAN_DEFINE_TEST(test_alignment_dp_profile_is_traceback_enabled)323 SEQAN_DEFINE_TEST(test_alignment_dp_profile_is_traceback_enabled)
324 {
325 testAlignmetnDPProfileIsTracebackEnabled();
326 }
327
328 #endif // #ifndef SANDBOX_RMAERKER_TESTS_ALIGN2_TEST_ALIGNMENT_DP_PROFILE_H_
329