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 vorobeva.aleksandra

UPD: добавлены тесты на where, where_neq, until и until_eq на пустых и устранено UB, которое раньше здесь было:/

comment:2 Changed 4 years ago by vorobeva.aleksandra

UPD2: теперь еще не падает drop, если пытаться откусывать больше, чем существует элементов.

comment:3 Changed 4 years ago by Vasily Alferov

Type: ожидается проверкаожидаются исправления

Очень круто, почти божественно.

Под валгриндом стоит запускать любой свой код, чтобы ошибок было меньше. К сожалению, даже я редко когда так делаю.
Но тесты к домашкам студентов гоняю под валгриндом :)

9/10.
Единственное замечание -- много лишних копирований функторов, неявно, когда они передаются как аргументы в функции и конструткоры. Функторы можно перемещать, но не копировать.

comment:4 Changed 4 years ago by vorobeva.aleksandra

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

Постаралась убрать лишние копирования, написала тесты с функторами, в которых забанен корструктор копирования. Работает:)
Но я не смогла написать тесты, чтобы проверить работает ли where_neq и until_eq (я проверяла работает, ничего не копируется, но тесты написать не смогла:с).
И еще вопрос, я написала 2 std::move() в конструкторах классов-наследников и при передаче параметров в конструктор, в итоге я захожу в move ctor 2 раза, что звучит не ОК:/ Но, при попытке убрать один из std::move() по assert'у в copy ctor'e. Почему так и нормально ли это?

comment:5 Changed 4 years ago by Vasily Alferov

Resolution: задача сдана
Status: assignedclosed

Круто, зачтено на фулл.
Респект за свои тесты, мне нравятся.

Zero-copy тесты на where_neq и until_eq писать не надо. Их логично писать на функторы, которые пользователь твоей библиотеки тебе передаёт, чтобы убедиться, что ты его не обманываешь и у тебя функторы и правда не копируются. В эти функции функторы не передаются, а про кишки тебе едва ли надо что-то проверять. То есть ты-то знаешь, что они внутри реализованы через where и until, но пользователь не в курсе. Ну а раз ты знаешь, то ты заодно знаешь, что там функторы не копируются, потому что ты это уже протестировала.

Можно было бы написать тесты, что передаваемые туда значения не копируются. Но шут бы с ними.

Про второй вопрос: чтобы так не делать, нужно делать std::forward, за этим и нужен perfect forwarding: чтобы ссылки прокидывались напрямую как надо, а не через конструкторы. Но на момент этого задания вы про perfect forwarding не знали, так что в этом задании подразумевались именно два std::move.

Note: See TracTickets for help on using tickets.