Contact: fumanchu@aminus.org

Log in as guest/dejavu to create tickets

I think I've seen this ORM somewhere before...

root/trunk/test/test_analysis.py

Revision 95 (checked in by fumanchu, 8 years ago)

Reorganization to prepare for new test runner.

  • Property svn:eol-style set to native
Line 
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         # unittest.main normally raises SystemExit when complete.
72         pass
73
74 if __name__ == "__main__":
75     run_tests()
76
Note: See TracBrowser for help on using the browser.