]> asedeno.scripts.mit.edu Git - bluechips.git/blob - bluechips/tests/lib/test_totals.py
added some tests for settle()
[bluechips.git] / bluechips / tests / lib / test_totals.py
1 from unittest import TestCase
2 from bluechips.lib import totals
3
4 class TestReorderingSettle(TestCase):
5     def test_transfer_minimized(self):
6         """
7         Test that the number of transfers is actually minimized.
8
9         Taken from a real-world situation, we discovered that failing
10         to re-order the debt lists after every transfer could lead to
11         extra, unnecessary transfers.
12         """
13         self.assertEqual(len(totals.settle({'Alice': 100,
14                                             'Bob': -85,
15                                             'Charlie': 35,
16                                             'Dave': -35,
17                                             'Eve': -15})),
18                          3)
19
20     def test_settle_even(self):
21         transfers = totals.settle({'Alice': 0,
22                                    'Bob': 0,
23                                    'Charlie': 0})
24         assert transfers == []
25     
26     def test_settle_positive(self):
27         transfers = totals.settle({'Alice': -50,
28                                    'Bob': 100,
29                                    'Charlie': -50})
30         assert transfers == [('Bob', 'Charlie', 50),
31                              ('Bob', 'Alice', 50)]
32
33     def test_settle_uneven_positive(self):
34         try:
35             transfers = totals.settle({'Alice': -50,
36                                        'Bob': -50,
37                                        'Charlie': -50})
38         except totals.DirtyBooks:
39             pass
40
41     def test_settle_uneven_negative(self):
42         try:
43             transfers = totals.settle({'Alice': 50,
44                                        'Bob': 50,
45                                        'Charlie': 50})
46         except totals.DirtyBooks:
47             pass