001 package calhoun.seq.test;
002
003 import java.util.Map;
004
005 import calhoun.seq.RepeatedSubsequence;
006 import calhoun.util.AbstractTestCase;
007
008 public class RepeatedSubsequenceTest extends AbstractTestCase {
009 public void testRepeatedSubsequence() {
010 assertEquals("ATGC", RepeatedSubsequence.calc("ATGC"));
011 assertEquals("A", RepeatedSubsequence.calc("AA"));
012 assertEquals("A", RepeatedSubsequence.calc("AAA"));
013 assertEquals("A", RepeatedSubsequence.calc("AAAA"));
014 assertEquals("A", RepeatedSubsequence.calc("AAAAA"));
015 assertEquals("A", RepeatedSubsequence.calc("AAAAAA"));
016 assertEquals("AT", RepeatedSubsequence.calc("ATATATATAT"));
017 assertEquals("ATATCG", RepeatedSubsequence.calc("ATATCGATATCG"));
018 assertEquals("AT", RepeatedSubsequence.calc("ATATATATATAT"));
019 }
020
021 public void testRollingMatch() {
022 assertEquals(true, RepeatedSubsequence.isRollingMatch("ATGC", "ATGC"));
023 assertEquals(true, RepeatedSubsequence.isRollingMatch("CATG", "ATGC"));
024 assertEquals(true, RepeatedSubsequence.isRollingMatch("GCAT", "ATGC"));
025 assertEquals(true, RepeatedSubsequence.isRollingMatch("TGCA", "ATGC"));
026 assertEquals(false, RepeatedSubsequence.isRollingMatch("TCGA", "ATGC"));
027 }
028
029 private String getCanonical(Map<String, Integer> m, String seq) {
030 // Get the smallest repeated subsequence from this sequence
031 seq = RepeatedSubsequence.calc(seq);
032
033 // Check this subseqeunce vs. all others to see if we have a rolling match.
034 for(String key : m.keySet()) {
035 if(RepeatedSubsequence.isRollingMatch(key, seq)) {
036 m.put(key, m.get(key) + 1);
037 return key;
038 }
039 }
040
041 // If no match, add it into the map
042 m.put(seq, 1);
043 return seq;
044 }
045 }