diff SMART/Java/Python/structure/test/Test_Interval.py @ 6:769e306b7933

Change the repository level.
author yufei-luo
date Fri, 18 Jan 2013 04:54:14 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SMART/Java/Python/structure/test/Test_Interval.py	Fri Jan 18 04:54:14 2013 -0500
@@ -0,0 +1,369 @@
+import unittest
+from SMART.Java.Python.structure.Interval import Interval
+
+class Test_Interval(unittest.TestCase):
+
+    def setUp(self):
+        self.iInterval = Interval()
+        self.iInterval1 = Interval()
+        self.iInterval2 = Interval()
+        
+    def test__init__(self):
+        self.iInterval.setChromosome("chromosome")
+        self.iInterval.setName("sequence")
+        self.iInterval.setStart(0)
+        self.iInterval.setEnd(123)
+        obsStart = self.iInterval.getStart()
+        obsEnd = self.iInterval.getEnd()
+        expStart = 0
+        expEnd = 123
+        
+        self.assertEqual(expStart, obsStart)
+        self.assertEqual(expEnd, obsEnd)
+
+    def test_copy(self):
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(300)
+        self.iInterval1.setDirection("+")
+
+        self.iInterval2.copy(self.iInterval1)
+        self.assertEqual(self.iInterval2.getName(), "interval1")
+        self.assertEqual(self.iInterval2.getChromosome(), "chr1")
+        self.assertEqual(self.iInterval2.getStart(), 100)
+        self.assertEqual(self.iInterval2.getEnd(), 300)
+        self.assertEqual(self.iInterval2.getDirection(), 1)
+
+        self.iInterval1.setStart(200)
+        self.assertEqual(self.iInterval2.getStart(), 100)
+        
+    def test_getDirection(self):
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(300)
+        self.iInterval1.setDirection("+")
+        expDirect = 1
+        self.assertEquals(expDirect,self.iInterval1.getDirection())
+
+    #!!!! Warning: two methods getStart() and getEnd() give the information maximum and minimum in interval.!!!!#
+    #In case strand = "+", start < end; strand = "-", start > end   
+    def test_setStartEnd(self):
+        self.iInterval1 = Interval()
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(300)
+        self.iInterval1.setDirection("+")
+        
+        self.assertEqual(self.iInterval1.getName(), "interval1")
+        self.assertEqual(self.iInterval1.getChromosome(), "chr1")
+        self.assertEqual(self.iInterval1.getStart(),100)
+        self.assertEqual(self.iInterval1.getEnd(), 300)
+        self.assertEqual(self.iInterval1.getDirection(), 1)
+
+        self.iInterval1.setStart(200)
+        self.assertEqual(self.iInterval1.getStart(), 200)
+        self.assertEqual(self.iInterval1.getEnd(), 300)
+
+        self.iInterval1.setEnd(300)
+        self.iInterval1.setStart(100)
+        self.assertEqual(self.iInterval1.getStart(), 100)
+        self.assertEqual(self.iInterval1.getEnd(), 300)
+
+        self.iInterval1.setEnd(1200)
+        self.iInterval1.setStart(1000)
+        self.assertEqual(self.iInterval1.getStart(), 1000)
+        self.assertEqual(self.iInterval1.getEnd(), 1200)
+
+        self.iInterval1.reverse()
+        self.assertEqual(self.iInterval1.getDirection(), -1)
+        self.assertEqual(self.iInterval1.getStart(), 1000)
+        self.assertEqual(self.iInterval1.getEnd(), 1200)
+
+        self.iInterval1.setStart(1100)
+        self.assertEqual(self.iInterval1.getStart(), 1100)
+        self.assertEqual(self.iInterval1.getEnd(), 1200)
+
+        self.iInterval1.setEnd(2200)
+        self.iInterval1.setStart(2000)
+        self.assertEqual(self.iInterval1.getStart(), 2000)
+        self.assertEqual(self.iInterval1.getEnd(), 2200)
+
+        self.iInterval1.setStart(1000)
+        self.iInterval1.setEnd(1200)
+        self.assertEqual(self.iInterval1.getStart(), 1000)
+        self.assertEqual(self.iInterval1.getEnd(), 1200)
+
+    def test_reverse(self):
+        self.iInterval1 = Interval()
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(200)
+        self.iInterval1.setDirection("+")
+        self.iInterval1.reverse()
+        self.assertEqual(self.iInterval1.getStart(), 100)
+        self.assertEqual(self.iInterval1.getEnd(), 200)
+        self.assertEqual(self.iInterval1.getDirection(), -1)
+
+    def test_overlapWith(self):
+        self.iInterval1 = Interval()
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(200)
+        self.iInterval1.setDirection("+")
+        
+        self.iInterval2 = Interval()
+        self.iInterval2.copy(self.iInterval1)
+        self.iInterval2.setName("interval2")
+
+        self.assertTrue(self.iInterval1.overlapWith(self.iInterval2))
+
+        self.iInterval2.setChromosome("chr2")
+        try:
+            self.iInterval1.overlapWith(self.iInterval2)
+            self.fail()
+        except Exception:
+            pass
+
+        self.iInterval2.setChromosome("chr1")
+        self.iInterval2.setEnd(400)
+        self.iInterval2.setStart(300)
+        self.assertFalse(self.iInterval1.overlapWith(self.iInterval2))
+        
+        self.iInterval2.setStart(200)
+        self.assertTrue(self.iInterval1.overlapWith(self.iInterval2))
+
+    def test_isIncludeIn(self):
+        self.iInterval1 = Interval()
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(200)
+        self.iInterval1.setDirection("+")
+        
+        self.iInterval2 = Interval()
+        self.iInterval2.setName("interval2")
+        self.iInterval2.setChromosome("chr1")
+        self.iInterval2.setStart(80)
+        self.iInterval2.setEnd(280)
+        self.iInterval2.setDirection("+")        
+        self.assertTrue(self.iInterval1.isIncludeIn(self.iInterval2))
+        
+    def test_getDistance(self):
+        self.iInterval1 = Interval()
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(200)
+        self.iInterval1.setDirection("+")
+        
+        self.iInterval2 = Interval()
+        self.iInterval2.copy(self.iInterval1)
+        self.iInterval2.setName("interval2")
+
+        self.assertEqual(self.iInterval1.getDistance(self.iInterval2), 0)
+        self.assertEqual(self.iInterval2.getDistance(self.iInterval1), 0)
+
+        self.iInterval2.setChromosome("chr2")
+        try:
+            self.iInterval1.getDistance(self.iInterval2)
+            self.fail()
+        except Exception:
+            pass
+
+        self.iInterval2.setChromosome("chr1")
+        self.iInterval2.setEnd(400)
+        self.iInterval2.setStart(300)
+        self.assertEqual(self.iInterval1.getDistance(self.iInterval2), 100)
+        self.assertEqual(self.iInterval2.getDistance(self.iInterval1), 100)
+        
+    def test_getRelativeDistance(self):
+        self.iInterval1 = Interval()
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(200)
+        self.iInterval1.setDirection("+")
+        
+        self.iInterval2 = Interval()
+        self.iInterval2.copy(self.iInterval1)
+        self.iInterval2.setName("interval2")
+
+        self.assertEqual(self.iInterval1.getDistance(self.iInterval2), 0)
+        self.assertEqual(self.iInterval2.getDistance(self.iInterval1), 0)
+
+        self.iInterval2.setChromosome("chr2")
+        try:
+            self.iInterval1.getDistance(self.iInterval2)
+            self.fail()
+        except Exception:
+            pass
+
+        self.iInterval2.setChromosome("chr1")
+        self.iInterval2.setEnd(400)
+        self.iInterval2.setStart(300)
+        self.assertEqual(self.iInterval1.getRelativeDistance(self.iInterval2), 100)
+        self.assertEqual(self.iInterval2.getRelativeDistance(self.iInterval1), -100)
+        
+    def test_merge(self):
+        self.iInterval1 = Interval()
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(200)
+        self.iInterval1.setDirection("+")
+        
+        self.iInterval2 = Interval()
+        self.iInterval2.copy(self.iInterval1)
+        self.iInterval2.setName("interval2")
+        self.iInterval2.merge(self.iInterval1)
+
+        self.assertEqual(self.iInterval1, self.iInterval2)
+
+        self.iInterval2.setChromosome("chr2")
+        expMessage = "Cannot merge '%s' and '%s' for they are on different chromosomes." % (str(self.iInterval2), str(self.iInterval1))
+        isExceptionRaised = False
+        try:
+            self.iInterval2.merge(self.iInterval1)
+        except Exception, e:
+            isExceptionRaised = True
+        obsMessage = str(e)
+
+        self.assertTrue(isExceptionRaised)
+        self.assertEquals(expMessage, obsMessage)
+        #Warning! Both two intervals should be on the same chromosome and direction.  
+        self.iInterval2.setChromosome("chr1")
+        self.iInterval2.setStart(300)
+        self.iInterval2.setEnd(400)
+        self.iInterval2.merge(self.iInterval1)
+        self.assertEqual(self.iInterval2.getStart(), 100)
+        self.assertEqual(self.iInterval2.getEnd(), 400)
+        self.assertEqual(self.iInterval2.getChromosome(), "chr1")
+
+    def test_include(self):
+        iInterval1 = Interval()
+        iInterval1.setName("interval1")
+        iInterval1.setChromosome("chr1")
+        iInterval1.setStart(100)
+        iInterval1.setEnd(200)
+        iInterval1.setDirection("+")
+        
+        iInterval2 = Interval()
+        iInterval2.copy(iInterval1)
+        iInterval2.setName("interval2")
+        self.assertTrue(iInterval1.include(iInterval2))
+        self.assertTrue(iInterval2.include(iInterval1))
+
+        iInterval2.setChromosome("chr2")
+        self.assertFalse(iInterval1.include(iInterval2))
+        self.assertFalse(iInterval2.include(iInterval1))
+
+        iInterval2.setChromosome("chr1")
+        iInterval1.setStart(1)
+        self.assertTrue(iInterval1.include(iInterval2))
+        self.assertFalse(iInterval2.include(iInterval1))
+        
+        iInterval1.setStart(100)
+        iInterval1.setEnd(300)
+        self.assertTrue(iInterval1.include(iInterval2))
+        self.assertFalse(iInterval2.include(iInterval1))
+        
+
+    def test_getDifference(self):
+        iInterval1 = Interval()
+        iInterval1.setName("interval1")
+        iInterval1.setChromosome("chr1")
+        iInterval1.setStart(100)
+        iInterval1.setEnd(400)
+        iInterval1.setDirection("+")
+        
+        iInterval2 = Interval()
+        iInterval2.copy(iInterval1)
+        iInterval2.setName("interval2")
+        self.assertEqual(iInterval1.getDifference(iInterval2), [])
+        self.assertEqual(iInterval2.getDifference(iInterval1), [])
+
+        iInterval2.setChromosome("chr2")
+        results = iInterval1.getDifference(iInterval2)
+        self.assertEqual(len(results), 1)
+        resultInterval = results[0]
+        self.assertEqual(resultInterval.getStart(),      iInterval1.getStart())
+        self.assertEqual(resultInterval.getEnd(),        iInterval1.getEnd())
+        self.assertEqual(resultInterval.getDirection(),  iInterval1.getDirection())
+        self.assertEqual(resultInterval.getChromosome(), iInterval1.getChromosome())
+
+        iInterval2.setChromosome("chr1")
+        iInterval2.setEnd(300)
+        results = iInterval1.getDifference(iInterval2)
+        self.assertEqual(len(results), 1)
+        resultInterval = results[0]
+        self.assertEqual(resultInterval.getStart(),      301)
+        self.assertEqual(resultInterval.getEnd(),        iInterval1.getEnd())
+        self.assertEqual(resultInterval.getDirection(),  iInterval1.getDirection())
+        self.assertEqual(resultInterval.getChromosome(), iInterval1.getChromosome())
+        
+        iInterval2.setDirection("-")
+        results = iInterval1.getDifference(iInterval2, True)
+        self.assertEqual(len(results), 1)
+        resultInterval = results[0]
+        self.assertEqual(resultInterval.getStart(),      iInterval1.getStart())
+        self.assertEqual(resultInterval.getEnd(),        iInterval1.getEnd())
+        self.assertEqual(resultInterval.getDirection(),  iInterval1.getDirection())
+        self.assertEqual(resultInterval.getChromosome(), iInterval1.getChromosome())
+        
+        iInterval2.setDirection("+")
+        iInterval2.setStart(200)
+        results = iInterval1.getDifference(iInterval2)
+        self.assertEqual(len(results), 2)
+        resultInterval1, resultInterval2 = results
+        self.assertEqual(resultInterval1.getStart(),      iInterval1.getStart())
+        self.assertEqual(resultInterval1.getEnd(),        199)
+        self.assertEqual(resultInterval1.getDirection(),  iInterval1.getDirection())
+        self.assertEqual(resultInterval1.getChromosome(), iInterval1.getChromosome())
+        self.assertEqual(resultInterval2.getStart(),      301)
+        self.assertEqual(resultInterval2.getEnd(),        iInterval1.getEnd())
+        self.assertEqual(resultInterval2.getDirection(),  iInterval1.getDirection())
+        self.assertEqual(resultInterval2.getChromosome(), iInterval1.getChromosome())
+
+        iInterval2.setEnd(2000)
+        iInterval2.setStart(1000)
+        results = iInterval1.getDifference(iInterval2)
+        self.assertEqual(len(results), 1)
+        resultInterval = results[0]
+        self.assertEqual(resultInterval.getStart(),      iInterval1.getStart())
+        self.assertEqual(resultInterval.getEnd(),        iInterval1.getEnd())
+        self.assertEqual(resultInterval.getDirection(),  iInterval1.getDirection())
+        self.assertEqual(resultInterval.getChromosome(), iInterval1.getChromosome())
+ 
+    def test_mergeWithDifferentStrand(self):
+        self.iInterval1 = Interval()
+        self.iInterval1.setName("interval1")
+        self.iInterval1.setChromosome("chr1")
+        self.iInterval1.setStart(100)
+        self.iInterval1.setEnd(200)
+        self.iInterval1.setDirection("+")
+   
+        self.iInterval2 = Interval()
+        self.iInterval2.setName("interval2")
+        self.iInterval2.setChromosome("chr1")
+        self.iInterval2.setStart(300)
+        self.iInterval2.setEnd(400)
+        self.iInterval2.setDirection("-")
+
+        expMessage = "Cannot merge '%s' and '%s' for they are on different strands." % (str(self.iInterval2), str(self.iInterval1))
+        isExceptionRaised = False
+        try:
+            self.iInterval2.merge(self.iInterval1)
+        except Exception, e:
+            isExceptionRaised = True
+        obsMessage = str(e)
+
+        self.assertTrue(isExceptionRaised)
+        self.assertEquals(expMessage, obsMessage)
+
+if __name__ == "__main__":
+    unittest.main()