From addba9ca0a001971d64eae4b90a9f8f3074efe99 Mon Sep 17 00:00:00 2001 From: Cacahuete Date: Sat, 19 Dec 2020 23:04:37 +0100 Subject: [PATCH] tail: my solutions :) --- tail/tail.py | 13 +++++++++++++ tail/test_tail.py | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 tail/tail.py create mode 100644 tail/test_tail.py diff --git a/tail/tail.py b/tail/tail.py new file mode 100644 index 0000000..98696f7 --- /dev/null +++ b/tail/tail.py @@ -0,0 +1,13 @@ +def tail_v1(sequence, count): + if count <= 0: + return list() + return list(sequence[-count:]) + + +def tail_v2(sequence, count): + if count <= 0: + return [] + return list(list(sequence)[-count:]) + + +tail = tail_v2 diff --git a/tail/test_tail.py b/tail/test_tail.py new file mode 100644 index 0000000..560a1cc --- /dev/null +++ b/tail/test_tail.py @@ -0,0 +1,48 @@ +import unittest + + +from tail import tail + + +class TailTests(unittest.TestCase): + + """Tests for tail.""" + + def test_zero(self): + self.assertEqual(tail([1, 2], 0), []) + + def test_one(self): + self.assertEqual(tail([1, 2], 1), [2]) + + def test_two(self): + self.assertEqual(tail([1, 2], 2), [1, 2]) + + def test_n_larger_than_iterable_length(self): + nums = [1, 2, 3, 4] + self.assertEqual(tail(nums, 5), [1, 2, 3, 4]) + self.assertEqual(tail([], 10), []) + + def test_string(self): + self.assertEqual(tail("hello", 2), ["l", "o"]) + + def test_tuple(self): + self.assertEqual(tail((1, 2, 3), 3), [1, 2, 3]) + + # To test the Bonus part of this exercise, comment out the following line + def test_negative_n(self): + nums = [1, 2, 3, 4] + self.assertEqual(tail(nums, -1), []) + self.assertEqual(tail((), -9), []) + + # To test the Bonus part of this exercise, comment out the following line + def test_iterator(self): + nums = (n ** 2 for n in [1, 2, 3, 4]) + self.assertEqual(tail(nums, -1), []) # Don't loop for negative n + self.assertEqual(tail(nums, 0), []) # Don't loop for n=0 + self.assertEqual(tail(nums, 2), [9, 16]) # Consuming the generator + self.assertEqual(list(nums), []) # The nums generator is now empty + self.assertEqual(tail(nums, 1), []) # n=1 with a now empty generator + + +if __name__ == "__main__": + unittest.main(verbosity=2)