package picard.util;
import htsjdk.samtools.reference.ReferenceSequence;
import htsjdk.samtools.reference.ReferenceSequenceFile;
import htsjdk.samtools.util.Interval;
import htsjdk.samtools.SAMSequenceDictionary;
import htsjdk.samtools.SAMSequenceRecord;
import htsjdk.samtools.util.CollectionUtil;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.lang.Exception;import java.lang.Object;import java.lang.Override;import java.lang.String;import java.util.List;
/**
* Created by farjoun on 3/26/14.
*/
public class ScatterIntervalsByNsTest {
@DataProvider(name = "testSegregate")
public Object[][] testSegregate() {
return new Object[][]{
new Object[]{"NNNNNAAAAANNNNNN", 1, CollectionUtil.makeList(
new Interval("fake1", 1, 5),
new Interval("fake1", 6, 10),
new Interval("fake1", 11, 16))},
new Object[]{"NNNNNAAAAANNNNNN", 5, CollectionUtil.makeList(
new Interval("fake1", 1, 5),
new Interval("fake1", 6, 10),
new Interval("fake1", 11, 16))},
new Object[]{"NNNNNAAAnANNNNNN", 6, CollectionUtil.makeList(
new Interval("fake1", 1, 5),
new Interval("fake1", 6, 10),
new Interval("fake1", 11, 16))},
new Object[]{"AnTGCNNNNNACGTCG", 1, CollectionUtil.makeList(
new Interval("fake1", 1, 5),
new Interval("fake1", 6, 10),
new Interval("fake1", 11, 16))},
new Object[]{"ACTGCNNNNNACGTCG", 4, CollectionUtil.makeList(
new Interval("fake1", 1, 5),
new Interval("fake1", 6, 10),
new Interval("fake1", 11, 16))},
new Object[]{"ACTGCNNNNNACgctG", 5, CollectionUtil.makeList(
new Interval("fake1", 1, 16))},
new Object[]{"ACNGCNNNNNACnTNG", 5, CollectionUtil.makeList(
new Interval("fake1", 1, 16))},
new Object[]{"ACNGCNNNNNACnTNG", 0, CollectionUtil.makeList(
new Interval("fake1", 1, 2), //acgt
new Interval("fake1", 3, 3), //N
new Interval("fake1", 4, 5),
new Interval("fake1", 6, 10), //N
new Interval("fake1", 11, 12),
new Interval("fake1", 13, 13), //N
new Interval("fake1", 14, 14),
new Interval("fake1", 15, 15), //N
new Interval("fake1", 16, 16))},
new Object[]{"AAAAAAAAAAACnTNG", 0, CollectionUtil.makeList(
new Interval("fake1", 1, 12),
new Interval("fake1", 13, 13), //N
new Interval("fake1", 14, 14),
new Interval("fake1", 15, 15), //N
new Interval("fake1", 16, 16))},
new Object[]{"AAAAAAAAAAACATNG", 0, CollectionUtil.makeList(
new Interval("fake1", 1, 14),
new Interval("fake1", 15, 15), //N
new Interval("fake1", 16, 16))},
new Object[]{"ANCNNGCNNNNNACNTNGN", 1, CollectionUtil.makeList(
new Interval("fake1", 1, 3),
new Interval("fake1", 4, 5),
new Interval("fake1", 6, 7),
new Interval("fake1", 8, 12),
new Interval("fake1", 13, 18),
new Interval("fake1", 19, 19)
)},
new Object[]{"ANCNNGCNNNNNACNTNGN", 0, CollectionUtil.makeList(
new Interval("fake1", 1, 1),
new Interval("fake1", 2, 2),
new Interval("fake1", 3, 3),
new Interval("fake1", 4, 5),
new Interval("fake1", 6, 7),
new Interval("fake1", 8, 12),
new Interval("fake1", 13, 14),
new Interval("fake1", 15, 15),
new Interval("fake1", 16, 16),
new Interval("fake1", 17, 17),
new Interval("fake1", 18, 18),
new Interval("fake1", 19, 19)
)}
};
}
@Test(dataProvider = "testSegregate")
public void testSegregateReference(final String referenceString, final int maxNmerToMerge, final List<Interval> result) throws Exception {
final SAMSequenceRecord record = new SAMSequenceRecord("fake1", referenceString.length());
final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
dictionary.addSequence(record);
final ReferenceSequenceFile reference = new ReferenceSequenceFile() {
boolean done = false;
@Override
public SAMSequenceDictionary getSequenceDictionary() {
return dictionary;
}
@Override
public ReferenceSequence nextSequence() {
if (!done) {
done = true;
return getSequence(record.getSequenceName());
}
return null;
}
@Override
public void reset() {
done = false;
}
@Override
public boolean isIndexed() {
return false;
}
@Override
public ReferenceSequence getSequence(final String contig) {
if (contig.equals(record.getSequenceName())) {
return new ReferenceSequence(record.getSequenceName(), 0, referenceString.getBytes());
} else {
return null;
}
}
@Override
public ReferenceSequence getSubsequenceAt(final String contig, final long start, final long stop) {
return null;
}
@Override
public String toString() {
return null;
}
@Override
public void close() {}
};
Assert.assertEquals(ScatterIntervalsByNs.segregateReference(reference, maxNmerToMerge).getIntervals(), result);
}
}