
Aleksandr
25.03.2016
17:36:20
Нет тестов на ваши функуторы )

Andrey
25.03.2016
17:36:43
на функцию, которая объявлена внутри другой функции я тоже тестов особе не напишу

Aleksandr
25.03.2016
17:36:58
Особо?! А может? )
А можно? * )

Google

Andrey
25.03.2016
17:37:06
а вот все вместе покрыть можно запросто

Aleksandr
25.03.2016
17:37:21
Это уже интеграционный тест. Не пойдет (
Интегрировал в компрехеншн функтор )

Andrey
25.03.2016
17:37:37
а зачем отдельный тест на функцию в одну строчку?

Aleksandr
25.03.2016
17:37:50
Кааак
TDD )

Dmitry
25.03.2016
17:38:00
Да :)

Andrey
25.03.2016
17:38:16
ну давай вообще на каждую строчку кода по отдельному тесту писать

Serge
25.03.2016
17:38:31
так и надо вообще то

GNU/Docker
25.03.2016
17:38:33
разделять на чистые функции и функции с сайд эффектами.

Aleksandr
25.03.2016
17:38:37
Вообще так и надо

Serge
25.03.2016
17:38:49
то что некоторые тесты покрывают сразу несколько строк - это оптимизация трудозатрат и только

Aleksandr
25.03.2016
17:38:52
Сайд эффектов быть не должно?

Google

GNU/Docker
25.03.2016
17:39:29
чистые функции тестируются влёгкую

Andrey
25.03.2016
17:39:33
надо ли покрывать отдельным тестом строку foo.append(bar)?

GNU/Docker
25.03.2016
17:39:53
от одних и тех же аргументов один и тот же результат.

Serge
25.03.2016
17:39:56
я вот тут напугал чуваков... запустил тесты от юзера, которому никуда нельзя писать, даже в tmp, поржал:)

GNU/Docker
25.03.2016
17:40:00
очень удобно
лол

Aleksandr
25.03.2016
17:40:33

Serge
25.03.2016
17:40:45

Aleksandr
25.03.2016
17:41:06
Defensive programming to the masses!
В задницу ваш let it fail )

Serge
25.03.2016
17:41:40

Aleksandr
25.03.2016
17:41:43
Erlang-исты какие-то придумали )

Andrey
25.03.2016
17:42:03
то есть вы мне предлагаете писать тесты на базовые конструкции языка?

Aleksandr
25.03.2016
17:42:07

Andrey
25.03.2016
17:42:26
а если мы подключаем контекст, то это уже не одна строчка кода тестируется нифига

Aleksandr
25.03.2016
17:42:35
@andreyzakharevich мы веселимся )
Можем сказать, что нужно тестировать тест.

Serge
25.03.2016
17:43:15

Aleksandr
25.03.2016
17:43:18
И в итоге тестами нельзя покрыть все. Так как каждый новый тест - это новая единица для тестирования.

GNU/Docker
25.03.2016
17:43:20
Вот и проблема мутабельности

Google

GNU/Docker
25.03.2016
17:43:28
может произойти что угодно

Andrey
25.03.2016
17:43:38
достаточно написать тест, который тестирует сакм себя

GNU/Docker
25.03.2016
17:43:44
и это надо всё предугадать

Aleksandr
25.03.2016
17:43:54
Где какая мутабельность? Пиши на туплах, интах всяких. Не будет мутабельности )

Dmitry
25.03.2016
17:43:57

Serge
25.03.2016
17:44:01

Aleksandr
25.03.2016
17:44:15
def test():
assert test()
?

Serge
25.03.2016
17:44:32

Aleksandr
25.03.2016
17:44:36
?
Добавить return True
assert test() is None

GNU/Docker
25.03.2016
17:45:34
Ну, любимая ошибка же

Serge
25.03.2016
17:45:35
def test():
with pytest.raises(TestErrorDontRemember):
test()

