Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions testing_hw/issue-01/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# issue-01
При запуске в PyСharm все тесты проходят, но не выводится отчет.

Для вывода отчета о пройденных тестах переходим в директории с файлом morse.py и в терминале выполнияем команду:

```python -m doctest -o NORMALIZE_WHITESPACE -v morse.py```

(Добавляем ```-o NORMALIZE_WHITESPACE```, так как этот флаг позволяет не различать последовательности пробелов, что необходимо для одного из тестов)
55 changes: 55 additions & 0 deletions testing_hw/issue-01/morse.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
"""Encoding text according to Morse code table"""

import doctest

LETTER_TO_MORSE = {'A': '.-', 'B': '-...',
'C': '-.-.', 'D': '-..', 'E': '.',
'F': '..-.', 'G': '--.', 'H': '....',
'I': '..', 'J': '.---', 'K': '-.-',
'L': '.-..', 'M': '--', 'N': '-.',
'O': '---', 'P': '.--.', 'Q': '--.-',
'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--',
'X': '-..-', 'Y': '-.--', 'Z': '--..',
'1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....',
'7': '--...', '8': '---..', '9': '----.',
'0': '-----', ', ': '--..--', '.': '.-.-.-',
'?': '..--..', '/': '-..-.', '-': '-....-',
'(': '-.--.', ')': '-.--.-'}


def encode(message: str) -> str:
"""
Кодирует строку в соответсвии с таблицей азбуки Морзе

>>> encode('SOS') # doctest: +NORMALIZE_WHITESPACE
'... --- ...'
>>> encode('SOS')
'... --- ...'
>>> encode(".)")
'.-.-.- -.--.-'
>>> encode('')
''
>>> encode(911)
Traceback (most recent call last):
...
TypeError: 'int' object is not iterable
>>> encode('sos')
Traceback (most recent call last):
...
KeyError: 's'
>>> encode(';)')
Traceback (most recent call last):
...
KeyError: ';'
"""
encoded_signs = [
LETTER_TO_MORSE[letter] for letter in message
]

return ' '.join(encoded_signs)


if __name__ == "__main__":
doctest.testmod()
49 changes: 49 additions & 0 deletions testing_hw/issue-01/result.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
PS D:\python> python -m doctest -o NORMALIZE_WHITESPACE -v morse.py
Trying:
encode('SOS') # doctest: +NORMALIZE_WHITESPACE
Expecting:
'... --- ...'
ok
Trying:
encode('SOS')
Expecting:
'... --- ...'
ok
Trying:
encode(".)")
Expecting:
'.-.-.- -.--.-'
ok
Trying:
encode('')
Expecting:
''
ok
Trying:
encode(911)
Expecting:
Traceback (most recent call last):
...
TypeError: 'int' object is not iterable
ok
Trying:
encode('sos')
Expecting:
Traceback (most recent call last):
...
KeyError: 's'
ok
Trying:
encode(';)')
Expecting:
Traceback (most recent call last):
...
KeyError: ';'
ok
1 items had no tests:
morse
1 items passed all tests:
7 tests in morse.encode
7 tests in 2 items.
7 passed and 0 failed.
Test passed.
6 changes: 6 additions & 0 deletions testing_hw/issue-02/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# issue-02
Для начала нужно установить пакет **pytest** с помощью команды: ```pip install -U pytest```

Затем ```import pytest``` в рабочий файл.

Для вывода отчета о пройденных тестах в терминал и выполнияем команду: ```python -m pytest -v morse_2.py```
48 changes: 48 additions & 0 deletions testing_hw/issue-02/morse_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
"""Decoding text according to Morse code table"""

import pytest


