Opened 4 years ago
Closed 4 years ago
#1001 closed ожидается проверка (задача сдана)
#15 WW_linq
Reported by: | vorobeva.aleksandra | Owned by: | Vasily Alferov |
---|---|---|---|
Component: | WW_linq | Version: | 2.0 |
Keywords: | Cc: |
Description
Первая версия, надеюсь не поздно:/
Нормально, что если валится assert, то всегда вылетает seg fault? (А если не валится, то все ок). И если это не нормально, то почему такое вообще происходит? И, насколько я поняла из условия под valgrind'ом запускать написанное не надо, но я запустила и память течет...
Change History (5)
comment:1 Changed 4 years ago by
comment:2 Changed 4 years ago by
UPD2: теперь еще не падает drop, если пытаться откусывать больше, чем существует элементов.
comment:3 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Очень круто, почти божественно.
Под валгриндом стоит запускать любой свой код, чтобы ошибок было меньше. К сожалению, даже я редко когда так делаю.
Но тесты к домашкам студентов гоняю под валгриндом :)
9/10.
Единственное замечание -- много лишних копирований функторов, неявно, когда они передаются как аргументы в функции и конструткоры. Функторы можно перемещать, но не копировать.
comment:4 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
Постаралась убрать лишние копирования, написала тесты с функторами, в которых забанен корструктор копирования. Работает:)
Но я не смогла написать тесты, чтобы проверить работает ли where_neq и until_eq (я проверяла работает, ничего не копируется, но тесты написать не смогла:с).
И еще вопрос, я написала 2 std::move() в конструкторах классов-наследников и при передаче параметров в конструктор, в итоге я захожу в move ctor 2 раза, что звучит не ОК:/ Но, при попытке убрать один из std::move() по assert'у в copy ctor'e. Почему так и нормально ли это?
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Круто, зачтено на фулл.
Респект за свои тесты, мне нравятся.
Zero-copy тесты на where_neq и until_eq писать не надо. Их логично писать на функторы, которые пользователь твоей библиотеки тебе передаёт, чтобы убедиться, что ты его не обманываешь и у тебя функторы и правда не копируются. В эти функции функторы не передаются, а про кишки тебе едва ли надо что-то проверять. То есть ты-то знаешь, что они внутри реализованы через where и until, но пользователь не в курсе. Ну а раз ты знаешь, то ты заодно знаешь, что там функторы не копируются, потому что ты это уже протестировала.
Можно было бы написать тесты, что передаваемые туда значения не копируются. Но шут бы с ними.
Про второй вопрос: чтобы так не делать, нужно делать std::forward
, за этим и нужен perfect forwarding: чтобы ссылки прокидывались напрямую как надо, а не через конструкторы. Но на момент этого задания вы про perfect forwarding не знали, так что в этом задании подразумевались именно два std::move
.
UPD: добавлены тесты на where, where_neq, until и until_eq на пустых и устранено UB, которое раньше здесь было:/