diff options
author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2012-02-02 04:40:07 -0500 |
---|---|---|
committer | Bjoern Brandenburg <bbb@mpi-sws.org> | 2012-02-02 04:40:07 -0500 |
commit | 532478450c1e0a25ab92b2585a8c3ee61089d02b (patch) | |
tree | a759a7bd33eb3742a4b9e4901077feac3526f5c9 /tests/util.py |
Import refactored schedcat codebase
Based on the code available at http://www.cs.unc.edu/~bbb/diss,
this is a cleaned-up version of schedcat intended to serve as
the basis for all further development.
Notable improvements: more unit tests and a cleaner module structure.
Diffstat (limited to 'tests/util.py')
-rw-r--r-- | tests/util.py | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/util.py b/tests/util.py new file mode 100644 index 0000000..04a0738 --- /dev/null +++ b/tests/util.py | |||
@@ -0,0 +1,101 @@ | |||
1 | from __future__ import division | ||
2 | |||
3 | import unittest | ||
4 | |||
5 | from fractions import Fraction | ||
6 | |||
7 | import schedcat.util.iter as iter | ||
8 | import schedcat.util.math as m | ||
9 | |||
10 | class Iters(unittest.TestCase): | ||
11 | def setUp(self): | ||
12 | self.s1 = xrange(1, 1000, 3) | ||
13 | self.s2 = xrange(4, 1000, 5) | ||
14 | self.s3 = [-3, 6000] | ||
15 | self.s1b = xrange(1, 1000, 3) | ||
16 | self.s1c = xrange(1, 1000, 3) | ||
17 | |||
18 | def test_imerge(self): | ||
19 | s = iter.imerge(lambda x, y: x < y, self.s1, self.s2, self.s3) | ||
20 | self.assertEqual(list(s)[:10], | ||
21 | [-3, 1, 4, 4, 7, 9, 10, 13, 14, 16]) | ||
22 | |||
23 | def test_imerge2(self): | ||
24 | a = range(10) | ||
25 | b = range(1, 6) | ||
26 | c = range(3, 14) | ||
27 | a.reverse() | ||
28 | b.reverse() | ||
29 | c.reverse() | ||
30 | self.assertEqual(list(iter.imerge(lambda a,b: a >= b, a, b, c)), | ||
31 | [13, 12,11, 10, | ||
32 | 9, 9, 8, 8, 7, 7, 6, 6, | ||
33 | 5, 5, 5, 4, 4, 4, 3, 3, 3, | ||
34 | 2, 2, 1, 1, | ||
35 | 0]) | ||
36 | |||
37 | def test_uniq(self): | ||
38 | s = iter.uniq(iter.imerge(lambda x, y: x < y, self.s1, self.s2, self.s3)) | ||
39 | self.assertEqual(list(s)[:10], | ||
40 | [-3, 1, 4, 7, 9, 10, 13, 14, 16, 19]) | ||
41 | |||
42 | |||
43 | class Math(unittest.TestCase): | ||
44 | def test_integral(self): | ||
45 | self.assertTrue(m.is_integral(int(1))) | ||
46 | self.assertTrue(m.is_integral(long(1))) | ||
47 | self.assertFalse(m.is_integral("foo")) | ||
48 | self.assertFalse(m.is_integral(1.0)) | ||
49 | self.assertFalse(m.is_integral(20 / 1)) | ||
50 | self.assertFalse(m.is_integral(Fraction(100, 10))) | ||
51 | |||
52 | def test_gcd(self): | ||
53 | self.assertEqual(m.gcd(10, 3), 1) | ||
54 | self.assertEqual(m.gcd(10, 2), 2) | ||
55 | self.assertEqual(m.gcd(15, 27), 3) | ||
56 | self.assertEqual(m.gcd(-10, 2), 2) | ||
57 | self.assertEqual(m.gcd(-20, -1930), 10) | ||
58 | self.assertEqual(m.gcd(10, 0), 10) | ||
59 | self.assertEqual(m.gcd(0, 10), 10) | ||
60 | self.assertEqual(m.gcd(10, 20), 10) | ||
61 | self.assertEqual(m.gcd(113, 17), 1) | ||
62 | self.assertEqual(m.gcd(-23, 17), 1) | ||
63 | self.assertEqual(m.gcd(-23, -54), 1) | ||
64 | |||
65 | def test_lcm(self): | ||
66 | self.assertEqual(m.lcm(), 0) | ||
67 | self.assertEqual(m.lcm(99), 99) | ||
68 | self.assertEqual(m.lcm(10, 20, 3), 60) | ||
69 | self.assertEqual(m.lcm(10, 20), 20) | ||
70 | self.assertEqual(m.lcm(3, 4), 12) | ||
71 | |||
72 | def test_topsum(self): | ||
73 | vals = [30, 60, 10, 40, 50, 20] | ||
74 | self.assertEqual(m.topsum(vals, lambda x: x * 2, 3), 2 * (40 + 50 + 60)) | ||
75 | self.assertEqual(m.lcm(99), 99) | ||
76 | self.assertEqual(m.lcm(10, 20, 3), 60) | ||
77 | |||
78 | |||
79 | class LinEqs(unittest.TestCase): | ||
80 | def setUp(self): | ||
81 | self.f = m.lin(1, 3) | ||
82 | self.c = m.const(123) | ||
83 | self.pwlin = m.monotonic_pwlin([(0, 1), (1, 0), (1, 4), (2, 5)]) | ||
84 | |||
85 | def test_const(self): | ||
86 | for x in xrange(1000): | ||
87 | self.assertAlmostEqual(self.c(x), 123) | ||
88 | |||
89 | def test_lin(self): | ||
90 | for x in xrange(1000): | ||
91 | self.assertAlmostEqual(self.f(x), 1 + x * 3.0) | ||
92 | |||
93 | def test_pwlin(self): | ||
94 | for x in xrange(1000): | ||
95 | self.assertAlmostEqual(self.pwlin(-x), 1) | ||
96 | self.assertAlmostEqual(self.pwlin(1), 1) | ||
97 | for x in xrange(1000): | ||
98 | x = x + 2 | ||
99 | self.assertAlmostEqual(self.pwlin(x), x + 3) | ||
100 | |||
101 | |||