1 |
#!/usr/bin/env python |
2 |
# |
3 |
# Copyright (C) 2002, 2003 by Intevation GmbH |
4 |
# Authors: |
5 |
# Thomas Koester <[email protected]> |
6 |
# |
7 |
# This program is free software under the GPL (>=v2) |
8 |
# Read the file COPYING coming with the software for details. |
9 |
|
10 |
""" |
11 |
Unit test for range.py |
12 |
""" |
13 |
|
14 |
__version__ = "$Revision$" |
15 |
# $Source$ |
16 |
# $Id$ |
17 |
|
18 |
import unittest |
19 |
|
20 |
import support |
21 |
support.initthuban() |
22 |
|
23 |
from Thuban.Model.range import Range |
24 |
from Thuban.Model.range import _inf |
25 |
|
26 |
|
27 |
class Importing(unittest.TestCase): |
28 |
|
29 |
Range = Range |
30 |
|
31 |
def test_import1(self): |
32 |
"""import Thuban.Model.range""" |
33 |
import Thuban.Model.range |
34 |
self.assert_(Thuban.Model.range.Range is self.Range) |
35 |
|
36 |
def test_import2(self): |
37 |
"""import Thuban.Model.range.range""" |
38 |
import Thuban.Model.range |
39 |
self.assert_(Thuban.Model.range.Range is self.Range) |
40 |
|
41 |
def test_import3(self): |
42 |
"""from Thuban.Model.range import Range""" |
43 |
from Thuban.Model.range import Range |
44 |
self.assert_(Range is self.Range) |
45 |
|
46 |
# |
47 |
# SyntaxWarning to import * |
48 |
# |
49 |
#def test_import4(self): |
50 |
#"""from Thuban.Model.range import *""" |
51 |
#from Thuban.Model.range import * |
52 |
#self.assert_(Range is self.Range) |
53 |
|
54 |
|
55 |
class RangeTest(support.FloatTestCase): |
56 |
|
57 |
def test_equal(self): |
58 |
"""test if different ways to create a range yield equal ranges""" |
59 |
range = Range() |
60 |
self.assertEqual(range, Range('')) |
61 |
self.assertEqual(range, Range(']-oo;oo[')) |
62 |
range.SetRange('[0;1]') |
63 |
self.assertEqual(range, Range('[000;1.0]')) |
64 |
range2 = range |
65 |
self.assertEqual(range, range2) |
66 |
range3 = Range(range) |
67 |
self.assertEqual(range3, range2) |
68 |
range = Range(']0;99]') |
69 |
self.assertEqual(range, Range(']0;99E+00]')) |
70 |
self.assertEqual(range, Range(']0;9.9E+01]')) |
71 |
self.assertEqual(range, Range(']0;990E-01]')) |
72 |
self.assertEqual(range, Range(']0;.99E+02]')) |
73 |
|
74 |
def test_different(self): |
75 |
"""test if different ranges are different""" |
76 |
range = Range('[-1;1]') |
77 |
self.failIfEqual(range, Range(']-1;1]')) |
78 |
self.failIfEqual(range, Range('[-1;1[')) |
79 |
self.failIfEqual(range, Range(']-1;1[')) |
80 |
self.failIfEqual(range, Range('[0;1]')) |
81 |
self.failIfEqual(range, Range('[-1;0]')) |
82 |
|
83 |
def test_contains(self): |
84 |
"""test value in range""" |
85 |
range = Range(']0;99]') |
86 |
for value in [-0.1, 0, 99.1]: |
87 |
self.failIf(value in range) |
88 |
for value in [0.1, 9.9, 99]: |
89 |
self.assert_(value in range) |
90 |
range = Range('[-oo;0]') |
91 |
for value in [0.1, float('1e100'), float('1e10000')]: |
92 |
self.failIf(value in range) |
93 |
for value in [0.0, float('-1e100'), float('-1e10000')]: |
94 |
self.assert_(value in range) |
95 |
|
96 |
def test_float(self): |
97 |
"""test string to float conversion""" |
98 |
range = Range() |
99 |
self.assertFloatEqual(range.float('oo'), _inf) |
100 |
self.assertFloatEqual(range.float('-oo'), -_inf) |
101 |
for value in [-100000000000000000000l, 12345.6789, 0, 0.0, 5.30e20]: |
102 |
self.assertFloatEqual(range.float(str(value)), value) |
103 |
|
104 |
def test_short_range(self): |
105 |
"""test if range parser handles short ranges""" |
106 |
range = Range('[0;0]') |
107 |
self.failIf(-0.001 in range) |
108 |
self.assert_(0 in range) |
109 |
self.failIf(0.001 in range) |
110 |
|
111 |
def test_bad_ranges(self): |
112 |
"""test if range parser raises correct exception on bad ranges""" |
113 |
for range in [0, 1.1]: |
114 |
self.assertRaises(TypeError, Range, range) |
115 |
for range in ['x', ']x;9]', ']]0;1]', '[0;1]]', '[0;x]', '0', |
116 |
'[0]', '[;]', '[0;]', '[;0]', '[1;0]', |
117 |
']0;0]', '[0;0[', ']0;0[']: |
118 |
self.assertRaises(ValueError, Range, range) |
119 |
|
120 |
|
121 |
if __name__ == "__main__": |
122 |
unittest.main() |