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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
// -----------------------------------------------------------------------------------------------------
// Copyright (c) 2006-2020, Knut Reinert & Freie Universität Berlin
// Copyright (c) 2016-2020, Knut Reinert & MPI für molekulare Genetik
// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
// -----------------------------------------------------------------------------------------------------
#include <gtest/gtest.h>
#include <type_traits>
#include <seqan3/alignment/configuration/all.hpp>
#include <seqan3/alignment/scoring/nucleotide_scoring_scheme.hpp>
template <typename T>
class alignment_configuration_test : public ::testing::Test
{};
using alignment_result_t = seqan3::alignment_result<seqan3::detail::alignment_result_value_type<int, int, int>>;
using test_types = ::testing::Types<seqan3::align_cfg::band_fixed_size,
seqan3::align_cfg::gap_cost_affine,
seqan3::align_cfg::min_score,
seqan3::align_cfg::method_global,
seqan3::align_cfg::method_local,
seqan3::align_cfg::parallel,
seqan3::align_cfg::scoring_scheme<seqan3::nucleotide_scoring_scheme<int8_t>>,
seqan3::align_cfg::vectorised,
seqan3::align_cfg::detail::result_type<alignment_result_t>,
seqan3::align_cfg::detail::debug>;
TYPED_TEST_SUITE(alignment_configuration_test, test_types, );
// TODO: this should go to a typed configuration test that also checks the alignment configuration
TEST(alignment_configuration_test, symmetric_configuration)
{
for (uint8_t i = 0; i < static_cast<uint8_t>(seqan3::detail::align_config_id::SIZE); ++i)
{
// no element can occur twice in a configuration
EXPECT_FALSE(seqan3::detail::compatibility_table<seqan3::detail::align_config_id>[i][i])
<< "There is a TRUE value on the diagonal of the search configuration matrix.";
for (uint8_t j = 0; j < i; ++j)
{
// symmetric matrix
EXPECT_EQ(seqan3::detail::compatibility_table<seqan3::detail::align_config_id>[i][j],
seqan3::detail::compatibility_table<seqan3::detail::align_config_id>[j][i])
<< "Search configuration matrix is not symmetric.";
}
}
}
TEST(alignment_configuration_test, number_of_configs)
{
// NOTE(rrahn): You must update this test if you add a new value to seqan3::align_cfg::id
EXPECT_EQ(static_cast<uint8_t>(seqan3::detail::align_config_id::SIZE), 18);
}
TYPED_TEST(alignment_configuration_test, config_element_specialisation)
{
EXPECT_TRUE((seqan3::detail::config_element_specialisation<TypeParam>));
}
TYPED_TEST(alignment_configuration_test, configuration_exists)
{
seqan3::configuration cfg{TypeParam{}};
EXPECT_TRUE(decltype(cfg)::template exists<TypeParam>());
}
template <typename t, typename cfg_t>
void helper_exists()
{
EXPECT_TRUE(cfg_t::template exists<t>());
}
template <template <typename ...> typename t, typename cfg_t>
void helper_exists()
{
EXPECT_TRUE(cfg_t::template exists<t>());
}
TYPED_TEST(alignment_configuration_test, configuration_exists_template)
{
seqan3::configuration cfg{TypeParam{}};
helper_exists<TypeParam, decltype(cfg)>();
}
|