100% test coverage for alphanum.py
authorDiane Trout <diane@caltech.edu>
Fri, 4 May 2012 19:05:29 +0000 (12:05 -0700)
committerDiane Trout <diane@caltech.edu>
Fri, 4 May 2012 19:05:29 +0000 (12:05 -0700)
htsworkflow/util/alphanum.py
htsworkflow/util/test/test_alphanum.py

index 5e2560659bef32454415fa8d091023a540e428cf..c9d66495e76fe672a5c41019ce378358c4ee736b 100644 (file)
@@ -35,10 +35,10 @@ def chunkify(str):
     return a list of numbers and non-numeric substrings of +str+
     the numeric substrings are converted to integer, non-numeric are left as is
     """
-    if type(str) in types.StringTypes: 
+    if type(str) in types.StringTypes:
         chunks = re.findall("(\d+|\D+)",str)
         #convert numeric strings to numbers
-        chunks = [re.match('\d',x) and int(x) or x for x in chunks] 
+        chunks = [re.match('\d',x) and int(x) or x for x in chunks]
         return chunks
     elif type(str) in [types.IntType, types.LongType, types.FloatType]:
         return [str]
@@ -58,12 +58,3 @@ def alphanum(a,b):
     bChunks = chunkify(b)
 
     return cmp(aChunks,bChunks) #built in comparison works once data is prepared
-
-
-
-if __name__ == "__main__":
-       unsorted = ["1000X Radonius Maximus","10X Radonius","200X Radonius","20X Radonius","20X Radonius Prime","30X Radonius","40X Radonius","Allegia 50 Clasteron","Allegia 500 Clasteron","Allegia 51 Clasteron","Allegia 51B Clasteron","Allegia 52 Clasteron","Allegia 60 Clasteron","Alpha 100","Alpha 2","Alpha 200","Alpha 2A","Alpha 2A-8000","Alpha 2A-900","Callisto Morphamax","Callisto Morphamax 500","Callisto Morphamax 5000","Callisto Morphamax 600","Callisto Morphamax 700","Callisto Morphamax 7000","Callisto Morphamax 7000 SE","Callisto Morphamax 7000 SE2","QRS-60 Intrinsia Machine","QRS-60F Intrinsia Machine","QRS-62 Intrinsia Machine","QRS-62F Intrinsia Machine","Xiph Xlater 10000","Xiph Xlater 2000","Xiph Xlater 300","Xiph Xlater 40","Xiph Xlater 5","Xiph Xlater 50","Xiph Xlater 500","Xiph Xlater 5000","Xiph Xlater 58"]
-       sorted = unsorted[:]
-       sorted.sort(alphanum)
-       print '+++++Sorted...++++'
-       print '\n'.join(sorted)
index f7b488d0b5cf575f04ec525c0b74bfd55b2bc659..3fd60250cbe392f9208c077076253fd6aed10f94 100644 (file)
@@ -27,6 +27,19 @@ class testAlphanum(unittest.TestCase):
       for i in xrange(len(scratch)):
         self.failUnlessEqual(scratch[i], sorted[i])
 
+    def test_long_names(self):
+        unsorted = ["1000X Radonius Maximus","10X Radonius","200X Radonius","20X Radonius","20X Radonius Prime","30X Radonius","40X Radonius","Allegia 50 Clasteron","Allegia 500 Clasteron","Allegia 51 Clasteron","Allegia 51B Clasteron","Allegia 52 Clasteron","Allegia 60 Clasteron","Alpha 100","Alpha 2","Alpha 200","Alpha 2A","Alpha 2A-8000","Alpha 2A-900","Callisto Morphamax","Callisto Morphamax 500","Callisto Morphamax 5000","Callisto Morphamax 600","Callisto Morphamax 700","Callisto Morphamax 7000","Callisto Morphamax 7000 SE","Callisto Morphamax 7000 SE2","QRS-60 Intrinsia Machine","QRS-60F Intrinsia Machine","QRS-62 Intrinsia Machine","QRS-62F Intrinsia Machine","Xiph Xlater 10000","Xiph Xlater 2000","Xiph Xlater 300","Xiph Xlater 40","Xiph Xlater 5","Xiph Xlater 50","Xiph Xlater 500","Xiph Xlater 5000","Xiph Xlater 58"]
+        expected = ['10X Radonius', '20X Radonius', '20X Radonius Prime', '30X Radonius', '40X Radonius', '200X Radonius', '1000X Radonius Maximus', 'Allegia 50 Clasteron', 'Allegia 51 Clasteron', 'Allegia 51B Clasteron', 'Allegia 52 Clasteron', 'Allegia 60 Clasteron', 'Allegia 500 Clasteron', 'Alpha 2', 'Alpha 2A', 'Alpha 2A-900', 'Alpha 2A-8000', 'Alpha 100', 'Alpha 200', 'Callisto Morphamax', 'Callisto Morphamax 500', 'Callisto Morphamax 600', 'Callisto Morphamax 700', 'Callisto Morphamax 5000', 'Callisto Morphamax 7000', 'Callisto Morphamax 7000 SE', 'Callisto Morphamax 7000 SE2', 'QRS-60 Intrinsia Machine', 'QRS-60F Intrinsia Machine', 'QRS-62 Intrinsia Machine', 'QRS-62F Intrinsia Machine', 'Xiph Xlater 5', 'Xiph Xlater 40', 'Xiph Xlater 50', 'Xiph Xlater 58', 'Xiph Xlater 300', 'Xiph Xlater 500', 'Xiph Xlater 2000', 'Xiph Xlater 5000', 'Xiph Xlater 10000']
+
+        s = unsorted[:]
+        s.sort(alphanum)
+        self.failUnlessEqual(s, expected)
+
+    def test_bad_input(self):
+        unsorted = [object(), (1,3j)]
+        s = unsorted[:]
+        self.failUnlessRaises(ValueError, s.sort, alphanum)
+
 
 def suite():
     return unittest.makeSuite(testAlphanum, 'test')