def testThirdsUneven(self): d = { 1: Decimal("10.00"), 2: Decimal("10.00"), 3: Decimal("3.00"), } s = Discount.apply_even_split(d, Decimal("10.00")) self.assertEqual(s[1], Decimal("3.51")) self.assertEqual(s[2], Decimal("3.50")) self.assertEqual(s[3], Decimal("3.00"))
def testLargeThirds(self): d = { 1 : Decimal("100.00"), 2 : Decimal("100.00"), 3 : Decimal("100.00"), } s = Discount.apply_even_split(d, Decimal("100.00")) self.assertEqual(s[1], Decimal("33.34")) self.assertEqual(s[2], Decimal("33.33")) self.assertEqual(s[3], Decimal("33.33"))
def testLargeThirds(self): d = { 1: Decimal("100.00"), 2: Decimal("100.00"), 3: Decimal("100.00"), } s = Discount.apply_even_split(d, Decimal("100.00")) self.assertEqual(s[1], Decimal("33.34")) self.assertEqual(s[2], Decimal("33.33")) self.assertEqual(s[3], Decimal("33.33"))
def testThirdsUneven(self): d = { 1 : Decimal("10.00"), 2 : Decimal("10.00"), 3 : Decimal("3.00"), } s = Discount.apply_even_split(d, Decimal("10.00")) self.assertEqual(s[1], Decimal("3.50")) self.assertEqual(s[2], Decimal("3.50")) self.assertEqual(s[3], Decimal("3.00"))
def testEvenSplitOneTooSmall(self): """Test when one of the items is maxed, but others are OK""" d = { 1: Decimal("10.00"), 2: Decimal("5.00"), 3: Decimal("10.00"), 4: Decimal("10.00"), } s = Discount.apply_even_split(d, Decimal("23.00")) self.assertEqual(s[1], Decimal("6.00")) self.assertEqual(s[2], Decimal("5.00")) self.assertEqual(s[3], Decimal("6.00")) self.assertEqual(s[4], Decimal("6.00"))
def testEvenSplitEqual(self): """Test when amount is exactly equal""" d = { 1: Decimal("10.00"), 2: Decimal("10.00"), 3: Decimal("10.00"), 4: Decimal("10.00"), } s = Discount.apply_even_split(d, Decimal("40.00")) self.assertEqual(s[1], Decimal("10.00")) self.assertEqual(s[2], Decimal("10.00")) self.assertEqual(s[3], Decimal("10.00")) self.assertEqual(s[4], Decimal("10.00"))
def testEvenSplitTooMuch(self): """Test when amount is greater than total""" d = { 1: Decimal("10.00"), 2: Decimal("10.00"), 3: Decimal("10.00"), 4: Decimal("10.00"), } s = Discount.apply_even_split(d, Decimal("50.00")) self.assertEqual(s[1], Decimal("10.00")) self.assertEqual(s[2], Decimal("10.00")) self.assertEqual(s[3], Decimal("10.00")) self.assertEqual(s[4], Decimal("10.00"))
def testEvenSplit1(self): """Simple split test""" d = { 1: Decimal("10.00"), 2: Decimal("10.00"), 3: Decimal("10.00"), 4: Decimal("10.00"), } s = Discount.apply_even_split(d, Decimal("16.00")) self.assertEqual(s[1], Decimal("4.00")) self.assertEqual(s[2], Decimal("4.00")) self.assertEqual(s[3], Decimal("4.00")) self.assertEqual(s[4], Decimal("4.00"))
def assert_apply_even_split(self, input_str, amount_str, expect_str): """ Method which simplifies many similar tests to be written more compact on one line Example: the following line does the same as the method ``testEvenSplit1``. > > > self.assert_apply_even_split('10 10 10 10', '16', '4.00 4.00 4.00 4.00') """ ddd = input_str.split() dd = map(lambda x: Decimal(str(x)).quantize(Decimal("0.01")), ddd) d = dict(enumerate(dd)) amount = Decimal(str(amount_str)).quantize(Decimal("0.01")) s = Discount.apply_even_split(d, amount) self.assertEqual(s.keys(), d.keys()) output_str = ' '.join(map(lambda (k, v): str(v), sorted(s.items()))) self.assertEqual(output_str, expect_str)
def testEvenSplitOneTooSmall(self): """Test when one of the items is maxed, but others are OK""" d = { 1 : Decimal("10.00"), 2 : Decimal("5.00"), 3 : Decimal("10.00"), 4 : Decimal("10.00"), } s = Discount.apply_even_split(d, Decimal("23.00")) self.assertEqual(s[1], Decimal("6.00")) self.assertEqual(s[2], Decimal("5.00")) self.assertEqual(s[3], Decimal("6.00")) self.assertEqual(s[4], Decimal("6.00"))
def testEvenSplitEqual(self): """Test when amount is exactly equal""" d = { 1 : Decimal("10.00"), 2 : Decimal("10.00"), 3 : Decimal("10.00"), 4 : Decimal("10.00"), } s = Discount.apply_even_split(d, Decimal("40.00")) self.assertEqual(s[1], Decimal("10.00")) self.assertEqual(s[2], Decimal("10.00")) self.assertEqual(s[3], Decimal("10.00")) self.assertEqual(s[4], Decimal("10.00"))
def testEvenSplitTooMuch(self): """Test when amount is greater than total""" d = { 1 : Decimal("10.00"), 2 : Decimal("10.00"), 3 : Decimal("10.00"), 4 : Decimal("10.00"), } s = Discount.apply_even_split(d, Decimal("50.00")) self.assertEqual(s[1], Decimal("10.00")) self.assertEqual(s[2], Decimal("10.00")) self.assertEqual(s[3], Decimal("10.00")) self.assertEqual(s[4], Decimal("10.00"))
def testEvenSplit1(self): """Simple split test""" d = { 1 : Decimal("10.00"), 2 : Decimal("10.00"), 3 : Decimal("10.00"), 4 : Decimal("10.00"), } s = Discount.apply_even_split(d, Decimal("16.00")) self.assertEqual(s[1], Decimal("4.00")) self.assertEqual(s[2], Decimal("4.00")) self.assertEqual(s[3], Decimal("4.00")) self.assertEqual(s[4], Decimal("4.00"))