From 3d889608765044fb6c870a51a7a6e6d692865706 Mon Sep 17 00:00:00 2001 From: Valentin BOUVAREL Date: Thu, 17 Nov 2022 10:42:02 +0100 Subject: [PATCH] Randomize list over iterator without consuming --- gestform.py | 7 +++++++ tests/tests_gestform.py | 13 ++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gestform.py b/gestform.py index 7eff1df..6b22e39 100644 --- a/gestform.py +++ b/gestform.py @@ -2,6 +2,7 @@ # -*- coding: utf-8 -*- from typing import List +from random import shuffle MIN = -1000 @@ -10,3 +11,9 @@ MAX = 1000 def generate_numbers_list(mini: int, maxi: int) -> List[int]: return list(range(mini, maxi+1)) + +def randomise_with_iterator(list_from: List[int]) -> int: + randomized = list_from.copy() + shuffle(randomized) + while randomized: + yield randomized.pop() diff --git a/tests/tests_gestform.py b/tests/tests_gestform.py index f559c81..73e3439 100644 --- a/tests/tests_gestform.py +++ b/tests/tests_gestform.py @@ -1,6 +1,9 @@ from unittest import TestCase -from gestform import generate_numbers_list, MIN, MAX +from gestform import ( + generate_numbers_list, MIN, MAX, + randomise_with_iterator, +) class RandomListNumber(TestCase): @@ -15,3 +18,11 @@ class RandomListNumber(TestCase): self.assertNotIn(MIN-1, self.generated) self.assertNotIn(MAX+1, self.generated) + def test_randomised_iterator_over_list(self): + count: int = 0 + for n in randomise_with_iterator(self.generated): + with self.subTest(n): + self.assertGreaterEqual(n , MIN) + self.assertLessEqual(n, MAX) + count += 1 + self.assertEqual(len(self.generated), count)