From 71dd793824c16b44b5bb588829af81a435546b2a Mon Sep 17 00:00:00 2001 From: Mitra Darja Darvish Date: Tue, 7 Apr 2020 12:37:14 +0200 Subject: [PATCH] [MISC] Add typed test to kmerhash --- test/unit/range/views/view_kmer_hash_test.cpp | 167 +++++------------- 1 file changed, 49 insertions(+), 118 deletions(-) diff --git a/test/unit/range/views/view_kmer_hash_test.cpp b/test/unit/range/views/view_kmer_hash_test.cpp index a3e950ac6fa..ef8a06f431c 100644 --- a/test/unit/range/views/view_kmer_hash_test.cpp +++ b/test/unit/range/views/view_kmer_hash_test.cpp @@ -17,155 +17,86 @@ #include #include +#include + #include using seqan3::operator""_dna4; using seqan3::operator""_dna5; using seqan3::operator""_shape; +using result_t = std::vector; + +static constexpr auto ungapped_view = seqan3::views::kmer_hash(seqan3::ungapped{3}); +static constexpr auto gapped_view = seqan3::views::kmer_hash(0b101_shape); + +template +class kmer_hash_properties_test: public ::testing::Test {}; + +using underlying_range_types = ::testing::Types, + std::vector const, + seqan3::bitcompressed_vector, + seqan3::bitcompressed_vector const, + std::list, + std::list const, + std::forward_list, + std::forward_list const>; + +TYPED_TEST_SUITE(kmer_hash_properties_test, underlying_range_types, ); class kmer_hash_test : public ::testing::Test { protected: - using result_t = std::vector; + std::vector text1{"AAAAA"_dna4}; + result_t result1{0,0,0}; // Same for gapped and ungapped - static constexpr auto ungapped_view = seqan3::views::kmer_hash(seqan3::ungapped{3}); - static constexpr auto gapped_view = seqan3::views::kmer_hash(0b101_shape); + std::vector text2{"AC"_dna4}; + result_t result2{}; // Same for gapped and ungapped - std::vector text1{"AAAAA"_dna4}; - std::vector const ctext1{"AAAAA"_dna4}; - result_t ungapped1{0,0,0}; - result_t gapped1{0,0,0}; - - std::vector text2{"ACGTAGC"_dna4}; - std::vector const ctext2{"ACGTAGC"_dna4}; - result_t ungapped2{6,27,44,50,9}; - result_t gapped2{2, 7, 8, 14, 1}; - - std::vector text3{"AC"_dna4}; - std::vector const ctext3{"AC"_dna4}; - result_t ungapped3{}; - result_t gapped3{ungapped3}; - - seqan3::bitcompressed_vector text4{"ACGTAGC"_dna4}; - seqan3::bitcompressed_vector const ctext4{"ACGTAGC"_dna4}; - result_t ungapped4{ungapped2}; - result_t gapped4{gapped2}; - - std::list text5{'A'_dna4, 'C'_dna4, 'G'_dna4, 'T'_dna4, 'A'_dna4, 'G'_dna4, 'C'_dna4}; - std::list const ctext5{'A'_dna4, 'C'_dna4, 'G'_dna4, 'T'_dna4, 'A'_dna4, 'G'_dna4, 'C'_dna4}; - result_t ungapped5{ungapped2}; - result_t gapped5{gapped2}; - - std::forward_list text6{'A'_dna4, 'C'_dna4, 'G'_dna4, 'T'_dna4, 'A'_dna4, 'G'_dna4, 'C'_dna4}; - std::forward_list const ctext6{'A'_dna4, 'C'_dna4, 'G'_dna4, 'T'_dna4, 'A'_dna4, 'G'_dna4, 'C'_dna4}; - result_t ungapped6{ungapped2}; - result_t gapped6{gapped2}; - - std::vector text7{"ACG"_dna4}; - std::vector const ctext7{"ACG"_dna4}; - result_t ungapped7{6}; - result_t gapped7{2}; + std::vector text3{"ACG"_dna4}; + result_t ungapped3{6}; + result_t gapped3{2}; }; +TYPED_TEST(kmer_hash_properties_test, combinability) +{ + TypeParam text{'A'_dna4, 'C'_dna4, 'G'_dna4, 'T'_dna4, 'A'_dna4, 'G'_dna4, 'C'_dna4}; // ACGTAGC + result_t ungapped{6,27,44,50,9}; + result_t gapped{2,7,8,14,1}; + EXPECT_EQ(ungapped, text | ungapped_view | seqan3::views::to); + EXPECT_EQ(gapped, text | gapped_view | seqan3::views::to); + + auto stop_at_t = seqan3::views::take_until([] (seqan3::dna4 x) { return x == 'T'_dna4; }); + EXPECT_EQ(result_t{6}, text | stop_at_t | ungapped_view | seqan3::views::to); + EXPECT_EQ(result_t{2}, text | stop_at_t | gapped_view | seqan3::views::to); +} -TEST_F(kmer_hash_test, concepts) +TYPED_TEST(kmer_hash_properties_test, concepts) { - auto v1 = text1 | ungapped_view; + TypeParam text{'A'_dna4, 'C'_dna4, 'G'_dna4, 'T'_dna4}; // ACGT + auto v1 = text | ungapped_view; EXPECT_TRUE(std::ranges::input_range); EXPECT_TRUE(std::ranges::forward_range); - EXPECT_TRUE(std::ranges::bidirectional_range); - EXPECT_TRUE(std::ranges::random_access_range); + EXPECT_EQ(std::ranges::bidirectional_range, std::ranges::bidirectional_range); + EXPECT_EQ(std::ranges::random_access_range, std::ranges::random_access_range); EXPECT_TRUE(std::ranges::view); - EXPECT_TRUE(std::ranges::sized_range); + EXPECT_EQ(std::ranges::sized_range, std::ranges::sized_range); EXPECT_FALSE(std::ranges::common_range); EXPECT_TRUE(seqan3::const_iterable_range); EXPECT_FALSE((std::ranges::output_range)); - - auto v2 = text5 | ungapped_view; - EXPECT_TRUE(std::ranges::input_range); - EXPECT_TRUE(std::ranges::forward_range); - EXPECT_TRUE(std::ranges::bidirectional_range); - EXPECT_FALSE(std::ranges::random_access_range); - EXPECT_TRUE(std::ranges::view); - EXPECT_FALSE(std::ranges::sized_range); - EXPECT_FALSE(std::ranges::common_range); - EXPECT_TRUE(seqan3::const_iterable_range); - EXPECT_FALSE((std::ranges::output_range)); - - auto v3 = text6 | ungapped_view; - EXPECT_TRUE(std::ranges::input_range); - EXPECT_TRUE(std::ranges::forward_range); - EXPECT_FALSE(std::ranges::bidirectional_range); - EXPECT_FALSE(std::ranges::random_access_range); - EXPECT_TRUE(std::ranges::view); - EXPECT_FALSE(std::ranges::sized_range); - EXPECT_FALSE(std::ranges::common_range); - EXPECT_TRUE(seqan3::const_iterable_range); - EXPECT_FALSE((std::ranges::output_range)); } TEST_F(kmer_hash_test, ungapped) { - EXPECT_EQ(ungapped1, text1 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped2, text2 | ungapped_view | seqan3::views::to); + EXPECT_EQ(result1, text1 | ungapped_view | seqan3::views::to); + EXPECT_EQ(result2, text2 | ungapped_view | seqan3::views::to); EXPECT_EQ(ungapped3, text3 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped4, text4 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped5, text5 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped6, text6 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped7, text7 | ungapped_view | seqan3::views::to); } TEST_F(kmer_hash_test, gapped) { - EXPECT_EQ(gapped1, text1 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped2, text2 | gapped_view | seqan3::views::to); + EXPECT_EQ(result1, text1 | gapped_view | seqan3::views::to); + EXPECT_EQ(result2, text2 | gapped_view | seqan3::views::to); EXPECT_EQ(gapped3, text3 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped4, text4 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped5, text5 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped6, text6 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped7, text7 | gapped_view | seqan3::views::to); -} - -TEST_F(kmer_hash_test, const_ungapped) -{ - EXPECT_EQ(ungapped1, ctext1 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped2, ctext2 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped3, ctext3 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped4, ctext4 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped5, ctext5 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped6, ctext6 | ungapped_view | seqan3::views::to); - EXPECT_EQ(ungapped7, ctext7 | ungapped_view | seqan3::views::to); -} - -TEST_F(kmer_hash_test, const_gapped) -{ - EXPECT_EQ(gapped1, ctext1 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped2, ctext2 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped3, ctext3 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped4, ctext4 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped5, ctext5 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped6, ctext6 | gapped_view | seqan3::views::to); - EXPECT_EQ(gapped7, ctext7 | gapped_view | seqan3::views::to); -} - -TEST_F(kmer_hash_test, combinability) -{ - auto stop_at_t = seqan3::views::take_until([] (seqan3::dna4 const x) { return x == 'T'_dna4; }); - EXPECT_EQ(result_t{6}, text2 | stop_at_t | ungapped_view | seqan3::views::to); - EXPECT_EQ(result_t{6}, text5 | stop_at_t | ungapped_view | seqan3::views::to); - EXPECT_EQ(result_t{6}, text6 | stop_at_t | ungapped_view | seqan3::views::to); - - EXPECT_EQ(ungapped2 | std::views::reverse | seqan3::views::to, - text2 | ungapped_view | std::views::reverse | seqan3::views::to); - - EXPECT_EQ(gapped2 | std::views::reverse | seqan3::views::to, - text2 | gapped_view | std::views::reverse | seqan3::views::to); - - EXPECT_EQ(ungapped5 | std::views::reverse | seqan3::views::to, - text5 | ungapped_view | std::views::reverse | seqan3::views::to); - - EXPECT_EQ(gapped5 | std::views::reverse | seqan3::views::to, - text5 | gapped_view | std::views::reverse | seqan3::views::to); } TEST_F(kmer_hash_test, invalid_sizes)