import unittest
import path
import sys
import pdb
from cStringIO import StringIO

from pynto import util, log

debug_log = None

class TestCGraph (unittest.TestCase):

    def _run_script (self, items):

        max = 0

        if debug_log: ind = debug_log.indent ('_run_script: %s' % str(items))

        bitset = util.BitSet ()

        for i in items:
            if i > max: max = i
            bitset += i
            if debug_log: debug_log.high ('Added %d, length %d' %
                                          (i, len (bitset)))
            pass

        for i in range (max*2):
            ib = i in items
            bb = i in bitset
            if debug_log: debug_log.high ('Testing %d' % i)
            self.assertEqual (ib, bb,
                              "Error: item %d in items: %s in bitset: %s" %
                              (i, ib, bb))
            pass
        
        pass

    def testRange (self):

        """ Tests a consecutive set of numbers """

        self._run_script ( range (10) )
        return

    def testOutOfOrder (self):

        """ Tests a continuous set of numbers in reverse order """

        self._run_script ( range (10, 0, -1) )
        return

    def testOutOfOrder (self):

        """ Tests a 'random' set of numbers with duplicates """

        self._run_script ( (5, 3, 7, 1, 0, 0) )
        return

    pass

def add_tests (suite):
    for testname in dir (TestCGraph):
        if testname.startswith ('test'):
            suite.addTest (TestCGraph(testname))
            pass
        pass
    return

if __name__ == "__main__":
    
    if "--debug-mode" in sys.argv:
        sys.argv.remove ("--debug-mode")
        debug_log = log.Log (sys.stderr)
        debug_log.set_level (log.MINUTIA)
        pass

    if "--pdb" in sys.argv:
        sys.argv.remove ("--pdb")
        pdb.runcall (unittest.main)
    else:
        unittest.main ()
        pass

    pass
