#!/usr/bin/python

import myut
import rangeset

def simple_nonoverlapping():
	rs = rangeset.rangeset()
	rs.add(1,4)
	rs.add(8,10)
	myut.assertEqual(list(rs.iterator()), [ 1,2,3,4, 8,9,10 ])

def less_simple_nonoverlapping():
	rs = rangeset.rangeset()
	rs.add(1,3)
	rs.add(12,15)
	rs.add(6,9)
	myut.assertEqual(list(rs.iterator()), [ 1,2,3, 6,7,8,9, 12,13,14,15 ])

def overlapping_middle():
	rs = rangeset.rangeset()
	rs.add(1,3)
	rs.add(6,9)
	rs.add(12,15)
	rs.add(8,13)
	myut.assertEqual(list(rs.iterator()), [ 1,2,3, 6,7,8,9,10,11,12,13,14,15 ])

def overlapping_beginning():
	rs = rangeset.rangeset()
	rs.add(6,9)
	rs.add(12,15)
	rs.add(3,7)
	myut.assertEqual(list(rs.iterator()), [ 3,4,5,6,7,8,9, 12,13,14,15 ])

def overlapping_end():
	rs = rangeset.rangeset()
	rs.add(6,9)
	rs.add(12,15)
	rs.add(13,18)
	myut.assertEqual(list(rs.iterator()), [ 6,7,8,9, 12,13,14,15,16,17,18 ])

def wholly_encompassing():
	rs = rangeset.rangeset()
	rs.add(6,9)
	rs.add(12,15)
	rs.add(4,18)
	myut.assertEqual(list(rs.iterator()), [ 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 ])

def wholly_encompassed():
	rs = rangeset.rangeset()
	rs.add(6,9)
	rs.add(7,8)
	myut.assertEqual(list(rs.iterator()), [ 6,7,8,9 ])

def identical():
	rs = rangeset.rangeset()
	rs.add(1,3)
	rs.add(6,9)
	rs.add(12,15)
	rs.add(6,9)
	myut.assertEqual(list(rs.iterator()), [ 1,2,3, 6,7,8,9, 12,13,14,15 ])

def adjacent():
	rs = rangeset.rangeset()
	rs.add(1,3)
	rs.add(6,9)
	rs.add(4,5)
	myut.assertTrue(len(rs.rangeset_items) == 1)
	myut.assertEqual(list(rs.iterator()), [ 1,2,3,4,5,6,7,8,9 ])

def pops():
	rs = rangeset.rangeset()
	rs.add(1,3)
	rs.add(6,9)
	lst = []
	while rs:
		value = rs.pop_left()
		lst.append(value)
	myut.assertEqual(lst, [ 1,2,3, 6,7,8,9 ])

def main():
	#print 'simple nonoverlapping'
	simple_nonoverlapping()	
	#print 'less simple nonoverlapping'
	less_simple_nonoverlapping()
	#print 'overlapping middle'
	overlapping_middle()
	#print 'overlapping beginning'
	overlapping_beginning()
	#print 'overlapping end'
	overlapping_end()
	#print 'wholly encompassing'
	wholly_encompassing()
	#print 'wholly encompassed'
	wholly_encompassed()
	#print 'identical'
	identical()
	#print 'adjacent'
	adjacent()
	#print 'pops'
	pops()

main()