LETTER_TO_MORSE = {'A': '.-', 'B': '-...',
'C': '-.-.', 'D': '-..', 'E': '.',
'F': '..-.', 'G': '--.', 'H': '....',
'I': '..', 'J': '.---', 'K': '-.-',
'L': '.-..', 'M': '--', 'N': '-.',
'O': '---', 'P': '.--.', 'Q': '--.-',
'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--',
'X': '-..-', 'Y': '-.--', 'Z': '--..',
'1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....',
'7': '--...', '8': '---..', '9': '----.',
'0': '-----', ', ': '--..--', '.': '.-.-.-',
'?': '..--..', '/': '-..-.', '-': '-....-',
'(': '-.--.', ')': '-.--.-'}

MORSE_TO_LETTER = {
morse: symbol for symbol, morse in LETTER_TO_MORSE
}


def decode(morse_message: str) -> str:
"""
Декодирует строку из азбуки Морзе в английский
"""
decoded_letters = [
MORSE_TO_LETTER[letter] for letter in morse_message.split()
]

return ''.join(decoded_letters)


@pytest.mark.parametrize(
"source_string,result",
[
('SOS', '... --- ...'),
('', ''),
('.)', '.-.-.- -.--.-'),
pytest.param(123, '', marks=pytest.mark.xfail),
],
)
def test_decode(source_string, result):
assert decode(source_string) == result
13 changes: 13 additions & 0 deletions testing_hw/issue-02/result_2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
PS D:\python> python -m pytest -v morse_2.py
================================================================= test session starts =================================================================
platform win32 -- Python 3.10.7, pytest-7.4.3, pluggy-1.3.0 -- D:\python\python.exe
cachedir: .pytest_cache
rootdir: D:\python
collected 4 items

morse.py::test_encode[SOS-... --- ...] PASSED [ 25%]
morse.py::test_encode[-] PASSED [ 50%]
morse.py::test_encode[.)-.-.-.- -.--.-] PASSED [ 75%]
morse.py::test_encode[123-] XFAIL [100%]

============================================================ 3 passed, 1 xfailed in 0.09s =============================================================
5 changes: 5 additions & 0 deletions testing_hw/issue-03/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# issue-03

Для начала нужно испортировать пакет **unittest** с помощью команды: ```import unittest```

Для вывода отчета о пройденных тестах в терминале выполнияем команду: ```python -m unittest -v morse.TestOneHotEncoder```
69 changes: 69 additions & 0 deletions testing_hw/issue-03/onehotencoding.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"""
Encoding a value into a binary representation
based on the ordinal number of the first element encountered
"""
from typing import List, Tuple
import unittest


def fit_transform(*args: str) -> List[Tuple[str, List[int]]]:
"""
fit_transform(iterable)
fit_transform(arg1, arg2, *args)
"""
if len(args) == 0:
raise TypeError('expected at least 1 arguments, got 0')

categories = args if isinstance(args[0], str) else list(args[0])
uniq_categories = set(categories)
bin_format = f'{{0:0{len(uniq_categories)}b}}'

seen_categories = dict()
transformed_rows = []

for cat in categories:
bin_view_cat = (int(b) for b in bin_format.format(1 << len(seen_categories)))
seen_categories.setdefault(cat, list(bin_view_cat))
transformed_rows.append((cat, seen_categories[cat]))

return transformed_rows


class TestOneHotEncoder(unittest.TestCase):
def test_symbols(self):
"""test transformation from list of strings"""
actual = ['.', ',', '.']
expected = [('.', [0, 1]), (',', [1, 0]), ('.', [0, 1])]
self.assertEqual(fit_transform(actual), expected)

def test_string(self):
"""test transformation from string out of list"""
actual = '^'
expected = [('^', [1])]
self.assertEqual(fit_transform(actual), expected)

def test_nums(self):
"""test transformation from list of digits"""
actual = [3]
expected = [(3, [1])]
self.assertEqual(fit_transform(actual), expected)

def test_num(self):
"""test transformation from digit out of list"""
actual = 3
self.assertRaises(TypeError, fit_transform, actual)

def test_none(self):
"""test transformation from none object"""
actual = None
self.assertIsNone(actual)

