From ec938aee7b05afc3995a2e0469315fcf8e8ac156 Mon Sep 17 00:00:00 2001 From: Maurice Makaay Date: Sat, 25 Oct 2014 23:28:24 +0200 Subject: [PATCH 1/3] sum-of-multiples: add extra unit tests --- sum-of-multiples/example.py | 4 ++-- sum-of-multiples/sum_of_multiples_test.py | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/sum-of-multiples/example.py b/sum-of-multiples/example.py index cd993c6407..2fc6adc546 100644 --- a/sum-of-multiples/example.py +++ b/sum-of-multiples/example.py @@ -1,7 +1,7 @@ class SumOfMultiples(object): def __init__(self, *args): - self.numbers = args if args else [3, 5] + self.numbers = args or (3, 5) def to(self, limit): return sum(n @@ -9,5 +9,5 @@ def to(self, limit): if self.is_multiple(n)) def is_multiple(self, m): - return any(m % n == 0 + return any(n != 0 and m % n == 0 for n in self.numbers) diff --git a/sum-of-multiples/sum_of_multiples_test.py b/sum-of-multiples/sum_of_multiples_test.py index e507f5e721..9d6116dbbb 100644 --- a/sum-of-multiples/sum_of_multiples_test.py +++ b/sum-of-multiples/sum_of_multiples_test.py @@ -7,7 +7,7 @@ class SumOfMultiplesTest(unittest.TestCase): def test_sum_to_1(self): self.assertEqual(0, SumOfMultiples().to(1)) - def test_sum_to_3(self): + def test_sum_to_4(self): self.assertEqual(3, SumOfMultiples().to(4)) def test_sum_to_10(self): @@ -22,6 +22,15 @@ def test_configurable_7_13_17_to_20(self): def test_configurable_43_47_to_10000(self): self.assertEqual(2203160, SumOfMultiples(43, 47).to(10000)) + def test_configurable_20_24_25_to_800(self): + self.assertEqual(36144, SumOfMultiples(20, 24, 25).to(800)) + + def test_configurable_0_to_10(self): + self.assertEqual(0, SumOfMultiples(0).to(10)) + + def test_configurable_0_1_to_10(self): + self.assertEqual(45, SumOfMultiples(0, 1).to(10)) + if __name__ == '__main__': unittest.main() From 558ed4c1f1bd7b49f1cbc6da8185fa9625b8d4d7 Mon Sep 17 00:00:00 2001 From: Dog Date: Sat, 8 Nov 2014 14:06:05 -0800 Subject: [PATCH 2/3] sum_of_multiples: Implemented issue #141 --- sum-of-multiples/example.py | 22 +++++++++------------- sum-of-multiples/sum_of_multiples_test.py | 23 ++++++++++------------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/sum-of-multiples/example.py b/sum-of-multiples/example.py index 2fc6adc546..b5ab33145b 100644 --- a/sum-of-multiples/example.py +++ b/sum-of-multiples/example.py @@ -1,13 +1,9 @@ -class SumOfMultiples(object): - - def __init__(self, *args): - self.numbers = args or (3, 5) - - def to(self, limit): - return sum(n - for n in range(limit) - if self.is_multiple(n)) - - def is_multiple(self, m): - return any(n != 0 and m % n == 0 - for n in self.numbers) +def sum_of_multiples(limit, multiples=None): + if multiples is None: + multiples = [3, 5] + elif multiples[0] == 0: + # multiples of 0 don't change the sum + multiples = multiples[1:] + return sum(value for value in range(limit) + if any(value % multiple == 0 + for multiple in multiples)) diff --git a/sum-of-multiples/sum_of_multiples_test.py b/sum-of-multiples/sum_of_multiples_test.py index 9d6116dbbb..742d21b04c 100644 --- a/sum-of-multiples/sum_of_multiples_test.py +++ b/sum-of-multiples/sum_of_multiples_test.py @@ -1,35 +1,32 @@ import unittest -from sum_of_multiples import SumOfMultiples +from sum_of_multiples import sum_of_multiples class SumOfMultiplesTest(unittest.TestCase): def test_sum_to_1(self): - self.assertEqual(0, SumOfMultiples().to(1)) + self.assertEqual(0, sum_of_multiples(1)) - def test_sum_to_4(self): - self.assertEqual(3, SumOfMultiples().to(4)) + def test_sum_to_3(self): + self.assertEqual(3, sum_of_multiples(4)) def test_sum_to_10(self): - self.assertEqual(23, SumOfMultiples().to(10)) + self.assertEqual(23, sum_of_multiples(10)) def test_sum_to_1000(self): - self.assertEqual(233168, SumOfMultiples().to(1000)) + self.assertEqual(233168, sum_of_multiples(1000)) def test_configurable_7_13_17_to_20(self): - self.assertEqual(51, SumOfMultiples(7, 13, 17).to(20)) + self.assertEqual(51, sum_of_multiples(20, [7, 13, 17])) def test_configurable_43_47_to_10000(self): - self.assertEqual(2203160, SumOfMultiples(43, 47).to(10000)) - - def test_configurable_20_24_25_to_800(self): - self.assertEqual(36144, SumOfMultiples(20, 24, 25).to(800)) + self.assertEqual(2203160, sum_of_multiples(10000, [43, 47])) def test_configurable_0_to_10(self): - self.assertEqual(0, SumOfMultiples(0).to(10)) + self.assertEqual(0, sum_of_multiples(10, [0])) def test_configurable_0_1_to_10(self): - self.assertEqual(45, SumOfMultiples(0, 1).to(10)) + self.assertEqual(45, sum_of_multiples(10, [0, 1])) if __name__ == '__main__': From 43e30cdb021da5495a319e067e8fe3d465989694 Mon Sep 17 00:00:00 2001 From: Simon Jakobi Date: Wed, 19 Nov 2014 13:11:55 +0100 Subject: [PATCH 3/3] sum-of-multiples: Add short spec to test suite --- sum-of-multiples/sum_of_multiples_test.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sum-of-multiples/sum_of_multiples_test.py b/sum-of-multiples/sum_of_multiples_test.py index 742d21b04c..ebe124ec7a 100644 --- a/sum-of-multiples/sum_of_multiples_test.py +++ b/sum-of-multiples/sum_of_multiples_test.py @@ -1,3 +1,13 @@ +""" +You can make the following assumptions about the inputs to the +'sum_of_multiples' function: + * All input numbers are non-negative 'int's, i.e. natural numbers including + zero. + * If a list of factors is given, its elements are uniqe and sorted in + ascending order. + * If the 'factors' argument is missing, use the list [3, 5] instead. +""" + import unittest from sum_of_multiples import sum_of_multiples