Gustavo Picon is sharing code with you

Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.

Don't show this again

tabo / numconv

Python library to convert strings to numbers and numbers to strings. Docs: http://docs.tabo.pe/numconv/tip/

Clone this repository (size: 168.1 KB): HTTPS / SSH
hg clone https://bitbucket.org/tabo/numconv
hg clone ssh://hg@bitbucket.org/tabo/numconv

numconv / tests.py

commit
c4e7f8a9fba1
parent
1f64ca152ceb
branch
default
tags
1.1

updated the documentation Makefile to have a flexible html output location

1
a035ba7fb21b
# -*- coding: utf-8 -*-
2
a035ba7fb21b
3
a035ba7fb21b
"""Test numconv.py"""
4
a035ba7fb21b
5
a035ba7fb21b
import numconv
6
a035ba7fb21b
import unittest
7
a035ba7fb21b
8
a035ba7fb21b
9
a035ba7fb21b
class BaseconvI2s(unittest.TestCase):
10
a035ba7fb21b
    """tests for int2str()"""
11
a035ba7fb21b
12
a035ba7fb21b
    def test_i2s(self):
13
a035ba7fb21b
        """testing int2str: expected values"""
14
a035ba7fb21b
        self.assertEqual(numconv.int2str(3735928559, 16), 'DEADBEEF')
15
a035ba7fb21b
        self.assertEqual(numconv.int2str(238327, 62), 'zzz')
16
a035ba7fb21b
        self.assertEqual(numconv.int2str(14776335, 62), 'zzzz')
17
a035ba7fb21b
        self.assertEqual(numconv.int2str(466, 7), '1234')
18
a035ba7fb21b
        self.assertEqual(numconv.int2str(151880, 2), '100101000101001000')
19
a035ba7fb21b
        self.assertEqual(numconv.int2str(2693233728041137L, 85), '~123AFz@')
20
a035ba7fb21b
        self.assertEqual(numconv.int2str(543543, 40), '8JSN')
21
a035ba7fb21b
        self.assertEqual(numconv.int2str(1949459, 61), '8ZtL')
22
a035ba7fb21b
        self.assertEqual(numconv.int2str(19284, 2), '100101101010100')
23
a035ba7fb21b
        self.assertEqual(numconv.int2str(100, 10, 'abcdefghijklm'), 'baa')
24
a035ba7fb21b
        self.assertEqual(numconv.int2str(37, 4, 'rofl'), 'foo')
25
a035ba7fb21b
26
a035ba7fb21b
    def test_i2s_nonint_number(self):
27
a035ba7fb21b
        """testing int2str: error on non-integer number"""
28
a035ba7fb21b
        self.assertRaises(TypeError, numconv.int2str, 0.1, 8)
29
a035ba7fb21b
30
a035ba7fb21b
    def test_i2s_nonint_radix(self):
31
a035ba7fb21b
        """testing int2str: error on non-integer radix"""
32
a035ba7fb21b
        self.assertRaises(TypeError, numconv.int2str, 100, 0.1)
33
a035ba7fb21b
34
a035ba7fb21b
    def test_i2s_invalid_radix(self):
35
a035ba7fb21b
        """testing int2str: error on invalid radix"""
36
a035ba7fb21b
        self.assertRaises(ValueError, numconv.int2str, 100, -10)
37
a035ba7fb21b
        self.assertRaises(ValueError, numconv.int2str, 100, 10, 'abcde')
38
a035ba7fb21b
39
a035ba7fb21b
    def test_i2s_negative_number(self):
40
a035ba7fb21b
        """testing int2str: error on negative number"""
41
a035ba7fb21b
        self.assertRaises(ValueError, numconv.int2str, -100, 10)
42
a035ba7fb21b
43
a035ba7fb21b
44
a035ba7fb21b
class BaseconvS2i(unittest.TestCase):
45
a035ba7fb21b
    """tests for str2int()"""
46
a035ba7fb21b
47
a035ba7fb21b
    def test_s2i(self):
48
a035ba7fb21b
        """testing str2int: expected values"""
49
a035ba7fb21b
        self.assertEqual(numconv.str2int('DEADBEEF', 16), 3735928559L)