def test_empty(self):
"""test transformation from empty list"""
actual = []
expected = []
self.assertTrue(fit_transform(actual) == expected)


if __name__ == '__main__':
unittest.main()
12 changes: 12 additions & 0 deletions testing_hw/issue-03/result_3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
PS D:\python> python -m unittest -v morse.TestOneHotEncoder
test_empty (morse.TestOneHotEncoder) ... ok
test_none (morse.TestOneHotEncoder) ... ok
test_num (morse.TestOneHotEncoder) ... ok
test_nums (morse.TestOneHotEncoder) ... ok
test_string (morse.TestOneHotEncoder) ... ok
test_symbols (morse.TestOneHotEncoder) ... ok

----------------------------------------------------------------------
Ran 6 tests in 0.004s

OK
7 changes: 7 additions & 0 deletions testing_hw/issue-04/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# issue-04

Для начала нужно установить пакет **pytest** с помощью команды: ```pip install -U pytest```

Затем ```import pytest``` в рабочий файл.

Для вывода отчета о пройденных тестах в терминале выполнияем команду: ```python -m pytest -v onehotencoding_pytest.py```
56 changes: 56 additions & 0 deletions testing_hw/issue-04/onehotencoding_pytest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
"""
Encoding a value into a binary representation
based on the ordinal number of the first element encountered
"""
from typing import List, Tuple
import pytest


def fit_transform(*args: str) -> List[Tuple[str, List[int]]]:
"""
fit_transform(iterable)
fit_transform(arg1, arg2, *args)
"""
if len(args) == 0:
raise TypeError('expected at least 1 arguments, got 0')

categories = args if isinstance(args[0], str) else list(args[0])
uniq_categories = set(categories)
bin_format = f'{{0:0{len(uniq_categories)}b}}'

seen_categories = dict()
transformed_rows = []

for cat in categories:
bin_view_cat = (int(b) for b in bin_format.format(1 << len(seen_categories)))
seen_categories.setdefault(cat, list(bin_view_cat))
transformed_rows.append((cat, seen_categories[cat]))

return transformed_rows


def test_int_raises_type_error():
"""test transformation from digit"""
with pytest.raises(TypeError):
fit_transform(3)


def test_none_raises_type_error():
"""test transformation from none object"""
with pytest.raises(TypeError):
fit_transform(None)


def test_string():
"""test transformation from string"""
assert fit_transform('^') == [('^', [1])]


def test_empty_list():
"""test transformation from empty list"""
assert fit_transform([]) == []


def test_empty_list():
"""test transformation from list of strings"""
assert fit_transform(['.', ',', '.']) == [('.', [0, 1]), (',', [1, 0]), ('.', [0, 1])]
9 changes: 9 additions & 0 deletions testing_hw/issue-04/result_4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
PS D:\python> python -m pytest onehotencoding_pytest.py
================================================================= test session starts =================================================================
platform win32 -- Python 3.10.7, pytest-7.4.3, pluggy-1.3.0
rootdir: D:\python
collected 4 items

onehotencoding_pytest.py .... [100%]

================================================================== 4 passed in 0.09s ==================================================================
8 changes: 8 additions & 0 deletions testing_hw/issue-05/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# issue-05
Сначала устанавливаем плагин под названием *pytest-cov*, который позволит вам вызывать coverage.py от **pytest** с некоторыми дополнительными опциями pytest.
Поскольку coverage является одной из зависимостей *pytest-cov*, достаточно установить *pytest-cov* и он притянет за собой coverage.py:
```pip install pytest-cov```.

Далее хотим вывести отчет о базовом покрытии в терминале нам поможет это сделать команда: ```pytest --cov=what_is_year_now```.

Если вы снова запустите coverage.py с параметром --cov-report=html, будет создан отчет в формате HTML: ```pytest --cov=what_is_year_now --cov-report=html```.
Loading