Source code for Ranger.test.src.Collections.RangeSetTest

import unittest
from Ranger.src.Collections.RangeSet import RangeSet
from Ranger.src.Range.Range import Range
from Ranger.src.Range.Cut import Cut

debug = False

[docs]class RangeSetTest(unittest.TestCase): """ Unit Tests for RangeSet.py """
[docs] def test_add(self): if debug: print("Testing add with integers") theSet = RangeSet() # Adding initial part theSet.add(Range.closed(3,5)) self.assertEqual(theSet.lower_cuts[0], Cut.belowValue(3)) self.assertEqual(theSet.upper_cuts[0], Cut.aboveValue(5)) self.assertEqual(len(theSet),1) # Adding distinct range above initial one theSet.add(Range.closed(7,10)) self.assertEqual(len(theSet),2) self.assertEqual(theSet.ranges[1],Range.closed(7,10)) self.assertEqual(theSet.ranges[0],Range.closed(3,5)) # Adding range below/overlapping with initial one theSet.add(Range.closed(2,3)) self.assertEqual(len(theSet),2) self.assertEqual(Range.closed(2,5), theSet.ranges[0]) self.assertEqual(Cut.belowValue(2), theSet.lower_cuts[0]) self.assertEqual(Cut.aboveValue(5), theSet.upper_cuts[0]) self.assertEqual(Range.closed(7,10), theSet.ranges[1]) self.assertEqual(Cut.belowValue(7), theSet.lower_cuts[1]) self.assertEqual(Cut.aboveValue(10), theSet.upper_cuts[1]) # Adding range above/overlapping second one theSet.add(Range.closed(9,11)) self.assertEqual(len(theSet),2) self.assertEqual(Range.closed(7,11), theSet.ranges[1]) self.assertEqual(Cut.belowValue(7), theSet.lower_cuts[1]) self.assertEqual(Cut.aboveValue(11), theSet.upper_cuts[1]) # Adding range encompasing second one theSet.add(Range.closed(6,12)) self.assertEqual(len(theSet),2) self.assertEqual(Range.closed(6,12), theSet.ranges[1]) self.assertEqual(Cut.belowValue(6), theSet.lower_cuts[1]) self.assertEqual(Cut.aboveValue(12), theSet.upper_cuts[1]) # Adding range encompassing all theSet.add(Range.closed(3, 11)) self.assertEqual(len(theSet),1) self.assertEqual(len(theSet.lower_cuts),1) self.assertEqual(len(theSet.upper_cuts),1) self.assertEqual(Range.closed(2,12), theSet.ranges[0]) self.assertEqual(Cut.belowValue(2), theSet.lower_cuts[0]) self.assertEqual(Cut.aboveValue(12), theSet.upper_cuts[0])
[docs] def test_contains(self): if debug: print("Testing contains") theSet = RangeSet() theSet.add(Range.closed(3,5)) theSet.add(Range.closed(7,10)) self.assertTrue(theSet.contains(4)) self.assertFalse(theSet.contains(2)) self.assertTrue(theSet.contains(Range.closed(4,5))) self.assertTrue(theSet.contains(Range.closed(8,9))) self.assertFalse(theSet.contains(Range.closed(1,4))) self.assertFalse(theSet.contains(Range.closed(6,6))) self.assertFalse(theSet.contains(Range.closed(8,12)))
[docs] def test_overlaps(self): if debug: print("Testing overlaps") theSet = RangeSet() theSet.add(Range.closed(3,5)) theSet.add(Range.closed(7,10)) self.assertTrue(theSet.overlaps(4)) self.assertFalse(theSet.overlaps(Range.closedOpen(1,3))) self.assertFalse(theSet.overlaps(Range.open(5,7))) self.assertFalse(theSet.overlaps(2)) self.assertTrue(theSet.overlaps(3)) self.assertTrue(theSet.overlaps(10)) self.assertTrue(theSet.overlaps(Range.closed(4,5))) self.assertTrue(theSet.overlaps(Range.closed(8,9))) self.assertTrue(theSet.overlaps(Range.closed(1,4))) self.assertFalse(theSet.overlaps(Range.closed(6,6))) self.assertTrue(theSet.overlaps(Range.closed(8,12))) self.assertTrue(theSet.overlaps(Range.closed(1,12)))
[docs] def test_union(self): if debug: print("Testing union") firstSet = RangeSet([Range.closed(3,5), Range.closed(7,10)]) secondSet = RangeSet([Range.closed(2,4), Range.closed(5, 11), Range.closed(13, 15)]) union = firstSet.union(secondSet) self.assertEqual(union, RangeSet([Range.closed(2,11), Range.closed(13,15)]))
[docs] def test_difference(self): if debug: print("Testing difference") startSet = RangeSet([Range.closed(3,5),Range.closed(7,10)]) diffSet = startSet.difference(RangeSet([Range.closed(4,6)])) self.assertEqual(diffSet, RangeSet([Range.closedOpen(3,4), Range.closed(7,10)])) diffSet = startSet.difference(RangeSet([Range.closed(2,6)])) self.assertEqual(diffSet, RangeSet([Range.closed(7,10)])) diffSet = startSet.difference(RangeSet([Range.closed(-2,1)])) self.assertEqual(diffSet, startSet) diffSet = startSet.difference(RangeSet([Range.closed(1,3), Range.closed(6,9)])) self.assertEqual(diffSet, RangeSet([Range.openClosed(3,5), Range.openClosed(9,10)])) diffSet = startSet.difference(RangeSet([Range.closed(1,11)])) self.assertEqual(len(diffSet),0)
[docs] def test_difference_bug1(self): if debug: print("Testing difference with reference to bug 1") set1 = RangeSet([Range.closedOpen(2949490, 2949550), Range.closedOpen(2950080, 2950130), Range.closedOpen(2993110, 2993150)]) set2 = RangeSet([ Range.closedOpen(2949640, 2949660), Range.closedOpen(2950070, 2950090), Range.closedOpen(2950110, 2950120) ]) diff = set1.difference(set2) self.assertEqual(diff, RangeSet([ Range.closedOpen(2949490, 2949550), Range.closedOpen(2950090, 2950110), Range.closedOpen(2950120, 2950130), Range.closedOpen(2993110, 2993150) ]))
[docs] def test_intersection(self): if debug: print("Testing intersection") startSet = RangeSet([Range.closed(3,5),Range.closed(7,10)]) intersect = startSet.intersection(RangeSet([Range.closed(4,6)])) self.assertEqual(intersect,RangeSet([Range.closed(4,5)])) intersect = startSet.intersection(RangeSet([ Range.closed(1,3),Range.closed(8,9),Range.closed(12,15) ])) self.assertEqual(intersect, RangeSet([ Range.closed(3,3),Range.closed(8,9) ])) intersect = startSet.intersection(RangeSet([ Range.openClosed(8,1000) ])) self.assertEqual(intersect, RangeSet([ Range.openClosed(8,10) ]))
[docs] def test_remove(self): if debug: print("Testing remove") startSet = RangeSet([Range.closed(3,5),Range.closed(7,10)]) # Try removing something outside all ranges startSet.remove(Range.closed(0,1)) self.assertEqual(startSet, RangeSet([ Range.closed(3,5),Range.closed(7,10) ])) # Remove left part of left range startSet.remove(Range.closed(2,3)) self.assertEqual(startSet, RangeSet([ Range.openClosed(3,5),Range.closed(7,10) ])) # Remove from middle of right range startSet.remove(Range.closed(8,9)) self.assertEqual(startSet, RangeSet([ Range.openClosed(3,5),Range.closedOpen(7,8), Range.openClosed(9,10) ])) # Remove through both ranges startSet.remove(Range.closed(5,7)) self.assertEqual(startSet, RangeSet([ Range.open(3,5),Range.open(7,8), Range.openClosed(9,10) ])) # Remove over the whole second set of ranges startSet.remove(Range.closed(5,100)) self.assertEqual(startSet, RangeSet([ Range.open(3,5) ]))
[docs] def test_whichOverlaps(self): if debug: print("Testing whichOverlaps") theSet = RangeSet() theSet.add(Range.closed(3,5)) theSet.add(Range.closed(7,10)) self.assertEqual(theSet.whichOverlaps(4), set([Range.closed(3,5)])) self.assertEqual(theSet.whichOverlaps(Range.closed(0,4)), set([Range.closed(3,5)])) self.assertEqual(theSet.whichOverlaps(Range.closed(4,5)), set([Range.closed(3,5)])) self.assertEqual(theSet.whichOverlaps(Range.closed(4,6)), set([Range.closed(3,5)])) self.assertEqual(theSet.whichOverlaps(Range.closed(6,7)), set([Range.closed(7,10)])) self.assertEqual(theSet.whichOverlaps(Range.closed(8,11)), set([Range.closed(7,10)])) self.assertEqual(theSet.whichOverlaps(Range.closed(12,15)), set([])) self.assertEqual(theSet.whichOverlaps(Range.closed(4,11)), set([Range.closed(3,5), Range.closed(7,10)]))
if __name__ == "__main__": debug = True unittest.main(exit = False)