aboutsummaryrefslogtreecommitdiffstats
path: root/tests/util.py
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2012-02-02 04:40:07 -0500
committerBjoern Brandenburg <bbb@mpi-sws.org>2012-02-02 04:40:07 -0500
commit532478450c1e0a25ab92b2585a8c3ee61089d02b (patch)
treea759a7bd33eb3742a4b9e4901077feac3526f5c9 /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.py101
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 @@
1from __future__ import division
2
3import unittest
4
5from fractions import Fraction
6
7import schedcat.util.iter as iter
8import schedcat.util.math as m
9
10class 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
43class 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
79class 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