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