/*
* Eoulsan development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public License version 2.1 or
* later and CeCILL-C. This should be distributed with the code.
* If you do not have a copy, see:
*
* http://www.gnu.org/licenses/lgpl-2.1.txt
* http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt
*
* Copyright for this code is held jointly by the Genomic platform
* of the Institut de Biologie de l'École normale supérieure and
* the individual authors. These should be listed in @author doc
* comments.
*
* For more information on the Eoulsan project and its aims,
* or to join the Eoulsan Google group, visit the home page
* at:
*
* http://outils.genomique.biologie.ens.fr/eoulsan
*
*/
package fr.ens.biologie.genomique.eoulsan.bio;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import fr.ens.biologie.genomique.eoulsan.bio.Alphabets;
import fr.ens.biologie.genomique.eoulsan.bio.Sequence;
public class SequenceTest {
@Test
public void testGetSetId() {
Sequence s = new Sequence();
assertEquals(0, s.getId());
s.setId(1);
assertEquals(1, s.getId());
s.setId(30);
assertEquals(30, s.getId());
}
@Test
public void testGetSetName() {
Sequence s = new Sequence();
assertEquals(null, s.getName());
s.setName("toto");
assertEquals("toto", s.getName());
s.setName("");
assertEquals("", s.getName());
s.setName("titi");
assertEquals("titi", s.getName());
s.setName(null);
assertEquals(null, s.getName());
assertTrue(s.setNameWithValidation("toto"));
assertEquals("toto", s.getName());
assertFalse(s.setNameWithValidation(""));
assertEquals("", s.getName());
assertTrue(s.setNameWithValidation("titi"));
assertEquals("titi", s.getName());
assertFalse(s.setNameWithValidation(null));
assertEquals(null, s.getName());
}
@Test
public void testGetIdentifierInName() {
Sequence s = new Sequence();
assertEquals(null, s.getIdentifierInName());
s.setName("");
assertEquals("", s.getIdentifierInName());
s.setName("titi");
assertEquals("titi", s.getIdentifierInName());
s.setName("titi toto");
assertEquals("titi", s.getIdentifierInName());
s.setName("titi ");
assertEquals("titi", s.getIdentifierInName());
s.setName("titi ");
assertEquals("titi", s.getIdentifierInName());
}
@Test
public void testGetDescriptionInName() {
Sequence s = new Sequence();
assertEquals(null, s.getDescriptionInName());
s.setName("");
assertEquals("", s.getDescriptionInName());
s.setName("");
assertEquals("", s.getDescriptionInName());
s.setName("titi toto");
assertEquals("toto", s.getDescriptionInName());
s.setName(" titi toto ");
assertEquals("toto", s.getDescriptionInName());
s.setName(" titi toto ");
assertEquals("toto", s.getDescriptionInName());
s.setName("titi");
assertEquals("", s.getDescriptionInName());
s.setName("titi ");
assertEquals("", s.getDescriptionInName());
s.setName(" titi ");
assertEquals("", s.getDescriptionInName());
}
@Test
public void testGetSetDescription() {
Sequence s = new Sequence();
assertNull(s.getDescription());
s.setDescription("My description");
assertEquals("My description", s.getDescription());
s.setDescription("");
assertEquals("", s.getDescription());
s.setDescription("My description2");
assertEquals("My description2", s.getDescription());
s.setDescription(null);
assertNull(s.getDescription());
}
@Test
public void testGetSetAlphabet() {
Sequence s = new Sequence();
assertNotNull(s.getAlphabet());
assertEquals(Alphabets.AMBIGUOUS_DNA_ALPHABET, s.getAlphabet());
s.setAlphabet(Alphabets.UNAMBIGUOUS_DNA_ALPHABET);
assertEquals(Alphabets.UNAMBIGUOUS_DNA_ALPHABET, s.getAlphabet());
try {
s.setAlphabet(null);
assertTrue(false);
} catch (NullPointerException e) {
assertTrue(true);
}
assertEquals(Alphabets.UNAMBIGUOUS_DNA_ALPHABET, s.getAlphabet());
}
@Test
public void testGetSequence() {
Sequence s = new Sequence();
assertNull(s.getSequence());
s.setSequence("ATGC");
assertEquals("ATGC", s.getSequence());
s.setSequence("");
assertEquals("", s.getSequence());
s.setSequence("===");
assertEquals("===", s.getSequence());
s.setSequence("ATGCTT");
assertEquals("ATGCTT", s.getSequence());
s.setSequence(null);
assertNull(s.getSequence());
assertTrue(s.setSequenceWithValidation("ATGC"));
assertEquals("ATGC", s.getSequence());
assertFalse(s.setSequenceWithValidation(""));
assertEquals("", s.getSequence());
assertFalse(s.setSequenceWithValidation("==="));
assertEquals("===", s.getSequence());
assertTrue(s.setSequenceWithValidation("ATGCTT"));
assertEquals("ATGCTT", s.getSequence());
assertFalse(s.setSequenceWithValidation(null));
assertNull(s.getSequence());
}
@Test
public void testSet() {
Sequence s1 = new Sequence();
assertEquals(0, s1.getId());
assertNull(s1.getName());
assertNull(s1.getDescription());
assertEquals(Alphabets.AMBIGUOUS_DNA_ALPHABET, s1.getAlphabet());
assertNull(s1.getSequence());
Sequence s2 = new Sequence(1, "toto", "ATGC", "test sequence");
s2.setAlphabet(Alphabets.UNAMBIGUOUS_DNA_ALPHABET);
assertEquals(1, s2.getId());
assertEquals("toto", s2.getName());
assertEquals("test sequence", s2.getDescription());
assertEquals(Alphabets.UNAMBIGUOUS_DNA_ALPHABET, s2.getAlphabet());
assertEquals("ATGC", s2.getSequence());
// Test if there is no change in s1
assertEquals(0, s1.getId());
assertNull(s1.getName());
assertNull(s1.getDescription());
assertEquals(Alphabets.AMBIGUOUS_DNA_ALPHABET, s1.getAlphabet());
assertNull(s1.getSequence());
s1.set(s2);
assertEquals(1, s1.getId());
assertEquals("toto", s1.getName());
assertEquals("test sequence", s1.getDescription());
assertEquals(Alphabets.UNAMBIGUOUS_DNA_ALPHABET, s1.getAlphabet());
assertEquals("ATGC", s1.getSequence());
Sequence s3 = new Sequence(s2);
assertEquals(1, s3.getId());
assertEquals("toto", s3.getName());
assertEquals("test sequence", s3.getDescription());
assertEquals(Alphabets.UNAMBIGUOUS_DNA_ALPHABET, s3.getAlphabet());
assertEquals("ATGC", s3.getSequence());
try {
s1.set(null);
assertTrue(false);
} catch (NullPointerException e) {
assertTrue(true);
}
try {
new Sequence(null);
assertTrue(false);
} catch (NullPointerException e) {
assertTrue(true);
}
}
@Test
public void testLength() {
Sequence s = new Sequence();
assertEquals(0, s.length());
s.setSequence("ATGC");
assertEquals(4, s.length());
s.setSequence("ATGCATGC");
assertEquals(8, s.length());
}
@Test
public void testSubSequence() {
Sequence s1 = new Sequence(1, "toto", "ATGC");
try {
s1.subSequence(-1, 2);
assertTrue(false);
} catch (StringIndexOutOfBoundsException e) {
assertTrue(true);
}
try {
s1.subSequence(0, 5);
assertTrue(false);
} catch (StringIndexOutOfBoundsException e) {
assertTrue(true);
}
try {
s1.subSequence(2, 1);
assertTrue(false);
} catch (StringIndexOutOfBoundsException e) {
assertTrue(true);
}
Sequence s2 = s1.subSequence(0, 4);
assertEquals("ATGC", s2.getSequence());
s2 = s1.subSequence(1, 4);
assertEquals("TGC", s2.getSequence());
assertEquals(-1, s2.getId());
assertEquals("toto[part]", s2.getName());
s1.setName(null);
s2 = s1.subSequence(1, 4);
assertNull(s2.getName());
s1.setSequence(null);
assertNull(s1.subSequence(1, 4));
}
@Test
public void testConcat() {
Sequence s1 = new Sequence(1, "toto", "AATT");
Sequence s2 = new Sequence(2, "titi", "GGCC");
Sequence s3 = s1.concat(s2);
assertEquals("AATTGGCC", s3.getSequence());
assertEquals("toto[merged]", s3.getName());
s1.setSequence(null);
s3 = s1.concat(s2);
assertEquals("GGCC", s3.getSequence());
s1.setSequence("AATT");
s2.setSequence(null);
s1.setAlphabet(Alphabets.UNAMBIGUOUS_DNA_ALPHABET);
s3 = s1.concat(s2);
assertEquals("AATT", s3.getSequence());
assertEquals(Alphabets.UNAMBIGUOUS_DNA_ALPHABET, s3.getAlphabet());
s3 = s1.concat(null);
assertEquals(s1.getId(), s3.getId());
assertEquals(s1.getName(), s3.getName());
assertEquals(s1.getAlphabet(), s3.getAlphabet());
assertEquals(s1.getSequence(), s3.getSequence());
assertFalse(s1 == s3);
}
@Test
public void testCountSequenceSequence() {
Sequence s1 = new Sequence(1, "toto", "AATTGGTT");
Sequence s2 = new Sequence(1, "titi", "TT");
assertEquals(2, s1.countSequence(s2));
s2 = new Sequence(1, "titi", "AA");
assertEquals(1, s1.countSequence(s2));
s2 = new Sequence(1, "titi", "GG");
assertEquals(1, s1.countSequence(s2));
s2 = new Sequence(1, "titi", "CC");
assertEquals(0, s1.countSequence(s2));
assertEquals(0, s1.countSequence((Sequence) null));
}
@Test
public void testCountSequenceString() {
Sequence s = new Sequence(1, "toto", "AATTGGTT");
assertEquals(2, s.countSequence("A"));
assertEquals(1, s.countSequence("AA"));
assertEquals(4, s.countSequence("T"));
assertEquals(2, s.countSequence("TT"));
assertEquals(0, s.countSequence("C"));
assertEquals(0, s.countSequence(""));
assertEquals(0, s.countSequence((String) null));
s = new Sequence(1, "toto", null);
assertEquals(0, s.countSequence("TT"));
s = new Sequence(1, "toto", "");
assertEquals(0, s.countSequence("TT"));
s = new Sequence(1, "toto", "AATTTGGTT");
assertEquals(2, s.countSequence("TT"));
s = new Sequence(1, "toto", "AATTTTGGTT");
assertEquals(3, s.countSequence("TT"));
}
@Test
public void testGettm() {
Sequence s = new Sequence(1, "toto", "AATTGGTT");
assertEquals(s.getTm(50.0f, 50.0f), s.getTm(), 0.1);
}
@Test
public void testGetGCPercent() {
Sequence s = new Sequence(1, "toto", "AATTGGTT");
assertEquals(2.0 / 8.0, s.getGCPercent(), 0.1);
s = new Sequence(1, "toto", "");
assertEquals(Double.NaN, s.getGCPercent(), 0.1);
s = new Sequence(1, "toto", null);
assertEquals(Double.NaN, s.getGCPercent(), 0.1);
s = new Sequence(1, "toto", "AATTAATT");
assertEquals(0.0 / 8.0, s.getGCPercent(), 0.1);
s = new Sequence(1, "toto", "AATTGGCC");
assertEquals(4.0 / 8.0, s.getGCPercent(), 0.1);
}
@Test
public void testReverse() {
Sequence s = new Sequence(0, "toto", "ATGC");
assertEquals("ATGC", s.getSequence());
s.reverse();
assertEquals("CGTA", s.getSequence());
s = new Sequence(0, "toto", null);
assertNull(s.getSequence());
}
@Test
public void testReverseString() {
assertNull(
Sequence.reverse(null));
assertEquals("CGTA",
Sequence.reverse("ATGC"));
}
@Test
public void testComplement() {
Sequence s = new Sequence(0, "toto", "ATGC");
assertEquals("ATGC", s.getSequence());
s.complement();
assertEquals("TACG", s.getSequence());
s = new Sequence(0, "toto", null);
assertNull(s.getSequence());
}
@Test
public void testComplementString() {
assertNull(
Sequence.complement(null, Alphabets.AMBIGUOUS_DNA_ALPHABET));
assertNull(Sequence.complement("ATGC", null));
assertEquals("GCAT",
Sequence.complement("CGTA", Alphabets.AMBIGUOUS_DNA_ALPHABET));
}
@Test
public void testReverseComplement() {
Sequence s = new Sequence(0, "toto", "ATGC");
assertEquals("ATGC", s.getSequence());
s.reverseComplement();
assertEquals("GCAT", s.getSequence());
s = new Sequence(0, "toto", null);
assertNull(s.getSequence());
}
@Test
public void testReverseComplementString() {
assertNull(
Sequence.reverseComplement(null, Alphabets.AMBIGUOUS_DNA_ALPHABET));
assertNull(Sequence.reverseComplement("ATGC", null));
assertEquals("GCAT",
Sequence.reverseComplement("ATGC", Alphabets.AMBIGUOUS_DNA_ALPHABET));
}
@Test
public void testToFasta() {
Sequence s = new Sequence(0, "toto", "ATGC");
assertEquals(">toto\nATGC\n", s.toFasta());
s = new Sequence(0, null, "ATGC");
assertEquals(">\nATGC\n", s.toFasta());
s = new Sequence(0, "toto", null);
assertEquals(">toto\n", s.toFasta());
}
@Test
public void testToFastaInt() {
Sequence s = new Sequence(0, "toto", "ATGC");
assertEquals(">toto\nATGC\n", s.toFasta(0));
assertEquals(">toto\nATGC\n", s.toFasta(60));
s = new Sequence(0, "toto", "ATGCATGCAT");
assertEquals(">toto\nATGCA\nTGCAT\n", s.toFasta(5));
assertEquals(">toto\nATGCAT\nGCAT\n", s.toFasta(6));
}
@Test
public void testParseFasta() {
Sequence s = new Sequence();
s.parseFasta(">toto\nATGCA\nTGCAT\n");
assertEquals("toto", s.getName());
assertEquals("ATGCATGCAT", s.getSequence());
s.parseFasta(null);
assertNull(s.getName());
assertNull(s.getSequence());
s.parseFasta("toto\nATGCA\nTGCAT\n");
assertNull(s.getName());
assertNull(s.getSequence());
s.parseFasta(">toto");
assertNull(s.getName());
assertNull(s.getSequence());
s.parseFasta(">toto\n");
assertNull(s.getName());
assertNull(s.getSequence());
s.parseFasta(">toto\n ATGCA \n \n TGCAT \n");
assertEquals("toto", s.getName());
assertEquals("ATGCATGCAT", s.getSequence());
s.parseFasta("toto\nATGCA\n>TGCAT\n");
assertNull(s.getName());
assertNull(s.getSequence());
s.parseFasta("");
assertNull(s.getName());
assertNull(s.getSequence());
s.parseFasta(">toto\n>ATGCA\n>TGCAT\n");
assertNull(s.getName());
assertNull(s.getSequence());
}
@Test
public void testValidate() {
Sequence s = new Sequence(0, "toto", "ATGC");
assertTrue(s.validate());
s = new Sequence(-1, "toto", "ATGC");
assertTrue(s.validate());
s = new Sequence(0, "toto", "A#GC");
assertFalse(s.validate());
s = new Sequence(0, "toto", null);
assertFalse(s.validate());
s = new Sequence(0, null, "ATGC");
assertFalse(s.validate());
s = new Sequence(0, "toto", "");
assertFalse(s.validate());
}
@Test
public void testEqualsObject() {
Sequence s1 = new Sequence(0, "toto", "ATGC", "desc");
Sequence s2 = new Sequence(0, "toto", "ATGC", "desc");
Sequence s3 = new Sequence(0, "titi", "ATGC", "desc");
assertTrue(s1.equals(s1));
assertFalse(s1.equals(null));
assertFalse(s1.getSequence().equals("titit"));
assertTrue(s1.equals(s1));
assertEquals(s1, s2);
assertFalse(s1 == s2);
assertNotSame(s1, s3);
s3.setName("toto");
assertTrue(s1.equals(s3));
s3.setName("titi");
assertFalse(s1.equals(s3));
s3.setName("toto");
assertTrue(s1.equals(s3));
s3.setDescription("other desc");
assertFalse(s1.equals(s3));
assertTrue(s1.equals(s2));
s3.setDescription("desc");
assertTrue(s1.equals(s3));
s2.setAlphabet(Alphabets.UNAMBIGUOUS_DNA_ALPHABET);
assertFalse(s1.equals(s2));
s2.setAlphabet(Alphabets.AMBIGUOUS_DNA_ALPHABET);
assertTrue(s1.equals(s2));
s2.setSequence("AAAA");
assertFalse(s1.equals(s2));
s2.setSequence("ATGC");
assertTrue(s1.equals(s2));
s2.setId(5);
assertFalse(s1.equals(s2));
}
@Test
public void testHashCode() {
Sequence s1 = new Sequence(0, "toto", "ATGC", "desc");
Sequence s2 = new Sequence(0, "toto", "ATGC", "desc");
Sequence s3 = new Sequence(0, "titi", "ATGC", "desc");
assertEquals(s1.hashCode(), s2.hashCode());
assertNotSame(s1.hashCode(), s3.hashCode());
s3.setName("toto");
assertEquals(s1.hashCode(), s3.hashCode());
s3.setDescription("other desc");
assertNotSame(s1.hashCode(), s3.hashCode());
assertEquals(s1.hashCode(), s2.hashCode());
s2.setAlphabet(Alphabets.UNAMBIGUOUS_DNA_ALPHABET);
assertNotSame(s1.hashCode(), s2.hashCode());
s2.setAlphabet(Alphabets.AMBIGUOUS_DNA_ALPHABET);
assertEquals(s1.hashCode(), s2.hashCode());
s2.setId(5);
assertNotSame(s1.hashCode(), s2.hashCode());
}
@Test
public void testToString() {
Sequence s = new Sequence(1, "toto", "ATGC", "desc");
assertEquals(
"Sequence{id=1, name=toto, description=desc, alphabet=AmbiguousDNA, sequence=ATGC}",
s.toString());
}
}