Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions extras/tests/scripts/testJunctionAlignment.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail

repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
build_dir="$(mktemp -d)"
trap 'rm -rf "${build_dir}"' EXIT

"${CXX:-g++}" \
-std=c++11 -Wall -Wextra \
-I"${repo_dir}/source" \
"${repo_dir}/extras/tests/testJunctionAlignment.cpp" \
-o "${build_dir}/testJunctionAlignment"

"${build_dir}/testJunctionAlignment"
22 changes: 22 additions & 0 deletions extras/tests/testJunctionAlignment.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include "OutSJ.h"

#include <cstdint>
#include <type_traits>
#include <utility>

using JunctionStorage=decltype(std::declval<OutSJ>().dataVec);

static_assert(std::is_same<JunctionStorage::value_type, uint64>::value,
"junction storage must provide uint64 alignment");
static_assert(Junction::startP % alignof(uint) == 0, "unaligned junction start");
static_assert(Junction::gapP % alignof(uint32) == 0, "unaligned junction gap");
static_assert(Junction::countUniqueP % alignof(uint32) == 0, "unaligned unique count");
static_assert(Junction::countMultipleP % alignof(uint32) == 0, "unaligned multiple count");
static_assert(Junction::overhangLeftP % alignof(uint16) == 0, "unaligned left overhang");
static_assert(Junction::overhangRightP % alignof(uint16) == 0, "unaligned right overhang");
static_assert(Junction::dataSize % alignof(uint64) == 0, "unaligned junction records");

int main()
{
return 0;
}
8 changes: 4 additions & 4 deletions source/OutSJ.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ OutSJ::OutSJ (uint nSJmax, Parameters &Pin, Genome &genomeIn) : oneSJ(genomeIn),

//data = new char [oneSJ.dataSize*nSJmax]; //allocate big array of SJ loci and properties
Nstore = nSJmax;
dataVec.resize(oneSJ.dataSize*Nstore);
data = dataVec.data();
dataVec.resize(oneSJ.dataSize*Nstore/sizeof(dataVec[0]));
data = reinterpret_cast<char*>(dataVec.data());
memset(data,0,oneSJ.dataSize*Nstore);
N=0;//initialize the counter
};
Expand Down Expand Up @@ -61,8 +61,8 @@ void OutSJ::collapseSJ() {//collapse junctions. Simple version now: re-sort ever

void OutSJ::dataSizeIncrease() {
Nstore *= 2;
dataVec.resize(oneSJ.dataSize*Nstore);
data = dataVec.data();
dataVec.resize(oneSJ.dataSize*Nstore/sizeof(dataVec[0]));
data = reinterpret_cast<char*>(dataVec.data());
};

Junction::Junction(Genome &genOut) : genOut(genOut) {
Expand Down
7 changes: 3 additions & 4 deletions source/OutSJ.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class Junction {//one junction
const static uint strandP=gapP+sizeof(uint32);
const static uint motifP=strandP+sizeof(char);
const static uint annotP=motifP+sizeof(char);
const static uint countUniqueP=annotP+sizeof(char);
const static uint countUniqueP=((annotP+sizeof(char)+alignof(uint32)-1)/alignof(uint32))*alignof(uint32);
const static uint countMultipleP=countUniqueP+sizeof(uint32);
const static uint overhangLeftP=countMultipleP+sizeof(uint32);
const static uint overhangRightP=overhangLeftP+sizeof(uint16);
Expand All @@ -22,7 +22,7 @@ class Junction {//one junction
uint32 *countUnique, *countMultiple;
uint16 *overhangLeft, *overhangRight;

const static uint dataSize=overhangRightP+sizeof(uint16);
const static uint dataSize=((overhangRightP+sizeof(uint16)+alignof(uint64)-1)/alignof(uint64))*alignof(uint64);

Junction(Genome &genomeIn);
void junctionPointer(char* sjPoint, uint isj);
Expand All @@ -38,7 +38,7 @@ class OutSJ {
public:
//all junctions
char* data; //sj array[Njunctions][dataSize]
vector<char> dataVec;
vector<uint64> dataVec;
uint64 N, Nstore; //N=number of junctions stored; Nstore=storage size
Junction oneSJ;

Expand All @@ -56,4 +56,3 @@ class OutSJ {
int compareSJ(const void* i1, const void* i2); //external functions

#endif