Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | #!/usr/bin/env python |
2 | # -*- coding: iso-8859-1 -*- | |
3 | ||
4 | from test import test_support | |
5 | import marshal | |
6 | import sys | |
7 | import unittest | |
8 | import os | |
9 | ||
10 | class IntTestCase(unittest.TestCase): | |
11 | def test_ints(self): | |
12 | # Test the full range of Python ints. | |
13 | n = sys.maxint | |
14 | while n: | |
15 | for expected in (-n, n): | |
16 | s = marshal.dumps(expected) | |
17 | got = marshal.loads(s) | |
18 | self.assertEqual(expected, got) | |
19 | marshal.dump(expected, file(test_support.TESTFN, "wb")) | |
20 | got = marshal.load(file(test_support.TESTFN, "rb")) | |
21 | self.assertEqual(expected, got) | |
22 | n = n >> 1 | |
23 | os.unlink(test_support.TESTFN) | |
24 | ||
25 | def test_int64(self): | |
26 | # Simulate int marshaling on a 64-bit box. This is most interesting if | |
27 | # we're running the test on a 32-bit box, of course. | |
28 | ||
29 | def to_little_endian_string(value, nbytes): | |
30 | bytes = [] | |
31 | for i in range(nbytes): | |
32 | bytes.append(chr(value & 0xff)) | |
33 | value >>= 8 | |
34 | return ''.join(bytes) | |
35 | ||
36 | maxint64 = (1L << 63) - 1 | |
37 | minint64 = -maxint64-1 | |
38 | ||
39 | for base in maxint64, minint64, -maxint64, -(minint64 >> 1): | |
40 | while base: | |
41 | s = 'I' + to_little_endian_string(base, 8) | |
42 | got = marshal.loads(s) | |
43 | self.assertEqual(base, got) | |
44 | if base == -1: # a fixed-point for shifting right 1 | |
45 | base = 0 | |
46 | else: | |
47 | base >>= 1 | |
48 | ||
49 | def test_bool(self): | |
50 | for b in (True, False): | |
51 | new = marshal.loads(marshal.dumps(b)) | |
52 | self.assertEqual(b, new) | |
53 | self.assertEqual(type(b), type(new)) | |
54 | marshal.dump(b, file(test_support.TESTFN, "wb")) | |
55 | new = marshal.load(file(test_support.TESTFN, "rb")) | |
56 | self.assertEqual(b, new) | |
57 | self.assertEqual(type(b), type(new)) | |
58 | ||
59 | class FloatTestCase(unittest.TestCase): | |
60 | def test_floats(self): | |
61 | # Test a few floats | |
62 | small = 1e-25 | |
63 | n = sys.maxint * 3.7e250 | |
64 | while n > small: | |
65 | for expected in (-n, n): | |
66 | f = float(expected) | |
67 | s = marshal.dumps(f) | |
68 | got = marshal.loads(s) | |
69 | self.assertEqual(f, got) | |
70 | marshal.dump(f, file(test_support.TESTFN, "wb")) | |
71 | got = marshal.load(file(test_support.TESTFN, "rb")) | |
72 | self.assertEqual(f, got) | |
73 | n /= 123.4567 | |
74 | ||
75 | f = 0.0 | |
76 | s = marshal.dumps(f) | |
77 | got = marshal.loads(s) | |
78 | self.assertEqual(f, got) | |
79 | ||
80 | n = sys.maxint * 3.7e-250 | |
81 | while n < small: | |
82 | for expected in (-n, n): | |
83 | f = float(expected) | |
84 | s = marshal.dumps(f) | |
85 | got = marshal.loads(s) | |
86 | self.assertEqual(f, got) | |
87 | marshal.dump(f, file(test_support.TESTFN, "wb")) | |
88 | got = marshal.load(file(test_support.TESTFN, "rb")) | |
89 | self.assertEqual(f, got) | |
90 | n *= 123.4567 | |
91 | os.unlink(test_support.TESTFN) | |
92 | ||
93 | class StringTestCase(unittest.TestCase): | |
94 | def test_unicode(self): | |
95 |