1 // ==========================================================================
2 //                 SeqAn - The Library for Sequence Analysis
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 TESTS_ALIGN_TEST_MOCK_H_
36 #define TESTS_ALIGN_TEST_MOCK_H_
37 
38 namespace impl
39 {
40 namespace test_align_mock
41 {
42 
43 struct TestAlignSimdVariableLength_;
44 using VariableLengthSimd = seqan::Tag<TestAlignSimdVariableLength_>;
45 
46 struct TestAlignSimdEqualLength_;
47 using EqualLengthSimd = seqan::Tag<TestAlignSimdEqualLength_>;
48 
49 template <typename TAlphabet, typename TSimdLength>
50 struct TestSequences_;
51 
52 template <>
53 struct TestSequences_<seqan::Dna, EqualLengthSimd>
54 {
55     using TSeq = seqan::String<seqan::Dna>;
56 
57     static auto
58     getSequences()
59     {
60         seqan::StringSet<TSeq> set;
61         appendValue(set, "AGCGACTGCAAACATCAGATCAGAG");
62         appendValue(set, "TAATACTAGCATGCGATAAGTCCCT");
63         appendValue(set, "GGCACGTGGATGGTTTAGAGGAATC");
64         appendValue(set, "AGATTCAAGTCTGGTTAACCATCAA");
65         appendValue(set, "ACAGGTCTTGAGTCTAAAATTGTCG");
66         appendValue(set, "TCTCCTGCGTACGAGATGGAAATAC");
67         appendValue(set, "TAGGTAACTACAGGGACTCCGACGT");
68         appendValue(set, "TATGTACGTTGCTCCGTCAGAGGCG");
69 
70         appendValue(set, "CCATTCAGGATCACGTTACCGCGAA");
71         appendValue(set, "AAAAAGGGACCAGGAGCTCTTCTCC");
72         appendValue(set, "CCTGCGGTCACGTCTATAGAAATTA");
73         appendValue(set, "CACCATTAACCCTCCTGAGAACCGG");
74         appendValue(set, "GAGGCGGGAATCCGTCACGTATGAG");
75         appendValue(set, "AAGGTATTTGCCCGATAATCAATAC");
76         appendValue(set, "CCCAGGCTTCTAACTTTTTCCACTC");
77         appendValue(set, "GCTTGAGCCGGCTAGGCCTTTCTGC");
78 
79         appendValue(set, "ATCTCGGGTCCTGCCCAACCGGTCT");
80         appendValue(set, "AACAAGGGACCAGGAGCTCTTCTCC");
81         appendValue(set, "ACACGCTAATATAGCGAATCACCGA");
82         appendValue(set, "GAACCCGGCGCCACGCAATGGAACG");
83         appendValue(set, "TCCTTAACTCCGGCAGGCAATTAAA");
84         appendValue(set, "ACAGAAAAATAGGCGAATGAATCTT");
85         appendValue(set, "GGGAACGTATGTATAACGCAAAAAA");
86         appendValue(set, "TTCTCTGTGTATCGAAGAATGGCCT");
87 
88         appendValue(set, "CCGAAGTTTCGATGGACTGGTGCCA");
89         appendValue(set, "ACGCGCAGGCATAGTTTTAGGAGAA");
90         appendValue(set, "TTATTCGGGGGCAGTGACAACCAAC");
91 
92         seqan::StringSet<TSeq>  set2(set);
93         std::sort(seqan::begin(set2, seqan::Standard()), seqan::end(set2, seqan::Standard()),
94                   [](auto& strA, auto& strB){ return seqan::isLess(strA, strB); });
95         return std::make_tuple(set, set2);
96     }
97 };
98 
99 template <>
100 struct TestSequences_<seqan::Dna, VariableLengthSimd>
101 {
102     using TSeq = seqan::String<seqan::Dna>;
103 
104     static auto
105     getSequences()
106     {
107         seqan::StringSet<TSeq> set;
108         appendValue(set, "AGCGACTGCAAACATCAGATCAGAGGTAGAG");
109         appendValue(set, "TAATACTAGCATGCGATAAGTCCCT");
110         appendValue(set, "GGCACGTGTGGTTTAGAGGAATC");
111         appendValue(set, "AGATTCAAGTCTGGTTAACCATCAA");
112         appendValue(set, "ACAGGTCTTGAGTCTAAAATTGTCGAA");
113         appendValue(set, "TCTCCTGCGTACGAGATGGAAATAC");
114         appendValue(set, "TAGGTAACTACAGGGACACGT");
115         appendValue(set, "TATGTACGTCTCCGTCAGAGGCG");
116 
117         appendValue(set, "CCATTCAGGATCACGTTACCGCGAAGTACCC");
118         appendValue(set, "AAGGGACCAGGAGCTCTTCTCC");
119         appendValue(set, "CCTGCGGTCACGTCTATAGAAATT");
120         appendValue(set, "CACCATTAACCCTCCTGAGAACCGAGTAGG");
121         appendValue(set, "GAGGCGGGAATCCGTCACGTATGAG");
122         appendValue(set, "AAGGTATTTGCCCGATAATCAATACGATGAGATAGAGAGATAGAATAGAGAAGGGACCGCGCATGACTACGATCGACTGACTACGA");
123         appendValue(set, "CGAGTATATCGAGAGAGGTCACG");
124         appendValue(set, "GCTTGAGCCGGCTAGGCTCTGC");
125 
126         appendValue(set, "ATCTCGGGTCCTGCCAACCGGTCT");
127         appendValue(set, "AAAAAGGGACCAGGAGCTCTTCTCC");
128         appendValue(set, "ACACGCTAATATAGCGAATCACCGA");
129         appendValue(set, "AATGGAACG");
130         appendValue(set, "TCCTTAACTCCGGCAGGCAATTATACCGGACTGACACTTAAA");
131         appendValue(set, "ACAGAAAAATAGGCGAATGAAACACTCTT");
132         appendValue(set, "GGGAACGTATGTATAACGCAAAAA");
133         appendValue(set, "TTCTCTGTGTATCGAAGAATGCT");
134 
135         appendValue(set, "CCGAAGTTTCGATGGATGGATTCCACACACCTGGTGCCA");
136         appendValue(set, "ACGCGCAGGCATAGTTGGAGAA");
137         appendValue(set, "TTATTCGGGGGCAGTGACAACACTTAGCGACTAC");
138 
139         auto set2(set);
140         std::sort(seqan::begin(set2, seqan::Standard()), seqan::end(set2, seqan::Standard()),
141                   [](auto& strA, auto& strB){ return seqan::isLess(strA, strB); });
142         return std::make_tuple(set, set2);
143     }
144 };
145 
146 template <>
147 struct TestSequences_<seqan::AminoAcid, EqualLengthSimd>
148 {
149     using TSeq = seqan::String<seqan::AminoAcid>;
150 
151     static auto
152     getSequences()
153     {
154         seqan::StringSet<TSeq> set;
155         appendValue(set, "FNQSAEYPDISLHCGVLKWRATLGT");
156         appendValue(set, "EIKSDVLLHRPGNIGMQVAESYFAT");
157         appendValue(set, "PIIMWSMKNRTIERLPTGVLMISHT");
158         appendValue(set, "FMATNEKVHCACGADYQMIIDCNEA");
159         appendValue(set, "MFHQTSNANWMFVSNKFHIKFGTLD");
160         appendValue(set, "SNEMGQCFPHEPACFFDKDFRLFIN");
161         appendValue(set, "FPWAHYVVHTLREHRKDANHRSTSY");
162         appendValue(set, "QYRNTESMGCEMRCFTETIMIAGVA");
163 
164         appendValue(set, "VVRMDGKEVLKQHVPTYADKHPTGQ");
165         appendValue(set, "TMLKWCEWCFAEFPPFASEPKFPPN");
166         appendValue(set, "GTWGWVDGVHHTMGEQCGPGRACWG");
167         appendValue(set, "ECDFQTWYFYCVNQEIFELFICCMG");
168         appendValue(set, "KRRELNGQERGGWWTVDGPGVSMGT");
169         appendValue(set, "CWAAHYVCWRTKQKQLVAFQRLNCI");
170         appendValue(set, "NRLVGFQIHCFLIRCVEPGQTHTID");
171         appendValue(set, "AYYVRGFMMGQMYGRPVILMTFTKP");
172 
173         appendValue(set, "SFTQPVELHIPHYWWHLAYFMIMFY");
174         appendValue(set, "PMNKMFDFNNHQDLLTFTKRFPTPW");
175         appendValue(set, "VIPMIYHDWSIISALMMQKDIYYIA");
176         appendValue(set, "TPGMWGMATLTGNFNSIFVSKYVKN");
177         appendValue(set, "GKELWGMVIARAGMAVQNMYSRDTF");
178         appendValue(set, "VHASDLYAKCYSNCVYQENIDIAEV");
179         appendValue(set, "KQSGTLSGPQYWENVHRVLEDYPKE");
180         appendValue(set, "DPHGYCFYEGTFAWDVEVHEFNNKD");
181 
182         appendValue(set, "NMQDVIGGKSLAQHSSVTYKAQQEH");
183         appendValue(set, "CQTPRWECSLNFDEKEAADLMIDVS");
184         appendValue(set, "PMMDLDHCMLIECLRPHNRDNCARH");
185 
186         decltype(set) set2(set);
187         std::sort(seqan::begin(set2, seqan::Standard()), seqan::end(set2, seqan::Standard()),
188                   [](auto& strA, auto& strB){ return seqan::isLess(strA, strB); });
189         return std::make_tuple(set, set2);
190     }
191 };
192 
193 template <>
194 struct TestSequences_<seqan::AminoAcid, VariableLengthSimd>
195 {
196     using TSeq = seqan::String<seqan::AminoAcid>;
197 
198     static auto
199     getSequences()    {
200         seqan::StringSet<TSeq> set;
201         appendValue(set, "FNQSAEYPDISHCGVMQLKWRATLGT");
202         appendValue(set, "EIKSDVLLHRWSMKNPGNILMIDVGMQVAESYFAT");
203         appendValue(set, "PIIMWSMKNRTIEPTGLMISHT");
204         appendValue(set, "FMATNEKVHCACGWSMKNADLMIDVYQMIIDCNEA");
205         appendValue(set, "MWSMKNFHQTSNANWMFVSNMQKFHIKFGTLD");
206         appendValue(set, "SNEGQCFPHEPACFWSMKFDKDFRLFIN");
207         appendValue(set, "FPWAHYVVHTLREHMQRKDANHRSTSY");
208         appendValue(set, "QYRNTWSMKNESMGCEMRFLMIVTETIMIAGVA");
209 
210         appendValue(set, "VVRMDGKEVLWSMKNKQHVPTYADKHPTGQ");
211         appendValue(set, "TMLKWCEWCFALMIDVEFPPFASEPKFPPN");
212         appendValue(set, "GTWGVDGVHHWSMWSMKNLMIDVTMGEQCGPGRACWG");
213         appendValue(set, "ECDFQTWYFYCVNQMQEIFELFICCMG");
214         appendValue(set, "KRREWSMKNLNGQERGGWWTVDGPGVSMGT");
215         appendValue(set, "CWAAHYCWRWWSMKNSMKNTKLMIDVQMQKQLVAFQRLNCI");
216         appendValue(set, "NRLVGFQIHCFIRCVEPGQTHTID");
217         appendValue(set, "AYYVRGFMMGQMMQYGRPVILMTFTKP");
218 
219         appendValue(set, "SFTQPVELHIPHYWLMIDVWHLAYFMIMFY");
220         appendValue(set, "PMNKMFDFNHQMQDLLTFTKPTPW");
221         appendValue(set, "VIPMIYHDWSIISALMMLMIDVQKDIYYIA");
222         appendValue(set, "TPGMWGMATLTGMQNFNSFVSKYVKN");
223         appendValue(set, "GKELWGMVIARAGMAVQNLMIDVMYSRDTF");
224         appendValue(set, "VHASDLWSNYAKCYSNCVYQEIDIAEV");
225         appendValue(set, "KQSGTLSMQGPYWENVHRVLLMIDVEDYPKE");
226         appendValue(set, "DPHGYCFMQYEGTFAWDVEVHEFNNKD");
227 
228         appendValue(set, "NMQDVIGGKSLAQHSSVTYAQQEH");
229         appendValue(set, "CQTPRWECMQSLNFDEKEAADLMIDVS");
230         appendValue(set, "PMMDLDWSMKNMLIECLRPHNRMQDNLMIDVCARH");
231 
232         auto set2(set);
233         std::sort(seqan::begin(set2, seqan::Standard()), seqan::end(set2, seqan::Standard()),
234                   [](auto& strA, auto& strB){ return seqan::isLess(strA, strB); });
235         return std::make_tuple(set, set2);
236     }
237 };
238 } // namespace test_align_mock
239 } // namespace impl
240 #endif // TEST_MOCK_H_
241