| 1 |
import unittest |
|---|
| 2 |
import datetime |
|---|
| 3 |
import analysis |
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
class Thing(object): |
|---|
| 7 |
def __init__(self, color, size, date): |
|---|
| 8 |
self.color = color |
|---|
| 9 |
self.size = size |
|---|
| 10 |
self.date = date |
|---|
| 11 |
|
|---|
| 12 |
things = [] |
|---|
| 13 |
for color, year in [('red', 2004), ('yellow', 2003), |
|---|
| 14 |
('blue', 2002), ('green', 2001)]: |
|---|
| 15 |
d = datetime.date(year, 1, 1) |
|---|
| 16 |
for size in xrange(5): |
|---|
| 17 |
things.append(Thing(color, size, d)) |
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 |
class CrossTabTests(unittest.TestCase): |
|---|
| 21 |
|
|---|
| 22 |
def test_creation(self): |
|---|
| 23 |
ctab = analysis.CrossTab() |
|---|
| 24 |
ctab = analysis.CrossTab(things) |
|---|
| 25 |
|
|---|
| 26 |
def test_count(self): |
|---|
| 27 |
ctab = analysis.CrossTab(things, 'color', 'size') |
|---|
| 28 |
self.assertEqual(ctab.results()[0], |
|---|
| 29 |
{('blue',): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 30 |
('yellow',): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 31 |
('green',): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 32 |
('red',): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}}, |
|---|
| 33 |
) |
|---|
| 34 |
ctab = analysis.CrossTab(things, ('color', lambda x: x.date.year), 'size') |
|---|
| 35 |
self.assertEqual(ctab.results()[0], |
|---|
| 36 |
{('blue', 2002): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 37 |
('yellow', 2003): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 38 |
('green', 2001): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 39 |
('red', 2004): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}}, |
|---|
| 40 |
) |
|---|
| 41 |
|
|---|
| 42 |
def test_sum(self): |
|---|
| 43 |
ctab = analysis.CrossTab(things, (), 'size') |
|---|
| 44 |
self.assertEqual(ctab.results()[0], {(): {0: 4, 1: 4, 2: 4, 3: 4, 4: 4}}) |
|---|
| 45 |
ctab.source[0].size = 4 |
|---|
| 46 |
self.assertEqual(ctab.results()[0], {(): {0: 3, 1: 4, 2: 4, 3: 4, 4: 5}}) |
|---|
| 47 |
ctab.groups = (lambda x: x.date.year,) |
|---|
| 48 |
self.assertEqual(ctab.results(), |
|---|
| 49 |
({(2001,): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 50 |
(2002,): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 51 |
(2003,): {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}, |
|---|
| 52 |
(2004,): { 1: 1, 2: 1, 3: 1, 4: 2}}, |
|---|
| 53 |
[0, 1, 2, 3, 4]) |
|---|
| 54 |
) |
|---|
| 55 |
ctab.groups = ('size',) |
|---|
| 56 |
ctab.pivot = lambda x: x.date.year |
|---|
| 57 |
self.assertEqual(ctab.results(), |
|---|
| 58 |
({(0,): {2001: 1, 2002: 1, 2003: 1, }, |
|---|
| 59 |
(1,): {2001: 1, 2002: 1, 2003: 1, 2004: 1}, |
|---|
| 60 |
(2,): {2001: 1, 2002: 1, 2003: 1, 2004: 1}, |
|---|
| 61 |
(3,): {2001: 1, 2002: 1, 2003: 1, 2004: 1}, |
|---|
| 62 |
(4,): {2001: 1, 2002: 1, 2003: 1, 2004: 2}}, |
|---|
| 63 |
[2001, 2002, 2003, 2004]) |
|---|
| 64 |
) |
|---|
| 65 |
|
|---|
| 66 |
|
|---|
| 67 |
def run_tests(): |
|---|
| 68 |
try: |
|---|
| 69 |
unittest.main(__name__) |
|---|
| 70 |
except SystemExit: |
|---|
| 71 |
|
|---|
| 72 |
pass |
|---|
| 73 |
|
|---|
| 74 |
if __name__ == "__main__": |
|---|
| 75 |
run_tests() |
|---|
| 76 |
|
|---|