File: SAMPrinter_gtest.cpp

package info (click to toggle)
pbseqlib 5.3.4%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 7,020 kB
  • sloc: cpp: 77,246; python: 331; sh: 103; makefile: 42
file content (108 lines) | stat: -rw-r--r-- 3,131 bytes parent folder | download | duplicates (5)
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
99
100
101
102
103
104
105
106
107
108
/*
 * =====================================================================================
 *
 *       Filename:  SAMHeaderPrinter_gtest.cpp
 *
 *    Description:  Test alignment/format/SAMHeaderPrinter.hpp
 *
 *        Version:  1.0
 *        Created:  03/24/2015 04:51:29 PM
 *       Compiler:  gcc
 *
 *         Author:  Yuan Li (yli), yli@pacificbiosciences.com
 *        Company:  Pacific Biosciences
 *
 * =====================================================================================
 */

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>

#include <gtest/gtest.h>

#define private public
#define protected public

#include <alignment/format/SAMPrinter.hpp>

TEST(SAMPrinterTest, AddMatchBlockCigarOps)
{
    DNASequence qSeq;
    qSeq.Copy("XXXXXAAAAAGGGGGCCCCC");
    DNASequence tSeq;
    tSeq.Copy("AAAAANGGGGCCCCC");
    blasr::Block b;
    b.qPos = 5;
    b.tPos = 0;
    b.length = 15;
    std::vector<int> opSize;
    std::vector<char> opChar;

    DNALength qSeqPos = 0;
    DNALength tSeqPos = 0;

    const std::vector<int> expOpSize = {5, 1, 9};
    const std::vector<char> expOpChar = {'=', 'X', '='};

    AddMatchBlockCigarOps(qSeq, tSeq, b, qSeqPos, tSeqPos, opSize, opChar);

    EXPECT_EQ(opSize, expOpSize);
    EXPECT_EQ(opChar, expOpChar);
}

std::string merge_indels(const std::vector<int>& opSize, const std::vector<char>& opChar)
{
    std::vector<int> opSize_ = opSize;
    std::vector<char> opChar_ = opChar;
    SAMOutput::MergeAdjacentIndels(opSize_, opChar_, 'X');
    std::string ret = "";
    SAMOutput::CigarOpsToString(opSize_, opChar_, ret);
    return ret;
}

TEST(SAMPrinterTest, MergeAdjacentIndels)
{
    std::vector<int> opSize({10, 1, 5, 7, 6});
    std::vector<char> opChar({'=', '=', '=', 'X', 'X'});

    EXPECT_EQ(merge_indels(opSize, opChar), "16=13X");

    opChar = std::vector<char>({'I', 'D', 'D', '=', 'I'});
    EXPECT_EQ(merge_indels(opSize, opChar), "6X4I7=6I");

    opChar = std::vector<char>({'I', 'D', 'D', 'I', 'I'});
    EXPECT_EQ(merge_indels(opSize, opChar), "6X17I");

    opChar = std::vector<char>({'=', 'D', 'D', 'I', 'I'});
    EXPECT_EQ(merge_indels(opSize, opChar), "10=6X7I");

    opChar = std::vector<char>({'I', 'D', '=', 'I', 'D'});
    EXPECT_EQ(merge_indels(opSize, opChar), "1X9I5=6X1I");

    opSize = std::vector<int>({1, 1});
    opChar = std::vector<char>({'I', 'D'});
    EXPECT_EQ(merge_indels(opSize, opChar), "1X");

    opSize = std::vector<int>({1, 10});
    opChar = std::vector<char>({'I', 'D'});
    EXPECT_EQ(merge_indels(opSize, opChar), "1X9D");

    opSize = std::vector<int>({1});
    opChar = std::vector<char>({'='});
    EXPECT_EQ(merge_indels(opSize, opChar), "1=");

    opSize = std::vector<int>({1});
    opChar = std::vector<char>({'I'});
    EXPECT_EQ(merge_indels(opSize, opChar), "1I");

    opSize = std::vector<int>({1, 10});
    opChar = std::vector<char>({'X', '='});
    EXPECT_EQ(merge_indels(opSize, opChar), "1X10=");

    opSize = std::vector<int>({1, 10});
    opChar = std::vector<char>({'I', '='});
    EXPECT_EQ(merge_indels(opSize, opChar), "1I10=");
}