Mercurial > repos > yufei-luo > s_mart
diff commons/core/coord/test/Test_SetUtils.py @ 31:0ab839023fe4
Uploaded
author | m-zytnicki |
---|---|
date | Tue, 30 Apr 2013 14:33:21 -0400 |
parents | 769e306b7933 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commons/core/coord/test/Test_SetUtils.py Tue Apr 30 14:33:21 2013 -0400 @@ -0,0 +1,1689 @@ +# Copyright INRA (Institut National de la Recherche Agronomique) +# http://www.inra.fr +# http://urgi.versailles.inra.fr +# +# This software is governed by the CeCILL license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL +# license as circulated by CEA, CNRS and INRIA at the following URL +# "http://www.cecill.info". +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# In this respect, the user's attention is drawn to the risks associated +# with loading, using, modifying and/or developing or reproducing the +# software by the user in light of its specific status of free software, +# that may mean that it is complicated to manipulate, and that also +# therefore means that it is reserved for developers and experienced +# professionals having in-depth computer knowledge. Users are therefore +# encouraged to load and test the software's suitability as regards their +# requirements in conditions enabling the security of their systems and/or +# data to be ensured and, more generally, to use and operate it in the +# same conditions as regards security. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL license and that you accept its terms. + + +import unittest +import os +import time +from commons.core.coord.Set import Set +from commons.core.coord.Map import Map +from commons.core.coord.SetUtils import SetUtils +from commons.core.utils.FileUtils import FileUtils + + +class Test_SetUtils( unittest.TestCase ): + + def test_changeIdInList_on_empty_list(self): + lSets = [] + SetUtils.changeIdInList( lSets , 1 ) + obsLSets = lSets + expLSets = [] + self.assertEquals( expLSets , obsLSets ) + + def test_changeIdInList_on_list_size_one(self): + set1 = Set( 1, "set1", "seq1", 1, 2 ) + lSets = [ set1 ] + SetUtils.changeIdInList( lSets , 9 ) + obsLSets = lSets + set1 = Set( 9, "set1", "seq1", 1, 2 ) + expLSets = [ set1 ] + self.assertEquals( expLSets , obsLSets ) + + def test_changeIdInList(self): + set1 = Set( 1, "set1", "seq1", 1, 2 ) + set2 = Set( 2, "set2", "seq2", 2, 3 ) + lSets = [ set1, set2 ] + SetUtils.changeIdInList( lSets , 9 ) + obsLSets = lSets + set1 = Set( 9, "set1", "seq1", 1, 2 ) + set2 = Set( 9, "set2", "seq2", 2, 3 ) + expLSets = [ set1, set2 ] + + self.assertEquals( expLSets , obsLSets ) + + def test_getOverlapLengthBetweenLists_all_list_are_empty (self): + lSets1 = [] + lSets2 = [] + + expOverlapSize = 0 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_empty_list2_size_one (self): + lSets1 = [] + lSets2 = [ Set( 9, "set1", "seq1", 1, 2 ) ] + + expOverlapSize = 0 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_empty_list2_size_two (self): + lSets1 = [] + lSets2 = [ Set( 9, "set1", "seq1", 1, 2 ), Set( 9, "set2", "seq2", 2, 3 ) ] + + expOverlapSize = 0 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_one_list2_empty (self): + lSets1 = [ Set( 9, "set1", "seq1", 1, 2 ) ] + lSets2 = [] + + expOverlapSize = 0 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_one_list2_size_one_without_overlapp (self): + lSets1 = [ Set( 1, "set1", "seq1", 1, 2 ) ] + lSets2 = [ Set( 2, "set2", "seq2", 2, 3 ) ] + + expOverlapSize = 0 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_one_list2_size_one_with_overlap_size_1 (self): + lSets1 = [ Set( 1, "set1", "seq1", 1, 2 ) ] + lSets2 = [ Set( 2, "set1", "seq1", 2, 3 ) ] + + expOverlapSize = 1 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_one_list2_size_one_with_overlap_size_2 (self): + lSets1 = [ Set( 1, "set1", "seq1", 1, 2 ) ] + lSets2 = [ Set( 2, "set1", "seq1", 1, 3 ) ] + + expOverlapSize = 2 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_one_list2_size_two_without_overlap_sets_in_list1_greater_than_sets_in_list2 (self): + lSets1 = [ Set( 1, "set1", "seq1", 4, 6 ) ] + lSets2 = [ Set( 2, "set2", "seq1", 2, 3 ), Set( 3, "set3", "seq3", 1, 2 ) ] + + expOverlapSize = 0 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_one_list2_size_two_with_overlap_sets_in_list1_greater_than_sets_in_list2 (self): + lSets1 = [ Set( 1, "set1", "seq1", 4, 6 ) ] + lSets2 = [ Set( 2, "set2", "seq2", 2, 3 ), Set( 3, "set3", "seq1", 4, 5 ) ] + + expOverlapSize = 2 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_one_list2_size_two_with_overlap_on_redundant_position (self): + lSets1 = [ Set( 1, "set1", "seq1", 1, 2 ) ] + lSets2 = [ Set( 2, "set2", "seq1", 2, 3 ), Set( 3, "set1", "seq1", 1, 2 ) ] + + expOverlapSize = 3 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_two_list2_empty (self): + lSets1 = [ Set( 1, "set1", "seq1", 1, 2 ), Set( 2, "set2", "seq2", 2, 3 ) ] + lSets2 = [] + + expOverlapSize = 0 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_on_different_seq_names (self): + lSets1 = [ Set( 1, "set1", "seq1", 1, 2 ), Set( 2, "set2", "seq2", 2, 3 ) ] + lSets2 = [ Set( 3, "set1", "seq2", 4, 5 ), Set( 5, "set2", "seq4", 2, 3 ) ] + + expOverlapSize = 0 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_getOverlapLengthBetweenLists_list1_size_two_list2_size_two_with_overlap (self): + lSets1 = [ Set( 1, "set1", "seq1", 1, 6 ), Set( 2, "set2", "seq2", 2, 3 ) ] + lSets2 = [ Set( 3, "set1", "seq1", 1, 2 ), Set( 2, "set2", "seq3", 2, 3 ) ] + + expOverlapSize = 2 + obsOverlapSize = SetUtils.getOverlapLengthBetweenLists( lSets1, lSets2 ) + + self.assertEquals( expOverlapSize, obsOverlapSize ) + + def test_areSetsOverlappingBetweenLists_list2_empty(self): + tuple1 = ("1","chr1","seq1", "100","110") + tuple2 = ("1","chr1","seq1", "200","220") + tuple3 = ("1","chr1","seq1", "300","330") + setList1 = self._makeSetListFromTupleList([tuple1, tuple2, tuple3]) + + setList2 = [] + + expRes = False + obsRes = SetUtils.areSetsOverlappingBetweenLists( setList1, setList2 ) + + self.assertEquals( expRes, obsRes ) + + def test_areSetsOverlappingBetweenLists_list2_size1(self): + tuple1 = ("1","chr1","seq1", "9","11") + tuple2 = ("1","chr1","seq1", "20","22") + tuple3 = ("1","chr1","seq1", "30","33") + setList1 = self._makeSetListFromTupleList( [ tuple1, tuple2, tuple3 ] ) + + tuple11 = ("1","chr1", "seq1", "8","11") + setList2 = self._makeSetListFromTupleList( [ tuple11 ] ) + + expRes = True + obsRes = SetUtils.areSetsOverlappingBetweenLists( setList1, setList2 ) + + self.assertEquals( expRes, obsRes ) + + def test_areSetsOverlappingBetweenLists_list1_greater_list2(self): + tuple1 = ("1","chr1","seq1","100","110") + tuple2 = ("1","chr1","seq1","200","220") + tuple3 = ("1","chr1","seq1","300","330") + setList1 = self._makeSetListFromTupleList( [ tuple1, tuple2, tuple3 ] ) + + tuple11 = ("1","chr1","seq1", "10","11") + tuple22 = ("1","chr1","seq1", "20","22") + tuple33 = ("1","chr1","seq1", "30","33") + setList2 = self._makeSetListFromTupleList( [ tuple11, tuple22, tuple33 ] ) + + expRes = False + obsRes = SetUtils.areSetsOverlappingBetweenLists( setList1, setList2 ) + + self.assertEquals( expRes, obsRes ) + + def test_areSetsOverlappingBetweenLists_unordered_first_item_of_list1_greater_second_item_smaller(self): + tuple1 = ("1","chr1","seq1","400","440") + tuple2 = ("1","chr1","seq1","1","11") + setList1 = self._makeSetListFromTupleList( [ tuple1, tuple2 ] ) + + tuple11 = ("1","chr1","seq1","15","17") + tuple22 = ("1","chr1","seq1", "20","22") + tuple33 = ("1","chr1","seq1","30","33") + setList2 = self._makeSetListFromTupleList( [ tuple11, tuple22, tuple33 ] ) + + expRes = False + obsRes = SetUtils.areSetsOverlappingBetweenLists( setList1, setList2 ) + + self.assertEquals( expRes, obsRes ) + + def test_areSetsOverlappingBetweenLists_unorderd_second_item_of_list1_overlap_first_item(self): + tuple1 = ("1","chr1","seq1","400","440") + tuple2 = ("1","chr1","seq1", "1","18") + setList1 = self._makeSetListFromTupleList( [ tuple1, tuple2 ] ) + + tuple11 = ("1","chr1","seq1","15","17") + tuple22 = ("1","chr1","seq1","20","22") + tuple33 = ("1","chr1","seq1","30","33") + setList2 = self._makeSetListFromTupleList( [ tuple11, tuple22, tuple33 ] ) + + expRes = True + obsRes = SetUtils.areSetsOverlappingBetweenLists( setList1, setList2 ) + + self.assertEquals( expRes, obsRes ) + + def test_areSetsOverlappingBetweenLists_last_item_list1_overlap_last_item_list2(self): + tuple1 = ("1","chr1","seq1","400","440") + tuple2 = ("1","chr1","seq1","320","340") + pathList1 = self._makeSetListFromTupleList( [ tuple1, tuple2 ] ) + + tuple11 = ("1","chr1","seq1","100","110") + tuple22 = ("1","chr1","seq1","200","220") + tuple33 = ("1","chr1","seq1","300","330") + pathList2 = self._makeSetListFromTupleList( [ tuple11, tuple22, tuple33 ] ) + + expRes = True + obsRes = SetUtils.areSetsOverlappingBetweenLists( pathList1, pathList2 ) + + self.assertEquals( expRes, obsRes ) + + def test_getCumulLength_empty_list(self): + lSets = [] + + expSize = 0 + obsSize = SetUtils.getCumulLength( lSets ) + + self.assertEquals( expSize, obsSize ) + + def test_getCumulLength_1_item(self): + lSets = [ Set( 1, "set1", "seq1", 1, 6 ) ] + + expSize = 6 + obsSize = SetUtils.getCumulLength( lSets ) + + self.assertEquals( expSize, obsSize ) + + def test_getCumulLength_2_items(self): + lSets = [ Set( 1, "set1", "seq1", 1, 6 ), Set( 1, "set1", "seq1", 1, 2 ) ] + + expSize = 8 + obsSize = SetUtils.getCumulLength( lSets ) + + self.assertEquals( expSize, obsSize ) + + def test_getCumulLength_complex(self): + set8 = Set(498, "(TACATA)25", "Mela_Blaster_Grouper_611_MAP_20", 17, 348) + set5 = Set(502, "(GGAGA)2", "Mela_Blaster_Grouper_611_MAP_20", 356, 366) + set6 = Set(503, "(TTTAAAGAACCC)2", "Mela_Blaster_Grouper_611_MAP_20", 433, 457) + set7 = Set(504, "(TATAA)2", "Mela_Blaster_Grouper_611_MAP_20", 484, 495) + lSets = [ set8, set5, set6, set7 ] + expSize = 380 + obsSize = SetUtils.getCumulLength( lSets ) + + self.assertEquals( expSize, obsSize ) + + def test_getListBoundaries_one_set(self): + lSets = [ Set( 1, "set1", "seq1", 3, 8 ) ] + + expTuple = ( 3, 8 ) + obsTuple = SetUtils.getListBoundaries( lSets ) + + self.assertEquals( expTuple, obsTuple ) + + def test_getListBoundaries_two_sets(self): + lSets = [ Set( 1, "set1", "seq1", 3, 8 ), Set( 2, "set2", "seq2", 5, 10 ) ] + + expTuple = ( 3, 10 ) + obsTuple = SetUtils.getListBoundaries( lSets ) + + self.assertEquals( expTuple, obsTuple ) + + def test_writeListInFile_empty_list(self): + lSets = [ ] + expFileName = "expFileName" + fileHandle = open(expFileName, "w") + fileHandle.close() + + obsFileName = "obsFileName" + fileHandle = open(obsFileName, "w") + SetUtils.writeListInFile(lSets, obsFileName, "w") + fileHandle.close() + + self.assertTrue( FileUtils.are2FilesIdentical( expFileName, obsFileName ) ) + + os.remove(obsFileName) + os.remove(expFileName) + + def test_writeListInFile_list_one_set(self): + lSets = [ Set( 1, "set1", "seq1", 3, 8 ) ] + line = "1\tset1\tseq1\t3\t8\n" + expFileName = "expFileName" + + fileHandle = open(expFileName, "w") + fileHandle.write(line) + fileHandle.close() + + obsFileName = "obsFileName" + fileHandle = open(obsFileName, "w") + SetUtils.writeListInFile(lSets, obsFileName, "w") + fileHandle.close() + + self.assertTrue( FileUtils.are2FilesIdentical( expFileName, obsFileName ) ) + + os.remove(obsFileName) + os.remove(expFileName) + + + def test_getDictOfListsWithIdAsKey_empty_list( self ): + lSets = [] + expDic = {} + obsDic = SetUtils.getDictOfListsWithIdAsKey( lSets ) + self.assertEquals( expDic, obsDic ) + + + def test_getDictOfListsWithIdAsKey_one_set( self ): + lSets = [ Set( 2, "set2", "seq2", 3, 8 ) ] + expDic = { 2: [ Set( 2, "set2", "seq2", 3, 8 ) ] } + obsDic = SetUtils.getDictOfListsWithIdAsKey( lSets ) + self.assertEquals( expDic, obsDic ) + + + def test_getDictOfListsWithIdAsKey_two_sets_with_same_id( self ): + lSets = [ Set( 2, "set2", "seq2", 10, 50 ), Set( 2, "set2", "seq2", 3, 8 )] + expDic = { 2: [Set( 2, "set2", "seq2", 10, 50 ), Set( 2, "set2", "seq2", 3, 8 )] } + obsDic = SetUtils.getDictOfListsWithIdAsKey( lSets ) + self.assertEquals( expDic, obsDic ) + + + def test_getDictOfListsWithIdAsKey_sets_with_3_different_id( self ): + set1 = Set( 1, "set2", "seq2", 10, 50 ) + set2 = Set( 1, "set2", "seq2", 20, 50 ) + set3 = Set( 2, "set2", "seq2", 30, 50 ) + set4 = Set( 2, "set2", "seq2", 40, 50 ) + set5 = Set( 3, "set2", "seq2", 1, 2 ) + lSets = [ set1, set2, set3, set4, set5 ] + expDic = { 1: [set1, set2], + 2: [set3, set4], + 3: [set5] } + obsDic = SetUtils.getDictOfListsWithIdAsKey( lSets ) + self.assertEquals( expDic, obsDic ) + + + def test_getDictOfListsWithIdAsKeyFromFile(self): + setFile = "dummySetFile" + setFileHandler = open( setFile, "w" ) + setFileHandler.write( "1\tseq31\tchr1\t151\t250\n" ) + setFileHandler.write( "2\tseq27\tchr2\t301\t500\n" ) + setFileHandler.write( "2\tseq27\tchr2\t601\t650\n" ) + setFileHandler.close() + + dExp = { 1: [ Set( 1, "seq31", "chr1", 151, 250 ) ], + 2: [ Set( 2, "seq27", "chr2", 301, 500 ), + Set( 2, "seq27", "chr2", 601, 650 ) ] } + dObs = SetUtils.getDictOfListsWithIdAsKeyFromFile( setFile ) + + self.assertEquals( dExp, dObs ) + + os.remove( setFile ) + + + def test_getMapListFromSetList_empty_list(self): + lSets = [] + + expLMap = [] + obsLMap = SetUtils.getMapListFromSetList(lSets) + + self.assertEquals(expLMap, obsLMap) + + def test_getMapListFromSetList_one_set(self): + lSets = [ Set( 1, "set", "seq1", 1, 6 )] + map1 = Map("set::1","seq1",1,6) + + expLMap = [ map1 ] + obsLMap = SetUtils.getMapListFromSetList(lSets) + + self.assertEquals(expLMap, obsLMap) + + def test_getMapListFromSetList_two_sets(self): + lSets = [ Set( 1, "set", "seq1", 1, 6 ), Set( 2, "set", "seq2", 3, 8 ) ] + map1 = Map("set::1","seq1",1,6) + map2 = Map("set::2","seq2",3,8) + + expLMap = [ map1, map2 ] + obsLMap = SetUtils.getMapListFromSetList(lSets) + + self.assertEquals(expLMap, obsLMap) + + def test_getSetListFromMapList_empty_list(self): + lMap =[] + expLSets = [] + obsLSets = SetUtils.getSetListFromMapList(lMap) + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListFromMapList_one_map(self): + map1 = Map( "map1","seq1",1,6) + lMap =[ map1 ] + expLSets = [ Set( 1, "map1", "seq1", 1, 6 ) ] + obsLSets = SetUtils.getSetListFromMapList(lMap) + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListFromMapList_two_maps(self): + map1 = Map( "map1","seq1",1,6) + map2 = Map( "map2","seq2",3,8) + lMap =[ map1,map2 ] + expLSets = [ Set( 1, "map1", "seq1", 1, 6 ), Set( 2, "map2", "seq2", 3, 8 ) ] + obsLSets = SetUtils.getSetListFromMapList(lMap) + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListFromMapList_list_with_one_empty_map(self): + map1 = Map( "map1","seq1",1,6) + map2 = Map() + lMap =[ map1,map2 ] + expLSets = [ Set( 1, "map1", "seq1", 1, 6 ), Set(2, ) ] + obsLSets = SetUtils.getSetListFromMapList(lMap) + + self.assertEquals(expLSets, obsLSets) + + def test_mergeSetsInList(self): + set1 = Set( 1, "set1", "seq1", 1, 6 ) + set2 = Set( 2, "set2", "seq1", 3, 6 ) + set3 = Set( 3, "set3", "seq1", 3, 5 ) + set4 = Set( 4, "set4", "seq1", 1, 2 ) + lSets = [ set1, set2, set3, set4 ] + + obsList = SetUtils.mergeSetsInList( lSets ) + expList = [ Set( 1, "set1", "seq1", 1, 6 ) ] + + self.assertEquals( expList, obsList ) + + + def test_mergeSetsInList_with_reverse_only(self): + set1 = Set( 1, "set1", "seq1", 6, 1 ) + set2 = Set( 2, "set2", "seq1", 6, 3 ) + set3 = Set( 3, "set3", "seq1", 5, 3 ) + set4 = Set( 4, "set4", "seq1", 2, 1 ) + lSets = [ set1, set2, set3, set4 ] + + obsList = SetUtils.mergeSetsInList( lSets ) + expList = [ Set( 1, "set1", "seq1", 6, 1 ) ] + + self.assertEquals( expList, obsList ) + + + def test_mergeSetsInList_with_direct_and_reverse(self): + set1 = Set( 1, "set1", "seq1", 6, 1 ) + set2 = Set( 2, "set2", "seq1", 6, 3 ) + set3 = Set( 3, "set3", "seq1", 3, 5 ) + set4 = Set( 4, "set4", "seq1", 2, 1 ) + lSets = [ set1, set2, set3, set4 ] + + obsList = SetUtils.mergeSetsInList( lSets ) + expList = [ set1 ] + + self.assertEquals( expList, obsList ) + + + def test_mergeSetsInList_with_empty_set(self): + set1 = Set( 1, "set1", "seq1", 1, 6 ) + set2 = Set() + set3 = Set( 3, "set3", "seq1", 3, 5 ) + set4 = Set( 4, "set4", "seq1", 1, 2 ) + lSets = [ set1, set2, set3, set4 ] + + obsList = SetUtils.mergeSetsInList( lSets ) + expList = [ set2, set1 ] + + self.assertEquals( expList, obsList ) + + + def test_mergeSetsInList_empty_list(self): + lSets = [] + + obsList = SetUtils.mergeSetsInList( lSets ) + expList = [] + + self.assertEquals( expList, obsList ) + + + def test_mergeSetsInList_one_set (self): + set1 = Set( 1, "set1", "seq1", 1, 6 ) + lSets = [ set1 ] + + obsLSets = SetUtils.mergeSetsInList( lSets ) + expLSets = [ set1 ] + + self.assertEquals( expLSets, obsLSets ) + + + def test_mergeSetsInList_diffSeqnames_without_overlapping(self): + set1 = Set( 1, "set1", "seq1", 1, 6 ) + set2 = Set( 1, "set2", "seq2", 11, 16 ) + lSets = [ set1, set2 ] + + obsLSets = SetUtils.mergeSetsInList( lSets ) + expLSets = [ set1, set2 ] + + self.assertEquals( expLSets, obsLSets ) + + + def test_mergeSetsInList_diffSeqnames_overlapping(self): + set1 = Set( 1, "set1", "seq1", 1, 6 ) + set2 = Set( 1, "set2", "seq2", 2, 5 ) + lSets = [ set1, set2 ] + + obsLSets = SetUtils.mergeSetsInList( lSets ) + expLSets = [ set1, set2 ] + + self.assertEquals( expLSets, obsLSets ) + + + def test_mergeSetsInList_sameSeqnames_without_overlapping(self): + set1 = Set( 1, "set1", "seq1", 1, 6 ) + set2 = Set( 1, "set2", "seq1", 11, 16 ) + lSets = [ set1, set2 ] + + obsLSets = SetUtils.mergeSetsInList( lSets ) + expLSets = [ set1, set2 ] + + self.assertEquals( expLSets, obsLSets ) + + def test_mergeSetsInList_complex(self): + set1 = Set(498, "(ACATATAATAA)10", "Mela_Blaster_Grouper_611_MAP_20", 77, 181) + set2 = Set(499, "(TACATA)25", "Mela_Blaster_Grouper_611_MAP_20", 17, 166) + set3 = Set(500, "(ATAAAATAC)26", "Mela_Blaster_Grouper_611_MAP_20", 94, 348) + set4 = Set(501, "(TAA)15", "Mela_Blaster_Grouper_611_MAP_20", 257, 303) + set5 = Set(502, "(GGAGA)2", "Mela_Blaster_Grouper_611_MAP_20", 356, 366) + set6 = Set(503, "(TTTAAAGAACCC)2", "Mela_Blaster_Grouper_611_MAP_20", 433, 457) + set7 = Set(504, "(TATAA)2", "Mela_Blaster_Grouper_611_MAP_20", 484, 495) + lSets = [ set1, set2, set3, set4, set5, set6, set7 ] + obsLSets = SetUtils.mergeSetsInList( lSets ) + + set8 = Set(498, "(TACATA)25", "Mela_Blaster_Grouper_611_MAP_20", 17, 348) + + expLSets = [ set8, set5, set6, set7 ] + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListUnjoined_listToKeep_empty_listToUnjoin_empty (self): + setListToKeep = [] + setListToUnjoin = [] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_empty (self): + setListToKeep = [] + + setUnjoin1 = Set( 1, "set", "seq", 1, 3 ) + setUnjoin2 = Set( 1, "set", "seq", 2, 3 ) + setUnjoin3 = Set( 1, "set", "seq", 5, 7 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2, setUnjoin3 ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [ setListToUnjoin ] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_empty_listToUnjoin_size1 (self): + setListToKeep = [] + + setUnjoin = Set( 1, "set", "seq", 1, 3 ) + setListToUnjoin = [ setUnjoin ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [ setListToUnjoin ] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size1_listToUnjoin_empty (self): + setKeep = Set( 1, "set", "seq", 1, 3 ) + setListToKeep = [ setKeep ] + + setListToUnjoin = [] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size1_listToUnjoin_size1 (self): + setKeep = Set( 1, "set", "seq", 1, 3 ) + setListToKeep = [ setKeep ] + + setUnjoin = Set( 1, "set", "seq", 5, 9 ) + setListToUnjoin = [ setUnjoin ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [ setListToUnjoin ] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size1_listToUnjoin_size2_noSplit_item_in_listToKeep_smaller_item_in_listToUnjoin (self): + setKeep = Set( 1, "set", "seq", 1, 3 ) + setListToKeep = [ setKeep ] + + setUnjoin1 = Set( 1, "set", "seq", 5, 9 ) + setUnjoin2 = Set( 1, "set", "seq", 11, 16 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2 ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [ setListToUnjoin ] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size1_listToUnjoin_size3_noSplit_item_in_listToKeep_smaller_item_in_listToUnjoin (self): + setKeep = Set( 1, "set", "seq", 1, 3 ) + setListToKeep = [ setKeep ] + + setUnjoin1 = Set( 1, "set", "seq", 5, 9 ) + setUnjoin2 = Set( 1, "set", "seq", 11, 16 ) + setUnjoin3 = Set( 1, "set", "seq", 21, 26 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2, setUnjoin3 ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [ setListToUnjoin ] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size1_listToUnjoin_size2_noSplit_item_in_listToUnjoin_smaller_item_in_listToKeep (self): + setKeep = Set( 1, "set", "seq", 10, 13 ) + setListToKeep = [ setKeep ] + + setUnjoin1 = Set( 1, "set", "seq", 5, 9 ) + setUnjoin2 = Set( 1, "set", "seq", 1, 3 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2 ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [ SetUtils.getSetListSortedByIncreasingMinThenMax( setListToUnjoin ) ] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size3_listToUnjoin_size2_oneSplit_item_in_listToKeep_smaller_item_in_listToUnjoin (self): + setKeep1 = Set( 1, "set", "seq", 1, 1 ) + setKeep2 = Set( 1, "set", "seq", 21, 30 ) + setKeep3 = Set( 1, "set", "seq", 61, 70 ) + setListToKeep = [ setKeep1, setKeep2, setKeep3 ] + + setUnjoin1 = Set( 1, "set", "seq", 41, 50 ) + setUnjoin2 = Set( 2, "set", "seq", 81, 90 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2 ] + + expLSets = [ [ setUnjoin1 ], [ setUnjoin2 ] ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size3_listToUnjoin_size3_twoSplits_item_in_listToUnjoin_smaller_item_in_listToKeep(self): + setKeep1 = Set( 1, "set", "seq", 21, 30 ) + setKeep2 = Set( 1, "set", "seq", 41, 50 ) + setKeep3 = Set( 1, "set", "seq", 81, 90 ) + setListToKeep = [ setKeep1, setKeep2, setKeep3 ] + + setUnjoin1 = Set( 1, "set", "seq", 1, 10 ) + setUnjoin2 = Set( 2, "set", "seq", 61, 70 ) + setUnjoin3 = Set( 2, "set", "seq", 101, 110 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2, setUnjoin3 ] + + expLSets = [ [ setUnjoin1 ], [ setUnjoin2 ], [ setUnjoin3 ] ] + + obsLSets = SetUtils.getSetListUnjoined( setListToKeep, setListToUnjoin ) + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size1_listToUnjoin_size2_split(self): + setKeep1 = Set( 1, "set", "seq", 51, 80 ) + setListToKeep = [ setKeep1 ] + + setUnjoin1 = Set( 1, "set", "seq", 21, 40 ) + setUnjoin2 = Set( 1, "set", "seq", 101, 150 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2 ] + + expLSets = [ [setUnjoin1] , [setUnjoin2] ] + + obsLSets = SetUtils.getSetListUnjoined( setListToKeep, setListToUnjoin ) + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListUnjoined_listToKeep_size2_listToUnjoin_size2_split(self): + setKeep1 = Set( 1, "set", "seq", 1, 15 ) + setKeep2 = Set( 1, "set", "seq", 81, 130 ) + setListToKeep = [ setKeep1, setKeep2 ] + + setUnjoin1 = Set( 1, "set", "seq", 21, 40 ) + setUnjoin2 = Set( 1, "set", "seq", 201, 250 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2 ] + + expLSets = [ [setUnjoin1] , [setUnjoin2] ] + + obsLSets = SetUtils.getSetListUnjoined( setListToKeep, setListToUnjoin ) + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListUnjoined_listToKeep_size1_listToUnjoin_ordered_OneSplit(self): + setKeep = Set( 1, "set", "seq", 120, 180 ) + setListToKeep = [ setKeep ] + + setUnjoin1 = Set( 1, "set", "seq", 100, 110 ) + setUnjoin2 = Set( 1, "set", "seq", 200, 210 ) + setUnjoin3 = Set( 1, "set", "seq", 250, 280 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2, setUnjoin3 ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [ [setUnjoin1], [setUnjoin2, setUnjoin3] ] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size1_listToUnjoin_unordered_OneSplit(self): + setKeep = Set( 1, "set", "seq", 120, 180 ) + setListToKeep = [ setKeep ] + + setUnjoin1 = Set( 1, "set", "seq", 200, 210 ) + setUnjoin2 = Set( 1, "set", "seq", 250, 280 ) + setUnjoin3 = Set( 1, "set", "seq", 100, 110 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2, setUnjoin3 ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + expLSets = [ [setUnjoin3], [setUnjoin1, setUnjoin2] ] + + self.assertEquals(expLSets, obsLSets) + + def test_getSetListUnjoined_listToKeep_size2_listToUnjoin_size4_twoSplits(self): + setKeep1 = Set( 1, "set", "seq", 21, 30 ) + setKeep2 = Set( 1, "set", "seq", 81, 90 ) + setListToKeep = [ setKeep1, setKeep2 ] + + setUnjoin1 = Set( 1, "set", "seq", 1, 10 ) + setUnjoin2 = Set( 1, "set", "seq", 41, 50 ) + setUnjoin3 = Set( 1, "set", "seq", 61, 70 ) + setUnjoin4 = Set( 1, "set", "seq", 101, 110 ) + setListToUnjoin = [ setUnjoin1, setUnjoin2, setUnjoin3, setUnjoin4 ] + + expLSets = [ [setUnjoin1], [ setUnjoin2, setUnjoin3 ], [setUnjoin4] ] + + obsLSets = SetUtils.getSetListUnjoined(setListToKeep, setListToUnjoin) + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListWithoutDuplicates_empty_list(self): + lSets = [] + obsLSets = SetUtils.getSetListWithoutDuplicates( lSets ) + expLSets = [] + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListWithoutDuplicates_list_size1(self): + set = Set( 1, "set", "seq", 100, 110 ) + lSets = [ set ] + obsLSets = SetUtils.getSetListWithoutDuplicates( lSets ) + expLSets = lSets + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListWithoutDuplicates_list_with_only_doublons(self): + set1 = Set( 1, "set", "seq", 100, 110 ) + set2 = Set( 1, "set", "seq", 100, 110 ) + set3 = Set( 1, "set", "seq", 100, 110 ) + set4 = Set( 1, "set", "seq", 100, 110 ) + lSets = [set1, set2, set3, set4] + + obsLSets = SetUtils.getSetListWithoutDuplicates( lSets ) + + expLSets = [ set1 ] + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListWithoutDuplicates_list_with_doublons_at_start_and_at_end(self): + set1 = Set( 1, "set", "seq", 200, 210 ) + set2 = Set( 1, "set", "seq", 100, 110 ) + set3 = Set( 1, "set", "seq", 300, 310 ) + set4 = Set( 1, "set", "seq", 100, 110 ) + lSets = [set1, set2, set3, set4] + + obsLSets = SetUtils.getSetListWithoutDuplicates( lSets ) + + expLSets = [ set1, set2, set3 ] + expLSets = SetUtils.getSetListSortedByIncreasingMinThenMax(expLSets) + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListWithoutDuplicates_list_with_contiguous_doublons(self): + set1 = Set( 1, "set", "seq", 200, 210 ) + set2 = Set( 1, "set", "seq", 100, 110 ) + set3 = Set( 1, "set", "seq", 100, 110 ) + set4 = Set( 1, "set", "seq", 300, 310 ) + lSets = [set1, set2, set3, set4] + + obsLSets = SetUtils.getSetListWithoutDuplicates( lSets ) + + expLSets = [ set1, set2, set4 ] + expLSets = SetUtils.getSetListSortedByIncreasingMinThenMax(expLSets) + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListWithoutDuplicates_list_with_one_doublon(self): + set1 = Set( 1, "set", "seq", 200, 210 ) + set2 = Set( 1, "set", "seq", 100, 110 ) + set3 = Set( 1, "set", "seq", 210, 250 ) + set4 = Set( 1, "set", "seq", 100, 110 ) + set5 = Set( 1, "set", "seq", 300, 310 ) + lSets = [set1, set2, set3, set4, set5] + + obsLSets = SetUtils.getSetListWithoutDuplicates( lSets ) + + expLSets = [ set1, set2, set3, set5 ] + expLSets = SetUtils.getSetListSortedByIncreasingMinThenMax(expLSets) + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListWithoutDuplicates_list_with_two_doublons(self): + set1 = Set( 1, "set", "seq", 200, 210 ) + set2 = Set( 1, "set", "seq", 100, 110 ) + set3 = Set( 1, "set", "seq", 210, 250 ) + set4 = Set( 1, "set", "seq", 230, 250 ) + set5 = Set( 1, "set", "seq", 210, 250 ) + set6 = Set( 1, "set", "seq", 100, 110 ) + set7 = Set( 1, "set", "seq", 300, 310 ) + lSets = [set1, set2, set3, set4, set5, set6, set7] + + obsLSets = SetUtils.getSetListWithoutDuplicates( lSets ) + + expLSets = [ set1, set2, set3, set4, set7 ] + expLSets = SetUtils.getSetListSortedByIncreasingMinThenMax(expLSets) + + self.assertEquals( expLSets, obsLSets ) + + def test_getSetListSortedByIncreasingMinThenMax_alreadyOrdered_diffIdentifier(self): + set1 = Set( 1, "set1", "seq1", 1, 10 ) + set2 = Set( 2, "set1", "seq1", 21, 30 ) + lSets = [ set1, set2 ] + + expList = [ set1, set2 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenMax( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenMax_unordered_diffIdentifier(self): + set1 = Set( 1, "set1", "seq1", 21, 30 ) + set2 = Set( 2, "set1", "seq1", 1, 10 ) + lSets = [ set1, set2 ] + + expList = [ set2, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenMax( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenMax_unordered_sameIdentifier(self): + set1 = Set( 1, "set1", "seq1", 21, 30 ) + set2 = Set( 1, "set1", "seq1", 1, 10 ) + lSets = [ set1, set2 ] + + expList = [ set2, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenMax( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenMax_unordered_overlapping(self): + set1 = Set( 2, "set1", "seq1", 6, 15 ) + set2 = Set( 1, "set1", "seq1", 1, 10 ) + lSets = [ set1, set2 ] + + expList = [ set2, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenMax( lSets ) + + self.assertEqual( expList, obsList ) + + def test_getSetListSortedByIncreasingMinThenMax_unordered_sameMin_threeSets(self): + set1 = Set( 1, "set1", "seq1", 1, 15 ) + set2 = Set( 2, "set2", "seq1", 1, 10 ) + set3 = Set( 3, "set3", "seq1", 1, 12 ) + lSets = [ set1, set2, set3 ] + + expList = [ set2, set3, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenMax( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenMax_unordered_included(self): + set1 = Set( 1, "set1", "seq1", 2, 4 ) + set2 = Set( 2, "set2", "seq1", 1, 5 ) + lSets = [ set1, set2 ] + + expList = [ set2, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenMax( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenInvLength_alreadyOrdered_diffIdentifier(self): + set1 = Set( 1, "set1", "seq1", 1, 10 ) + set2 = Set( 2, "set1", "seq1", 21, 30 ) + lSets = [ set1, set2 ] + + expList = [ set1, set2 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenInvLength( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenInvLength_unordered_diffIdentifier(self): + set1 = Set( 1, "set1", "seq1", 21, 30 ) + set2 = Set( 2, "set1", "seq1", 1, 10 ) + lSets = [ set1, set2 ] + + expList = [ set2, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenInvLength( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenInvLength_unordered_sameIdentifier(self): + set1 = Set( 1, "set1", "seq1", 21, 30 ) + set2 = Set( 1, "set1", "seq1", 1, 10 ) + lSets = [ set1, set2 ] + + expList = [ set2, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenInvLength( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenInvLength_unordered_overlapping(self): + set1 = Set( 2, "set1", "seq1", 6, 15 ) + set2 = Set( 1, "set1", "seq1", 1, 10 ) + lSets = [ set1, set2 ] + + expList = [ set2, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenInvLength( lSets ) + + self.assertEqual( expList, obsList ) + + + def test_getSetListSortedByIncreasingMinThenInvLength_unordered_sameMin_threeSets(self): + set1 = Set( 1, "set1", "seq1", 1, 10 ) + set2 = Set( 2, "set2", "seq1", 3, 8 ) + set3 = Set( 3, "set3", "seq1", 3, 17 ) + lSets = [ set1, set2, set3 ] + + expList = [ set1, set3, set2 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenInvLength( lSets ) + + self.assertEqual( expList, obsList ) + + def test_getSetListSortedByIncreasingMinThenInvLength_unordered_included(self): + set1 = Set( 1, "set1", "seq1", 2, 4 ) + set2 = Set( 2, "set2", "seq1", 1, 5 ) + lSets = [ set1, set2 ] + + expList = [ set2, set1 ] + + obsList = SetUtils.getSetListSortedByIncreasingMinThenInvLength( lSets ) + + self.assertEqual( expList, obsList ) + + def test_getSetListSortedBySeqThenRegionThenMinThenMax_already_sorted(self): + set1 = Set(1, "set1", "seq1", 2, 4) + set2 = Set(2, "set2", "seq2", 1, 5) + set3 = Set(3, "set3", "seq2", 8, 10) + lSets = [set1, set2, set3] + + expList = [set1, set2, set3] + + obsList = SetUtils.getSetListSortedBySeqThenRegionThenMinThenMax(lSets) + + self.assertEqual(expList, obsList) + + def test_getSetListSortedBySeqThenRegionThenMinThenMax_not_sorted_by_seqname(self): + set1 = Set(1, "set1", "seq1", 2, 4) + set2 = Set(2, "set2", "seq2", 1, 5) + set3 = Set(3, "set3", "seq2", 8, 10) + lSets = [set2, set1, set3] + + expList = [set1, set2, set3] + + obsList = SetUtils.getSetListSortedBySeqThenRegionThenMinThenMax(lSets) + + self.assertEqual(expList, obsList) + + def test_getSetListSortedBySeqThenRegionThenMinThenMax_not_sorted_by_region_and_start(self): + set1 = Set(1, "set1", "seq1", 2, 4) + set2 = Set(2, "set2", "seq2", 1, 5) + set3 = Set(3, "set3", "seq2", 8, 10) + lSets = [set3, set2, set1] + + expList = [set1, set2, set3] + + obsList = SetUtils.getSetListSortedBySeqThenRegionThenMinThenMax(lSets) + + self.assertEqual(expList, obsList) + + def test_getSetListSortedBySeqThenRegionThenMinThenMax_not_sorted_with_overlap(self): + set1 = Set(1, "set1", "seq1", 2, 4) + set2 = Set(2, "set2", "seq2", 1, 5) + set3 = Set(3, "set2", "seq2", 8, 10) + set4 = Set(4, "set2", "seq3", 7, 9) + set5 = Set(5, "set3", "seq3", 8, 12) + lSets = [set3, set2, set1, set5, set4] + + expList = [set1, set2, set3, set4, set5] + + obsList = SetUtils.getSetListSortedBySeqThenRegionThenMinThenMax(lSets) + + self.assertEqual(expList, obsList) + + def test_getSetListSortedBySeqThenRegionThenMinThenMax_not_sorted_with_reverse(self): + set1 = Set(1, "set1", "seq1", 2, 4) + set2 = Set(2, "set2", "seq2", 1, 5) + set3 = Set(3, "set2", "seq2", 8, 10) + set4 = Set(4, "set3", "seq3", 7, 9) + set5 = Set(5, "set3", "seq3", 12, 5) + lSets = [set3, set2, set5, set1, set4] + + expList = [set1, set2, set3, set5, set4] + + obsList = SetUtils.getSetListSortedBySeqThenRegionThenMinThenMax(lSets) + + self.assertEqual(expList, obsList) + + def test_getListOfIdListOfOverlappingSets_2_item_in_reference_list_overlaps_with_one_item_in_subject_list(self): + set1 = Set( 1, "set1", "seq1", 10, 30 ) + set2 = Set( 2, "set2", "seq1", 40, 60 ) + + lRef = [set1, set2] + + set3 = Set( 3, "set2", "seq1", 25, 45 ) + lSubj = [set3] + + lExp = [[1,-3,2]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lExp, lObs) + + def test_getListOfIdListOfOverlappingSets_one_item_in_reference_list_overlaps_with_2_item_in_subject_list(self): + set1 = Set( 1, "set2", "seq1", 25, 45 ) + lRef = [set1] + + set2 = Set( 2, "set1", "seq1", 10, 30 ) + set3 = Set( 3, "set2", "seq1", 40, 60 ) + + lSubj = [set2, set3] + + lExp = [[1,-2,-3]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lExp, lObs) + + def test_getListOfIdListOfOverlappingSets_all_item_in_reference_list_overlaps_with_items_in_subject_list(self): + set1 = Set( 1, "set1", "seq1", 10, 30 ) + set2 = Set( 2, "set2", "seq1", 40, 60 ) + set3 = Set( 3, "set2", "seq1", 70, 90 ) + + lRef = [set1, set2, set3] + + set4 = Set( 4, "set1", "seq1", 5, 9 ) + set5 = Set( 5, "set1", "seq1", 15, 29 ) + set6 = Set( 6, "set2", "seq1", 45, 55 ) + set7 = Set( 7, "set2", "seq1", 57, 68 ) + set8 = Set( 8, "set2", "seq1", 73, 85 ) + set9 = Set( 9, "set2", "seq1", 100, 115 ) + + lSubj = [set4, set5, set6, set7, set8, set9] + + lExp = [[1,-5], [2,-6,-7], [3,-8]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfIdListOfOverlappingSets_all_item_in_subject_list_overlaps_with_items_in_reference_list(self): + set1 = Set( 1, "set1", "seq1", 5, 9 ) + set2 = Set( 2, "set1", "seq1", 15, 29 ) + set3 = Set( 3, "set2", "seq1", 45, 55 ) + set4 = Set( 4, "set2", "seq1", 57, 68 ) + set5 = Set( 5, "set2", "seq1", 73, 85 ) + set6 = Set( 6, "set2", "seq1", 100, 115 ) + + lRef = [set1, set2, set3, set4, set5, set6] + + set7 = Set( 7, "set1", "seq1", 10, 30 ) + set8 = Set( 8, "set2", "seq1", 40, 60 ) + set9 = Set( 9, "set2", "seq1", 70, 90 ) + + lSubj = [set7, set8, set9] + + lExp = [[2, -7], [3, -8, 4], [5, -9]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfIdListOfOverlappingSets_all_item_overlaps_one_by_one(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + set3 = Set( 3, "set2", "seq1", 50, 60 ) + + lRef = [set1, set2, set3] + + lSubj = [set1, set2, set3] + + lExp = [[1, -1], [2, -2], [3, -3]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfIdListOfOverlappingSets_continuus_overlap_between_item_in_reference_list_and_item_in_subject_list(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + set3 = Set( 3, "set2", "seq1", 50, 60 ) + set4 = Set( 4, "set2", "seq1", 70, 80 ) + + lRef = [set1, set2, set3, set4] + + set5 = Set( 5, "set1", "seq1", 15, 32 ) + set6 = Set( 6, "set2", "seq1", 35, 52 ) + set7 = Set( 7, "set2", "seq1", 55, 75 ) + + lSubj = [set5, set6, set7] + + lExp = [[ 1, -5, 2, -6, 3, -7, 4 ]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + + def test_getListOfIdListOfOverlappingSets_first_item_in_reference_overlap_with_one_item_in_subject_list(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + + lRef = [set1, set2] + + set3 = Set( 3, "set1", "seq1", 5, 9 ) + set4 = Set( 4, "set2", "seq1", 12, 25 ) + set5 = Set( 5, "set2", "seq1", 55, 75 ) + + lSubj = [set3, set4, set5] + + lExp = [[1, -4]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfIdListOfOverlappingSets_last_item_in_reference_overlap_with_one_item_in_subject_list(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + + lRef = [set1, set2] + + set3 = Set( 3, "set1", "seq1", 5, 9 ) + set4 = Set( 4, "set2", "seq1", 32, 45 ) + set5 = Set( 5, "set2", "seq1", 55, 75 ) + + lSubj = [set3, set4, set5] + + lExp = [[2, -4]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfIdListOfOverlappingSets_one_item_in_reference_in_the_middle_overlap_with_one_item_in_subject_list(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + set3 = Set( 3, "set1", "seq1", 50, 60 ) + set4 = Set( 4, "set1", "seq1", 70, 80 ) + + lRef = [set1, set2, set3, set4] + + set5 = Set( 5, "set1", "seq1", 2, 9 ) + set6 = Set( 6, "set2", "seq1", 55, 65 ) + set7 = Set( 7, "set2", "seq1", 90, 100 ) + + lSubj = [set5, set6, set7] + + lExp = [[3, -6]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfIdListOfOverlappingSets_first_item_in_subject_overlap_with_one_item_in_reference_list(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + + lRef = [set1, set2] + + set3 = Set( 3, "set1", "seq1", 15, 25 ) + set4 = Set( 4, "set2", "seq1", 45, 50 ) + set5 = Set( 5, "set2", "seq1", 55, 75 ) + + lSubj = [set3, set4, set5] + + lExp = [[1, -3]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfIdListOfOverlappingSets_last_item_in_subject_overlap_with_one_item_in_reference_list(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + + lRef = [set1, set2] + + set3 = Set( 3, "set1", "seq1", 1, 9 ) + set4 = Set( 4, "set2", "seq1", 21, 29 ) + set5 = Set( 5, "set2", "seq1", 35, 50 ) + + lSubj = [set3, set4, set5] + + lExp = [[2, -5]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfIdListOfOverlappingSets_one_item_in_subject_in_the_middle_overlap_with_one_item_in_reference_list(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + + lRef = [set1, set2] + + set3 = Set( 3, "set1", "seq1", 1, 9 ) + set4 = Set( 4, "set2", "seq1", 21, 29 ) + set5 = Set( 5, "set2", "seq1", 35, 50 ) + set6 = Set( 6, "set2", "seq1", 60, 70 ) + + lSubj = [set3, set4, set5, set6] + + lExp = [[2, -5]] + lObs = SetUtils.getListOfIdListOfOverlappingSets(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_each_item_in_reference_list_overlap_with_one_different_item_in_subject_list(self): + setRef1 = Set( 1, "set1", "seq1", 10, 20 ) + setRef2 = Set( 2, "set1", "seq1", 30, 40 ) + setRef3 = Set( 3, "set1", "seq1", 50, 60 ) + + lRef = [setRef1, setRef2, setRef3] + + setSubj1 = Set( 1, "set1", "seq1", 12, 25 ) + setSubj2 = Set( 2, "set1", "seq1", 31, 45 ) + setSubj3 = Set( 3, "set1", "seq1", 55, 80 ) + + lSubj = [setSubj1, setSubj2, setSubj3] + + setRef1merged = Set( 1, "set1", "seq1", 10, 25 ) + setRef2merged = Set( 2, "set1", "seq1", 30, 45 ) + setRef3merged = Set( 3, "set1", "seq1", 50, 80 ) + + nextId = 4 + + lExp = ([setRef1merged, setRef2merged, setRef3merged], nextId) + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_all_items_in_reference_list_overlap_with_the_same_item_in_subject_list(self): + setRef1 = Set( 1, "set1", "seq1", 10, 20 ) + setRef2 = Set( 2, "set1", "seq1", 15, 25 ) + setRef3 = Set( 3, "set1", "seq1", 20, 30 ) + + lRef = [setRef1, setRef2, setRef3] + + setSubj1 = Set( 1, "set1", "seq1", 12, 35 ) + setSubj2 = Set( 2, "set1", "seq1", 40, 45 ) + setSubj3 = Set( 3, "set1", "seq1", 55, 80 ) + + lSubj = [setSubj1, setSubj2, setSubj3] + + setRef1merged = Set( 1, "set1", "seq1", 10, 35 ) + setSubj2Exp = Set( 4, "set1", "seq1", 40, 45 ) + setSubj3Exp = Set( 5, "set1", "seq1", 55, 80 ) + + nextId = 6 + + lExp = ([setRef1merged, setSubj2Exp, setSubj3Exp], nextId) + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_two_last_ref_items_overlap_with_last_subject_item(self): + setRef1 = Set( 1, "set1", "seq1", 10, 20 ) + setRef2 = Set( 2, "set1", "seq1", 30, 40 ) + setRef3 = Set( 3, "set1", "seq1", 50, 60 ) + + lRef = [setRef1, setRef2, setRef3] + + setSubj1 = Set( 1, "set1", "seq1", 1, 5 ) + setSubj2 = Set( 2, "set1", "seq1", 6, 9 ) + setSubj3 = Set( 3, "set1", "seq1", 35, 55 ) + + lSubj = [setSubj1, setSubj2, setSubj3] + + setRef1Exp = Set( 1, "set1", "seq1", 10, 20 ) + setRef2merged = Set( 2, "set1", "seq1", 30, 60 ) + setSubj1Exp = Set( 4, "set1", "seq1", 1, 5 ) + setSubj2Exp = Set( 5, "set1", "seq1", 6, 9 ) + + nextId = 6 + + lExp = ([setRef2merged, setRef1Exp, setSubj1Exp, setSubj2Exp], nextId) + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_all_items_in_reference_list_overlap_with_all_items_in_subject_list(self): + setRef1 = Set( 1, "set1", "seq1", 10, 20 ) + setRef2 = Set( 2, "set1", "seq1", 30, 40 ) + + lRef = [setRef1, setRef2] + + setSubj1 = Set( 1, "set1", "seq1", 10, 20 ) + setSubj2 = Set( 2, "set1", "seq1", 30, 40 ) + + lSubj = [setSubj1, setSubj2] + + setRef1merged = Set( 1, "set1", "seq1", 10, 20 ) + setRef2merged = Set( 2, "set1", "seq1", 30, 40 ) + + nextId = 3 + + lExp = ([setRef1merged, setRef2merged], nextId) + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_one_item_in_reference_list_overlap_with_all_items_in_subject_list(self): + setRef1 = Set( 1, "set1", "seq1", 10, 20 ) + setRef2 = Set( 2, "set1", "seq1", 30, 40 ) + setRef3 = Set( 3, "set1", "seq1", 50, 60 ) + + lRef = [setRef1, setRef2, setRef3] + + setSubj1 = Set( 1, "set1", "seq1", 11, 13 ) + setSubj2 = Set( 2, "set1", "seq1", 14, 16 ) + setSubj3 = Set( 3, "set1", "seq1", 17, 25 ) + + lSubj = [setSubj1, setSubj2, setSubj3] + + setRef1merged = Set( 1, "set1", "seq1", 10, 25 ) + setRef2Exp = Set( 2, "set1", "seq1", 30, 40 ) + setRef3Exp = Set( 3, "set1", "seq1", 50, 60 ) + + nextId = 4 + + lExp = ([setRef1merged, setRef2Exp, setRef3Exp], nextId) + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_one_item_in_reference_list_overlap_with_one_item_in_subject_list(self): + setRef1 = Set( 1, "set1", "seq1", 10, 20 ) + setRef2 = Set( 2, "set1", "seq1", 30, 40 ) + setRef3 = Set( 3, "set1", "seq1", 50, 60 ) + + lRef = [setRef1, setRef2, setRef3] + + setSubj1 = Set( 1, "set1", "seq1", 1, 9 ) + setSubj2 = Set( 2, "set1", "seq1", 31, 45 ) + setSubj3 = Set( 3, "set1", "seq1", 70, 80 ) + + lSubj = [setSubj1, setSubj2, setSubj3] + + setRef1Exp = Set( 1, "set1", "seq1", 10, 20 ) + setRef2merged = Set( 2, "set1", "seq1", 30, 45 ) + setRef3Exp = Set( 3, "set1", "seq1", 50, 60 ) + setSubj1Exp = Set( 4, "set1", "seq1", 1, 9 ) + setSubj3Exp = Set( 5, "set1", "seq1", 70, 80 ) + + nextId = 6 + + lExp = ([setRef2merged, setRef1Exp, setRef3Exp, setSubj1Exp, setSubj3Exp], nextId) + + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_one_item_in_reference_list_overlap_with_one_item_in_subject_list_with_strange_output_order(self): + setRef1 = Set( 5, "set1", "seq1", 10, 20 ) + setRef2 = Set( 6, "set1", "seq1", 30, 40 ) + setRef3 = Set( 7, "set1", "seq1", 50, 60 ) + setRef4 = Set( 8, "set1", "seq1", 90, 92 ) + + lRef = [setRef1, setRef2, setRef3, setRef4] + + setSubj1 = Set( 1, "set1", "seq1", 1, 9 ) + setSubj2 = Set( 2, "set1", "seq1", 35, 45 ) + setSubj3 = Set( 3, "set1", "seq1", 70, 80 ) + setSubj4 = Set( 4, "set1", "seq1", 130, 140 ) + + lSubj = [setSubj1, setSubj2, setSubj3, setSubj4] + + setRef1Exp = Set( 5, "set1", "seq1", 10, 20 ) + setRef2merged = Set( 6, "set1", "seq1", 30, 45 ) + setRef3Exp = Set( 7, "set1", "seq1", 50, 60 ) + setRef4Exp = Set( 8, "set1", "seq1", 90, 92 ) + setSubj1Exp = Set( 9, "set1", "seq1", 1, 9 ) + setSubj3Exp = Set( 10, "set1", "seq1", 70, 80 ) + setSubj4Exp = Set( 11, "set1", "seq1", 130, 140 ) + + nextId = 12 + + lExp = ([setRef2merged, setRef4Exp, setRef1Exp, setRef3Exp, setSubj1Exp, setSubj3Exp, setSubj4Exp], nextId) + + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_all_items_overlap_between_lists_with_same_length(self): + setRef1 = Set( 1, "set1", "seq1", 10, 20 ) + setRef2 = Set( 2, "set1", "seq1", 30, 40 ) + setRef3 = Set( 3 , "set1", "seq1", 50, 60 ) + + lRef = [setRef1, setRef2, setRef3] + + setSubj1 = Set( 1, "set1", "seq1", 15, 35 ) + setSubj2 = Set( 2, "set1", "seq1", 36, 55 ) + setSubj3 = Set( 3, "set1", "seq1", 56, 65 ) + + lSubj = [setSubj1, setSubj2, setSubj3] + + setRef1merged = Set( 1, "set1", "seq1", 10, 65 ) + + nextId = 4 + + lExp = ([setRef1merged], nextId) + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfMergedSetsAndNextId_all_items_overlap_between_lists_with_different_length(self): + setRef1 = Set( 1, "set1", "seq1", 10, 20 ) + setRef2 = Set( 2, "set1", "seq1", 30, 40 ) + setRef3 = Set( 3 , "set1", "seq1", 50, 60 ) + + lRef = [setRef1, setRef2, setRef3] + + setSubj1 = Set( 1, "set1", "seq1", 15, 35 ) + setSubj2 = Set( 2, "set1", "seq1", 36, 55 ) + + lSubj = [setSubj1, setSubj2] + + setRef1merged = Set( 1, "set1", "seq1", 10, 60 ) + + nextId = 4 + + lExp = ([setRef1merged], nextId) + lObs = SetUtils.getListOfMergedSetsAndNextId(lRef, lSubj) + + self.assertEquals(lObs, lExp) + + def test_getListOfSetWithoutOverlappingBetweenTwoListOfSet(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + set3 = Set( 3, "set1", "seq1", 50, 60 ) + + lSet1 = [set1, set2, set3] + + set4 = Set( 1, "set1", "seq1", 15, 35 ) + set5 = Set( 2, "set1", "seq1", 36, 55 ) + set6 = Set( 3, "set1", "seq1", 66, 95 ) + + lSet2 = [set4, set5, set6] + + expLSet = [set6] + obsLSet = SetUtils.getListOfSetWithoutOverlappingBetweenTwoListOfSet(lSet1, lSet2) + + self.assertEquals(expLSet, obsLSet) + + def test_getListOfSetWithoutOverlappingBetweenTwoListOfSet_Empty_Result(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + set3 = Set( 3, "set1", "seq1", 50, 60 ) + + lSet1 = [set1, set2, set3] + + set4 = Set( 1, "set1", "seq1", 15, 35 ) + set5 = Set( 2, "set1", "seq1", 36, 55 ) + + lSet2 = [set4, set5] + + expLSet = [] + obsLSet = SetUtils.getListOfSetWithoutOverlappingBetweenTwoListOfSet(lSet1, lSet2) + + self.assertEquals(expLSet, obsLSet) + + def test_getListOfSetWithoutOverlappingBetweenTwoListOfSet_Empty_Result_Length_Condition(self): + set1 = Set( 1, "set1", "seq1", 10, 20 ) + set2 = Set( 2, "set1", "seq1", 30, 40 ) + set3 = Set( 3, "set1", "seq1", 50, 60 ) + + lSet1 = [set1, set2, set3] + + set4 = Set( 1, "set1", "seq1", 15, 35 ) + set5 = Set( 2, "set1", "seq1", 36, 55 ) + set6 = Set( 3, "set1", "seq1", 66, 68 ) + + lSet2 = [set4, set5, set6] + + expLSet = [] + obsLSet = SetUtils.getListOfSetWithoutOverlappingBetweenTwoListOfSet(lSet1, lSet2) + + self.assertEquals(expLSet, obsLSet) + + + def test_getSetListFromFile(self): + file = "dummyFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) + fileHandler = open( file, "w" ) + fileHandler.write( "1\tseq1\tchr1\t151\t250\n" ) + fileHandler.write( "2\tseq2\tchr2\t301\t500\n" ) + fileHandler.close() + s1 = Set() + s1.setFromTuple( ( "1", "seq1", "chr1", "151", "250" ) ) + s2 = Set() + s2.setFromTuple( ( "2", "seq2", "chr2", "301", "500" ) ) + expLSet = [ s1, s2 ] + obsLSet = SetUtils.getSetListFromFile(file) + os.remove(file) + self.assertEqual( expLSet, obsLSet ) + + + def test_convertSetFileIntoMapFile( self ): + setFile = "dummySetFile" + setFileHandler = open( setFile, "w" ) + setFileHandler.write( "1\tseq31\tchr1\t151\t250\n" ) + setFileHandler.write( "2\tseq27\tchr2\t301\t500\n" ) + setFileHandler.close() + + expFile = "dummyExpFile" + expFileHandler = open( expFile, "w" ) + expFileHandler.write( "seq31\tchr1\t151\t250\n" ) + expFileHandler.write( "seq27\tchr2\t301\t500\n" ) + expFileHandler.close() + + obsFile = "dummyObsFile" + + SetUtils.convertSetFileIntoMapFile( setFile, obsFile ) + + self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) + + for f in [ setFile, expFile, obsFile ]: + os.remove( f ) + + + def test_getDictOfListsWithSeqnameAsKey_empty( self ): + lSets = [] + dExp = {} + dObs = SetUtils.getDictOfListsWithSeqnameAsKey( lSets ) + self.assertEquals( dExp, dObs ) + + + def test_getDictOfListsWithSeqnameAsKey( self ): + lSets = [ Set( 1, "TE3", "chr2", 10, 50 ), + Set( 2, "gene74", "chr1", 31, 800 ), + Set( 3, "TE1", "chr1", 1, 30 ) ] + dExp = { "chr1": [ Set( 2, "gene74", "chr1", 31, 800 ), + Set( 3, "TE1", "chr1", 1, 30 ) ], + "chr2": [ Set( 1, "TE3", "chr2", 10, 50 ) ] } + dObs = SetUtils.getDictOfListsWithSeqnameAsKey( lSets ) + self.assertEquals( dExp, dObs ) + + + def test_filterOnLength( self ): + lSets = [ Set( 1, "TE3", "chr2", 10, 50 ), + Set( 2, "gene74", "chr1", 31, 800 ), + Set( 3, "TE1", "chr1", 1, 30 ) ] + lExp = [ Set( 2, "gene74", "chr1", 31, 800 ) ] + lObs = SetUtils.filterOnLength( lSets, 100 ) + self.assertEqual( lExp, lObs ) + + + def test_getListOfNames( self ): + setFile = "dummySetFile" + setFileHandler = open( setFile, "w" ) + setFileHandler.write( "1\tseq31\tchr1\t151\t250\n" ) + setFileHandler.write( "2\tseq27\tchr2\t301\t500\n" ) + setFileHandler.close() + + lExp = [ "seq31", "seq27" ] + lObs = SetUtils.getListOfNames( setFile ) + + self.assertEquals( lExp, lObs ) + + os.remove( setFile ) + + + def test_getDictOfDictsWithNamesThenIdAsKeyFromFile( self ): + setFile = "dummySetFile" + setFileHandler = open( setFile, "w" ) + setFileHandler.write( "1\tseq31\tchr1\t151\t250\n" ) + setFileHandler.write( "3\tseq27\tchr3\t1\t100\n" ) + setFileHandler.write( "2\tseq27\tchr2\t301\t500\n" ) + setFileHandler.write( "2\tseq27\tchr2\t601\t650\n" ) + setFileHandler.close() + + dExp = { "seq31": { 1: [ Set( 1, "seq31", "chr1", 151, 250 ) ] }, + "seq27": { 2: [ Set( 2, "seq27", "chr2", 301, 500 ), + Set( 2, "seq27", "chr2", 601, 650 ) ], + 3: [ Set( 3, "seq27", "chr3", 1, 100 ) ] + } + } + dObs = SetUtils.getDictOfDictsWithNamesThenIdAsKeyFromFile( setFile ) + + self.assertEquals( dExp, dObs ) + + os.remove( setFile ) + + + def _makeSetListFromTupleList (self, tupleList): + setList = [] + for tuple in tupleList: + set = Set() + set.setFromTuple(tuple) + setList.append(set) + return setList + + +test_suite = unittest.TestSuite() +test_suite.addTest( unittest.makeSuite( Test_SetUtils ) ) +if __name__ == "__main__": + unittest.TextTestRunner(verbosity=2).run( test_suite )