# test_string_recursion.py
# Walker M. White (wmw2)
# September 9, 2012
"""Unit test for recursive string functions."""
import cunittest
from string_recursion import *

def test_num_e():
    cunittest.assert_equals(0,  num_e(''))
    cunittest.assert_equals(1,  num_e('e'))
    cunittest.assert_equals(0,  num_e('c'))
    cunittest.assert_equals(2,  num_e('ceceddd'))
    cunittest.assert_equals(0,  num_e('asdfasdfadsf'))


def test_deblank():
    cunittest.assert_equals('',  deblank(''));
    cunittest.assert_equals('',  deblank(' '));
    cunittest.assert_equals('B',  deblank('B'));
    cunittest.assert_equals('BG', deblank('B G'));
    cunittest.assert_equals('',   deblank('         '));


def test_depunct():
    cunittest.assert_equals('', depunct('(@$*&@'));
    cunittest.assert_equals('foo', depunct('  f,o**o!!!'));
    cunittest.assert_equals('foo', depunct('f  (!*@&,.<>:\'  oo'));


def test_ispalindrome():
    cunittest.assert_equals(True,  ispalindrome(''));
    cunittest.assert_equals(True,  ispalindrome('B'));
    cunittest.assert_equals(True,  ispalindrome('BB'));
    cunittest.assert_equals(False, ispalindrome('BA'));
    cunittest.assert_equals(True,  ispalindrome('BOB'));
    cunittest.assert_equals(False, ispalindrome('BOA'));
    cunittest.assert_equals(True,  ispalindrome('ablewasiereisawelba'));
    cunittest.assert_equals(True,  ispalindrome('amanaplanacanalpanama'));
    cunittest.assert_equals(True,  ispalindrome('Amanaplanacanalpanama'));
    cunittest.assert_equals(False, ispalindrome('amanaplana canalpanama'));
    
    cunittest.assert_equals(True,  ispalindrome2(''));
    cunittest.assert_equals(True,  ispalindrome2('B'));
    cunittest.assert_equals(True,  ispalindrome2('BB'));
    cunittest.assert_equals(False, ispalindrome2('BA'));
    cunittest.assert_equals(True,  ispalindrome2('BOB'));
    cunittest.assert_equals(False, ispalindrome2('BOA'));
    cunittest.assert_equals(True,  ispalindrome2('ablewasiereisawelba'));
    cunittest.assert_equals(True,  ispalindrome2('amanaplanacanalpanama'));
    cunittest.assert_equals(True,  ispalindrome2('Amanaplanacanalpanama'));
    cunittest.assert_equals(False, ispalindrome2('amanaplana canalpanama'));
        
    cunittest.assert_equals(True,  ispalindrome_loosely('A man, a plan, a canal --Panama!'));
    cunittest.assert_equals(False, ispalindrome_loosely('A man, a plan, a cabal --Panama!'));

# Application Code
if __name__ == '__main__':
    test_num_e()
    test_deblank()
    test_depunct()
    test_ispalindrome()
    print 'Module string_recursion is working properly'