GNU/Docker
25.03.2016
17:45:45
про исчерпание стека вызовов.

Aleksandr
25.03.2016
17:45:47
По-моему это какая-то дичь.
Плохой тест.
pytest.raises может обладать сайд эфектами

Serge
25.03.2016
17:46:44

Aleksandr
25.03.2016
17:47:18
py.test —nomagic просто использовать ндао

Serge
25.03.2016
17:47:48

Google

Serge
25.03.2016
17:48:35
а как же
assert 'foo' in open(fixture_filename)
?

Aleksandr
25.03.2016
17:50:27
Не знаю. Жутковато как-то.

Michael
25.03.2016
18:04:57
https://github.com/lihaoyi/macropy#tail-call-optimization

GNU/Docker
25.03.2016
18:09:02
вот то что сделано в питоне на подыгрывании с аст, кое-где является основой языка)
Но хоть так можно, хотя выглядит ультрамагически. Естественно такое в проде не использую.

Roman
25.03.2016
18:28:06
кстати
def tmap(fname):
s = set()
csize = 1024*32768
with open(fname, "rb") as f:
while 1:
chunk = f.readlines(csize)
if not chunk: break
s.update(chunk)
return s
вот это самый быстрый способ получается :)
чтобы ещё и память не сожрать всю.

Aleksandr
25.03.2016
18:33:07
Почему update?
Ты точно сделал что хотел? )

Serge
25.03.2016
18:34:30
самый быстрый способ тот, который ничего не делает;)

Aleksandr
25.03.2016
18:35:42
И даже если делать add в нем будет уникальный набор байт файла? )
Это что за задача

Dmitry
25.03.2016
18:37:00
Там наверное должно быть update(set(chunk))

Aleksandr
25.03.2016
18:37:26
И это то же самое
Уникальные байты из чанка объединяются с сетом исходным ...

Dmitry
25.03.2016
18:38:22
Он же линии читает

Aleksandr
25.03.2016
18:38:54
Ну там нужны уникальные линии а не уникальные буквы
Или я туплю ...

Google

Aleksandr
25.03.2016
18:40:09
Почему я подумал про counter('abcddddde')

Dmitry
25.03.2016
18:40:19
:)
Я тут недавно узнал почему некоторые типы в python названы маленькими буквами а некоторые как OrderedDict и Counter нет. Никогда не задумывался. Оказывается они написаны на Python, а те на C.
В тройке возможно уже тоже переписаны на С.

Aleksandr
25.03.2016
18:43:42
OrderedDict не всегда был на С вроде?
А, наоборот

Roman
25.03.2016
18:44:43

Aleksandr
25.03.2016
18:45:07
Ок, зачет

Roman
25.03.2016
18:45:52
Он же линии читает
нет, там веселее. f.readlines(size) читает до size линий за раз и возвращает тебе список, которым я разом апдейчу сет.

Dmitry
25.03.2016
18:46:40
Ух-ты я думал сет можно апдейтить только сетом.

Aleksandr
25.03.2016
18:49:28
Хм, я думал update === =| а на это питон скажет айайай разные типы

Roman
25.03.2016
18:50:04
кмк

Dmitry
25.03.2016
18:50:23
ага судя по всему

Aleksandr
25.03.2016
18:50:36
По доке да. Угу.

Serge
25.03.2016
18:50:41
ну так же, как конструктору

Aleksandr
25.03.2016
18:50:57
set |= other | ...
Update the set, adding elements from all others.
Changed in version 2.6: Accepts multiple input iterables.

Dmitry
25.03.2016
18:51:19
?

Roman
25.03.2016
19:04:54
Недавно наткнулся, как похапэшник для того, чтобы дописать чего-то в лог читал целиком лог-файл в оперативку, туда конкатенировал строку и записывал обратно.

Vitali K.
25.03.2016
20:24:23
У меня есть улучшение этого решения
Нужно замерять время загрузки лога в память. Если грузится долго то делать log rotate