50
a035ba7fb21b
        self.assertEqual(numconv.str2int('zzz', 62), 238327)
51
a035ba7fb21b
        self.assertEqual(numconv.str2int('zzzz', 62), 14776335)
52
a035ba7fb21b
        self.assertEqual(numconv.str2int('1234', 7), 466)
53
a035ba7fb21b
        self.assertEqual(numconv.str2int('100101000101001000', 2), 151880)
54
a035ba7fb21b
        self.assertEqual(numconv.str2int('~123AFz@', 85), 2693233728041137L)
55
a035ba7fb21b
        self.assertEqual(numconv.str2int('8JSN', 40), 543543)
56
a035ba7fb21b
        self.assertEqual(numconv.str2int('8ZtL', 61), 1949459)
57
a035ba7fb21b
        self.assertEqual(numconv.str2int('100101101010100', 2), 19284)
58
a035ba7fb21b
        self.assertEqual(numconv.str2int('baa', 10, 'abcdefghijklm'), 100)
59
a035ba7fb21b
        self.assertEqual(numconv.str2int('foo', 4, 'rofl'), 37)
60
a035ba7fb21b
61
a035ba7fb21b
    def test_s2i_nonint_base(self):
62
a035ba7fb21b
        """testing str2int: error on non-integer base"""
63
a035ba7fb21b
        self.assertRaises(TypeError, numconv.str2int, '100', 0.1)
64
a035ba7fb21b
65
a035ba7fb21b
    def test_s2i_bad_number(self):
66
a035ba7fb21b
        """testing str2int: error on invalid number"""
67
a035ba7fb21b
        # raised by python
68
a035ba7fb21b
        self.assertRaises(ValueError, numconv.str2int, '1234z', 8)
69
a035ba7fb21b
        # raised by numconv.py
70
a035ba7fb21b
        self.assertRaises(ValueError, numconv.str2int, '1234z', 37)
71
a035ba7fb21b
72
a035ba7fb21b
    def test_s2i_invalid_radix(self):
73
a035ba7fb21b
        """testing str2int: error on invalid radix"""
74
a035ba7fb21b
        self.assertRaises(ValueError, numconv.str2int, 'abcd', -10)
75
a035ba7fb21b
76
a035ba7fb21b
77
a035ba7fb21b
class BaseconvGetcmap(unittest.TestCase):
78
a035ba7fb21b
    """tests for getcmap()"""
79
a035ba7fb21b
80
a035ba7fb21b
    def test_getcmap(self):
81
a035ba7fb21b
        """testing getcmap: expected values"""
82
a035ba7fb21b
        self.assertEqual(numconv.getcmap('0123456789'),
83
a035ba7fb21b
            {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4,
84
a035ba7fb21b
             '5': 5, '6': 6, '7': 7, '8': 8, '9': 9})
85
a035ba7fb21b
        self.assertEqual(numconv.getcmap('abcd'),
86
a035ba7fb21b
            {'a': 0, 'b': 1, 'c': 2, 'd': 3})
87
a035ba7fb21b
88
a035ba7fb21b
    def test_getcmap_dupechars(self):
89
a035ba7fb21b
        """testing getcmap: error on alphabet with duplicate chars"""
90
a035ba7fb21b
        self.assertRaises(ValueError, numconv.getcmap, 'abcdaf')
91
a035ba7fb21b
92
a035ba7fb21b
93
a035ba7fb21b
class BaseconvSanity(unittest.TestCase):
94
a035ba7fb21b
    """sanity checks"""
95
a035ba7fb21b
96
a035ba7fb21b
    def test_sanity(self):
97
a035ba7fb21b
        """sanity check: testing a large interval and lots of radixes"""
98
a035ba7fb21b
        for num in range(1000) + [10**x for x in range(5, 15)]:
99
a035ba7fb21b
            for base in range(2, len(numconv.BASE85)):
100
a035ba7fb21b
                self.assertEqual(num,
101
a035ba7fb21b
                    numconv.str2int(numconv.int2str(num, base), base))
102
a035ba7fb21b
103
a035ba7fb21b
if __name__ == "__main__":
104
a035ba7fb21b
    unittest.main()