|
- # -*- coding: utf-8 -*-
-
- import nilmdb
- from nilmdb.printf import *
-
- from nose.tools import *
- from nose.tools import assert_raises
-
- from nilmdb.rbtree import RBTree, RBNode
-
- from test_helpers import *
- import unittest
-
- class TestRBTree:
- def test_rbtree(self):
- rb = RBTree()
- rb.insert(RBNode(None, 10000, 10001))
- rb.insert(RBNode(None, 10004, 10007))
- rb.insert(RBNode(None, 10001, 10002))
- s = rb.render_dot()
- # There was a typo that gave the RBTree a loop in this case.
- # Verify that the dot isn't too big.
- assert(len(s.splitlines()) < 30)
-
- #@unittest.skip("needs GTK")
- def test_rbtree_big(self):
- import random
- random.seed(1234)
-
- # make a set of 500 intervals, inserted in order
- rb = RBTree()
- j = 500
- for i in xrange(j):
- rb.insert(RBNode(None, i, i+1))
-
- # show the graph
- rb.render_dot_live("in-order insert")
-
- # remove about half of them
- for i in random.sample(xrange(j),j):
- if random.randint(0,1):
- rb.delete(rb.find(i, i+1))
-
- # show the graph
- rb.render_dot_live("in-order insert, random delete")
-
- # make a set of 500 intervals, inserted at random
- rb = RBTree()
- j = 500
- for i in random.sample(xrange(j),j):
- rb.insert(RBNode(None, i, i+1))
-
- # show the graph
- rb.render_dot_live("random insert")
-
- # remove about half of them
- for i in random.sample(xrange(j),j):
- if random.randint(0,1):
- rb.delete(rb.find(i, i+1))
-
- # show the graph
- rb.render_dot_live("random insert, random delete")
-
- # in-order insert of 250 more
- for i in xrange(250):
- rb.insert(RBNode(None, i+500, i+501))
-
- # show the graph
- rb.render_dot_live("random insert, random delete, in-order insert")
|