settle_list.append((owes['who'], owed['who'], val))
if len(owes_list) > 0:
- raise DirtyBooks, ("People still owe money", owes_list) #pragma:nocover
+ raise DirtyBooks, ("People still owe money", owes_list)
if len(owed_list) > 0:
- raise DirtyBooks, ("People are still owed money", owed_list) #pragma:nocover
+ raise DirtyBooks, ("People are still owed money", owed_list)
return settle_list
--- /dev/null
+from unittest import TestCase
+from bluechips.lib import totals
+
+class TestReorderingSettle(TestCase):
+ def test_transfer_minimized(self):
+ """
+ Test that the number of transfers is actually minimized.
+
+ Taken from a real-world situation, we discovered that failing
+ to re-order the debt lists after every transfer could lead to
+ extra, unnecessary transfers.
+ """
+ self.assertEqual(len(totals.settle({'Alice': 100,
+ 'Bob': -85,
+ 'Charlie': 35,
+ 'Dave': -35,
+ 'Eve': -15})),
+ 3)
+
+ def test_settle_even(self):
+ transfers = totals.settle({'Alice': 0,
+ 'Bob': 0,
+ 'Charlie': 0})
+ assert transfers == []
+
+ def test_settle_positive(self):
+ transfers = totals.settle({'Alice': -50,
+ 'Bob': 100,
+ 'Charlie': -50})
+ assert transfers == [('Bob', 'Charlie', 50),
+ ('Bob', 'Alice', 50)]
+
+ def test_settle_uneven_positive(self):
+ try:
+ transfers = totals.settle({'Alice': -50,
+ 'Bob': -50,
+ 'Charlie': -50})
+ except totals.DirtyBooks:
+ pass
+
+ def test_settle_uneven_negative(self):
+ try:
+ transfers = totals.settle({'Alice': 50,
+ 'Bob': 50,
+ 'Charlie': 50})
+ except totals.DirtyBooks:
+ pass
+++ /dev/null
-from unittest import TestCase
-from bluechips.lib import totals
-
-class TestReorderingSettle(TestCase):
- def test(self):
- """
- Test that the number of transfers is actually minimized.
-
- Taken from a real-world situation, we discovered that failing
- to re-order the debt lists after every transfer could lead to
- extra, unnecessary transfers.
- """
- self.assertEqual(len(totals.settle({'Alice': 100,
- 'Bob': -85,
- 'Charlie': 35,
- 'Dave': -35,
- 'Eve': -15})),
- 3)