]> asedeno.scripts.mit.edu Git - bluechips.git/blob - bluechips/tests/splits/test_random.py
brought up to date with latest sqlalchemy conventions
[bluechips.git] / bluechips / tests / splits / test_random.py
1 from unittest import TestCase
2 from bluechips.tests import *
3 from bluechips import model
4 from bluechips.model import meta
5 from webhelpers.number import standard_deviation as std_dev
6
7 class TestSplitRandom(TestCase):
8     @classmethod
9     def setUpClass(cls):
10         createUsers()
11     
12     @classmethod
13     def tearDownClass(cls):
14         deleteUsers()
15     
16     def setUp(self):
17         createExpenditures()
18     
19     def tearDown(self):
20         deleteExpenditures()
21     
22     def test_splitTotal(self):
23         for e in meta.Session.query(model.Expenditure):
24             self.assertEqual(sum(s.share for s in e.splits), e.amount)
25     
26     def test_splitDistribution(self):
27         user_count = meta.Session.query(model.User).count()
28         for e in meta.Session.query(model.Expenditure):
29             even_total = (e.amount / user_count) * user_count
30             difference = abs(even_total - e.amount)
31             self.assert_(std_dev(list(int(s.share) for s in e.splits)) <= difference, \
32                 "Expenditure doesn't appear to be evenly distributed")