From c414518063792e9e92a1bbc567bb30c52ab0685e Mon Sep 17 00:00:00 2001 From: gio-puter Date: Fri, 20 Oct 2023 16:47:32 -0700 Subject: [PATCH 1/4] Contributes to #9943 Added doctest to largest_of_very_large_numbers.py Added doctest to word_patterns.py Added doctest to onepad_cipher.py --- ciphers/onepad_cipher.py | 27 ++++++++++++++++++++++++-- maths/largest_of_very_large_numbers.py | 17 ++++++++++++++++ strings/word_patterns.py | 9 +++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/ciphers/onepad_cipher.py b/ciphers/onepad_cipher.py index 4bfe35b7180a..e13e5fc50045 100644 --- a/ciphers/onepad_cipher.py +++ b/ciphers/onepad_cipher.py @@ -4,7 +4,16 @@ class Onepad: @staticmethod def encrypt(text: str) -> tuple[list[int], list[int]]: - """Function to encrypt text using pseudo-random numbers""" + """ + Function to encrypt text using pseudo-random numbers + >>> Onepad().encrypt("") + [] [] + >>> random.seed(1) + >>> Onepad().encrypt(" ") + [6969] [69] + >>> Onepad().encrypt("Hello") + [9729, 114756, 4653, 31309, 10492] [69, 292, 33, 131, 61] + """ plain = [ord(i) for i in text] key = [] cipher = [] @@ -17,7 +26,21 @@ def encrypt(text: str) -> tuple[list[int], list[int]]: @staticmethod def decrypt(cipher: list[int], key: list[int]) -> str: - """Function to decrypt text using pseudo-random numbers.""" + """ + Function to decrypt text using pseudo-random numbers. + >>> Onepad().decrypt([], []) + + >>> Onepad().decrypt([35], []) + + >>> Onepad().decrypt([], [35]) + Traceback (most recent call last): + ... + IndexError: list index out of range + + >>> random.seed(1) + >>> Onepad().decrypt([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61]) + Hello + """ plain = [] for i in range(len(key)): p = int((cipher[i] - (key[i]) ** 2) / key[i]) diff --git a/maths/largest_of_very_large_numbers.py b/maths/largest_of_very_large_numbers.py index 7e7fea004958..51f204c27669 100644 --- a/maths/largest_of_very_large_numbers.py +++ b/maths/largest_of_very_large_numbers.py @@ -4,6 +4,23 @@ def res(x, y): + """ + Reduces large number to a more manageable number + >>> res(5, 7) + 4.892790030352132 + + >>> res(0, 5) + 0 + + >>> res(3, 0) + 1 + + >>> res(-1, 5) + Traceback (most recent call last): + ... + ValueError: math domain error + + """ if 0 not in (x, y): # We use the relation x^y = y*log10(x), where 10 is the base. return y * math.log10(x) diff --git a/strings/word_patterns.py b/strings/word_patterns.py index d12d267e7b35..763583b381e4 100644 --- a/strings/word_patterns.py +++ b/strings/word_patterns.py @@ -1,5 +1,14 @@ def get_word_pattern(word: str) -> str: """ + Returns numerical pattern of character appearances in given word + >>> get_word_pattern() + Traceback (most recent call last): + ... + TypeError: get_word_pattern() missing 1 required positional argument: 'word' + >>> get_word_pattern("") + + >>> get_word_pattern(" ") + 0 >>> get_word_pattern("pattern") '0.1.2.2.3.4.5' >>> get_word_pattern("word pattern") From 41fffa1f7431c9b9cbb3244ef0034841256067c7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 20 Oct 2023 23:53:45 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/largest_of_very_large_numbers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maths/largest_of_very_large_numbers.py b/maths/largest_of_very_large_numbers.py index 51f204c27669..1da19cbbaf46 100644 --- a/maths/largest_of_very_large_numbers.py +++ b/maths/largest_of_very_large_numbers.py @@ -9,9 +9,9 @@ def res(x, y): >>> res(5, 7) 4.892790030352132 - >>> res(0, 5) + >>> res(0, 5) 0 - + >>> res(3, 0) 1 From ff894a8e18f3b8c9a50e511b8091d5e5b3edb128 Mon Sep 17 00:00:00 2001 From: gio-puter Date: Fri, 20 Oct 2023 17:08:38 -0700 Subject: [PATCH 3/4] Contributes to #9943 Added doctest to maths/largest_of_very_large_numbers.py Added doctest to strings/word_patterns.py Added doctest to ciphers/onepad_cipher.py --- ciphers/onepad_cipher.py | 13 +++++++------ maths/largest_of_very_large_numbers.py | 4 ++-- strings/word_patterns.py | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/ciphers/onepad_cipher.py b/ciphers/onepad_cipher.py index e13e5fc50045..e7bacee6cc69 100644 --- a/ciphers/onepad_cipher.py +++ b/ciphers/onepad_cipher.py @@ -7,12 +7,13 @@ def encrypt(text: str) -> tuple[list[int], list[int]]: """ Function to encrypt text using pseudo-random numbers >>> Onepad().encrypt("") - [] [] + ([], []) >>> random.seed(1) >>> Onepad().encrypt(" ") - [6969] [69] + ([6969], [69]) + >>> random.seed(1) >>> Onepad().encrypt("Hello") - [9729, 114756, 4653, 31309, 10492] [69, 292, 33, 131, 61] + ([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61]) """ plain = [ord(i) for i in text] key = [] @@ -29,9 +30,9 @@ def decrypt(cipher: list[int], key: list[int]) -> str: """ Function to decrypt text using pseudo-random numbers. >>> Onepad().decrypt([], []) - + '' >>> Onepad().decrypt([35], []) - + '' >>> Onepad().decrypt([], [35]) Traceback (most recent call last): ... @@ -39,7 +40,7 @@ def decrypt(cipher: list[int], key: list[int]) -> str: >>> random.seed(1) >>> Onepad().decrypt([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61]) - Hello + 'Hello' """ plain = [] for i in range(len(key)): diff --git a/maths/largest_of_very_large_numbers.py b/maths/largest_of_very_large_numbers.py index 51f204c27669..1da19cbbaf46 100644 --- a/maths/largest_of_very_large_numbers.py +++ b/maths/largest_of_very_large_numbers.py @@ -9,9 +9,9 @@ def res(x, y): >>> res(5, 7) 4.892790030352132 - >>> res(0, 5) + >>> res(0, 5) 0 - + >>> res(3, 0) 1 diff --git a/strings/word_patterns.py b/strings/word_patterns.py index 763583b381e4..1af40bcb8246 100644 --- a/strings/word_patterns.py +++ b/strings/word_patterns.py @@ -6,9 +6,9 @@ def get_word_pattern(word: str) -> str: ... TypeError: get_word_pattern() missing 1 required positional argument: 'word' >>> get_word_pattern("") - + '' >>> get_word_pattern(" ") - 0 + '0' >>> get_word_pattern("pattern") '0.1.2.2.3.4.5' >>> get_word_pattern("word pattern") From 16d377e109e53cf114cce485b4cfb137a565789c Mon Sep 17 00:00:00 2001 From: gio-puter Date: Sat, 21 Oct 2023 18:37:15 -0700 Subject: [PATCH 4/4] Add tests without modifying code #10740 Added test to maths/largest_of_very_large_numbers Added test to strings/word_patterns.py Added test to ciphers/onepad_cipher.py --- ciphers/onepad_cipher.py | 11 ++++++++++- maths/largest_of_very_large_numbers.py | 4 ---- strings/word_patterns.py | 20 ++++++++++++++++---- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/ciphers/onepad_cipher.py b/ciphers/onepad_cipher.py index e7bacee6cc69..c4fb22e14a06 100644 --- a/ciphers/onepad_cipher.py +++ b/ciphers/onepad_cipher.py @@ -8,12 +8,22 @@ def encrypt(text: str) -> tuple[list[int], list[int]]: Function to encrypt text using pseudo-random numbers >>> Onepad().encrypt("") ([], []) + >>> Onepad().encrypt([]) + ([], []) >>> random.seed(1) >>> Onepad().encrypt(" ") ([6969], [69]) >>> random.seed(1) >>> Onepad().encrypt("Hello") ([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61]) + >>> Onepad().encrypt(1) + Traceback (most recent call last): + ... + TypeError: 'int' object is not iterable + >>> Onepad().encrypt(1.1) + Traceback (most recent call last): + ... + TypeError: 'float' object is not iterable """ plain = [ord(i) for i in text] key = [] @@ -37,7 +47,6 @@ def decrypt(cipher: list[int], key: list[int]) -> str: Traceback (most recent call last): ... IndexError: list index out of range - >>> random.seed(1) >>> Onepad().decrypt([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61]) 'Hello' diff --git a/maths/largest_of_very_large_numbers.py b/maths/largest_of_very_large_numbers.py index 1da19cbbaf46..eb5c121fd262 100644 --- a/maths/largest_of_very_large_numbers.py +++ b/maths/largest_of_very_large_numbers.py @@ -8,18 +8,14 @@ def res(x, y): Reduces large number to a more manageable number >>> res(5, 7) 4.892790030352132 - >>> res(0, 5) 0 - >>> res(3, 0) 1 - >>> res(-1, 5) Traceback (most recent call last): ... ValueError: math domain error - """ if 0 not in (x, y): # We use the relation x^y = y*log10(x), where 10 is the base. diff --git a/strings/word_patterns.py b/strings/word_patterns.py index 1af40bcb8246..ed603e9fefeb 100644 --- a/strings/word_patterns.py +++ b/strings/word_patterns.py @@ -1,10 +1,6 @@ def get_word_pattern(word: str) -> str: """ Returns numerical pattern of character appearances in given word - >>> get_word_pattern() - Traceback (most recent call last): - ... - TypeError: get_word_pattern() missing 1 required positional argument: 'word' >>> get_word_pattern("") '' >>> get_word_pattern(" ") @@ -15,6 +11,22 @@ def get_word_pattern(word: str) -> str: '0.1.2.3.4.5.6.7.7.8.2.9' >>> get_word_pattern("get word pattern") '0.1.2.3.4.5.6.7.3.8.9.2.2.1.6.10' + >>> get_word_pattern() + Traceback (most recent call last): + ... + TypeError: get_word_pattern() missing 1 required positional argument: 'word' + >>> get_word_pattern(1) + Traceback (most recent call last): + ... + AttributeError: 'int' object has no attribute 'upper' + >>> get_word_pattern(1.1) + Traceback (most recent call last): + ... + AttributeError: 'float' object has no attribute 'upper' + >>> get_word_pattern([]) + Traceback (most recent call last): + ... + AttributeError: 'list' object has no attribute 'upper' """ word = word.upper() next_num = 0