File: nucleic_acid_test.cpp

package info (click to toggle)
libbiosoup-dev 0.11.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 168 kB
  • sloc: cpp: 646; makefile: 12
file content (73 lines) | stat: -rw-r--r-- 2,841 bytes parent folder | download | duplicates (2)
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
// Copyright (c) 2020 Robert Vaser

#include "biosoup/nucleic_acid.hpp"

#include <iostream>

#include "gtest/gtest.h"

std::atomic<std::uint32_t> biosoup::NucleicAcid::num_objects{0};

namespace biosoup {
namespace test {

TEST(BiosoupNucleicAcidTest, NucleotideError) {
  try {
    NucleicAcid s{"test", "EFIJLOPQUXZ"};
  } catch (std::invalid_argument& exception) {
    EXPECT_STREQ(
        exception.what(),
        "[biosoup::NucleicAcid::NucleicAcid] error: not a nucleotide");
  }
}

TEST(BiosoupNucleicAcidTest, Inflate) {
  NucleicAcid s{"test", "AaAaCcCcGgGgTtTt------ACGTRYKMSWBDHVN-nvhdbwsmkyrtgca------tTtTgGgGcCcCaAaA"};  // NOLINT
  EXPECT_EQ(s.deflated_data.size(), s.deflated_data.capacity());
  EXPECT_EQ(0, s.Code(16));
  EXPECT_EQ(1, s.Code(23));
  EXPECT_EQ(2, s.Code(35));
  EXPECT_EQ(3, s.Code(59));
  EXPECT_EQ("AAAACCCCGGGGTTTTAAAAAAACGTATGCCACATGAAAGTACACCGTATGCAAAAAAATTTTGGGGCCCCAAAA", s.InflateData());  // NOLINT
  EXPECT_EQ("TATGCCACATGAAAGTACACCGTAT", s.InflateData(25, 25));
  EXPECT_EQ("TGAAAGT", s.InflateData(34, 7));
  EXPECT_EQ("", s.InflateData(75, 42));
  EXPECT_EQ("C", s.InflateData(29, 1));
  EXPECT_EQ("G", s.InflateData(64, 1));
  EXPECT_EQ("CCAAAA", s.InflateData(69));
}

TEST(BiosoupNucleicAcidTest, Quality) {
  NucleicAcid s{
      "test",
      "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC",  // NOLINT
      "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"};  // NOLINT
  EXPECT_EQ(s.block_quality.size(), s.block_quality.capacity());
  EXPECT_EQ(31, s.Score(42));
  EXPECT_EQ(78, s.Score(84));
  EXPECT_EQ("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@oooooooooooooooooooooooooooooo", s.InflateQuality());  // NOLINT
  EXPECT_EQ("@@@@@@@@@@@@@@@@", s.InflateQuality(0, 16));
  EXPECT_EQ("@@oo", s.InflateQuality(62, 4));
  EXPECT_EQ("@", s.InflateQuality(63, 1));
  EXPECT_EQ("o", s.InflateQuality(64, 1));
  EXPECT_EQ("o", s.InflateQuality(93));
  EXPECT_EQ("ooo", s.InflateQuality(91, 20));
  EXPECT_EQ("", s.InflateQuality(95));
}

TEST(BiosoupNucleicAcidTest, ReverseAndComplement) {
  NucleicAcid s{
      "test",
      "ACGTACTGAGCTAGTCATCGATGCCAGTCATGCGATCGTACTAGCTGAGACTGATCGCATGCTAGTACGTCA",  // NOLINT
      "0123456789012345678901234567890123456789012345678901234567890123ZZZZZZZZ"};  // NOLINT
  NucleicAcid c{s};
  c.ReverseAndComplement();
  EXPECT_EQ("TGACGTACTAGCATGCGATCAGTCTCAGCTAGTACGATCGCATGACTGGCATCGATGACTAGCTCAGTACGT", c.InflateData());  // NOLINT
  EXPECT_EQ("ZZZZZZZZ4444444444444444444444444444444444444444444444444444444444444444", c.InflateQuality());  // NOLINT
  c.ReverseAndComplement();
  EXPECT_EQ(c.InflateData(), s.InflateData());
  EXPECT_EQ(c.InflateQuality(), s.InflateQuality());
}

}  // namespace test
}  // namespace biosoup