File: fastq_parser_test.cpp

package info (click to toggle)
libbioparser-dev 3.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,932 kB
  • sloc: cpp: 1,275; makefile: 13
file content (98 lines) | stat: -rw-r--r-- 2,490 bytes parent folder | download
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
86
87
88
89
90
91
92
93
94
95
96
97
98
// Copyright (c) 2020 Robert Vaser

#include "bioparser/fastq_parser.hpp"

#include <numeric>

#include "biosoup/sequence.hpp"
#include "gtest/gtest.h"

#include "bioparser_test_config.h"

namespace bioparser {
namespace test {

class BioparserFastqTest: public ::testing::Test {
 public:
  void Setup(const std::string& file) {
    p = Parser<biosoup::Sequence>::Create<FastqParser>(BIOPARSER_TEST_DATA + file);
  }

  void Check() {
    EXPECT_EQ(13, s.size());
    EXPECT_EQ(17, std::accumulate(s.begin(), s.end(), 0,
        [] (std::uint32_t s, const std::unique_ptr<biosoup::Sequence>& it) {
          return s + it->name.size();
        }));
    EXPECT_EQ(108140, std::accumulate(s.begin(), s.end(), 0,
        [] (std::uint32_t s, const std::unique_ptr<biosoup::Sequence>& it) {
          return s + it->data.size();
        }));
    EXPECT_EQ(108140, std::accumulate(s.begin(), s.end(), 0,
        [] (std::uint32_t s, const std::unique_ptr<biosoup::Sequence>& it) {
          return s + it->quality.size();
        }));
  }

  std::unique_ptr<Parser<biosoup::Sequence>> p;
  std::vector<std::unique_ptr<biosoup::Sequence>> s;
};

TEST_F(BioparserFastqTest, ParseWhole) {
  Setup("sample.fastq");
  s = p->Parse(-1);
  Check();
}

TEST_F(BioparserFastqTest, ParseInChunks) {
  Setup("sample.fastq");
  for (auto t = p->Parse(65536); !t.empty(); t = p->Parse(65536)) {
    s.insert(
        s.end(),
        std::make_move_iterator(t.begin()),
        std::make_move_iterator(t.end()));
  }
  Check();
}

TEST_F(BioparserFastqTest, FormatError) {
  Setup("sample.fasta");
  try {
    s = p->Parse(-1);
  } catch (std::invalid_argument& exception) {
    EXPECT_STREQ(
        exception.what(),
        "[bioparser::FastqParser] error: invalid file format");
  }
}

TEST_F(BioparserFastqTest, CompressedParseWhole) {
  Setup("sample.fastq.gz");
  s = p->Parse(-1);
  Check();
}

TEST_F(BioparserFastqTest, CompressedParseInChunks) {
  Setup("sample.fastq.gz");
  for (auto t = p->Parse(65536); !t.empty(); t = p->Parse(65536)) {
    s.insert(
        s.end(),
        std::make_move_iterator(t.begin()),
        std::make_move_iterator(t.end()));
  }
  Check();
}

TEST_F(BioparserFastqTest, CompressedFormatError) {
  Setup("sample.fasta.gz");
  try {
    s = p->Parse(-1);
  } catch (std::invalid_argument& exception) {
    EXPECT_STREQ(
        exception.what(),
        "[bioparser::FastqParser] error: invalid file format");
  }
}

}  // namespace test
}  // namespace bioparser