Opened 4 years ago

Closed 4 years ago

#1010 closed ожидается проверка (задача сдана)

WW #15

Reported by: fedorov.vladimir Owned by: Дмитрий Свиридкин
Component: WW_linq Version: 3.0
Keywords: Cc:

Description


Change History (5)

comment:1 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to fedorov.vladimir
Type: ожидается проверкаожидаются исправления
  • Не копируйте функторы там, где их можно переместить
  • реализуйте where_neq/until_eq через where/until -- зачем дублировать?
  • в where предикат может вызываться несколько раз для одного и того же элемента
  • в select функутор может вызываться несколько раз для одно и того же элемента, если, например, следующий итератор проверяет предикат

4 + 2

comment:2 Changed 4 years ago by fedorov.vladimir

Owner: changed from fedorov.vladimir to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to fedorov.vladimir
Type: ожидается проверкаожидаются исправления

в select теперь UB

==163675== Conditional jump or move depends on uninitialised value(s)
==163675==    at 0x4A6678C: sqrt (w_sqrt_compat.c:31)
==163675==    by 0x116EFF: __gnu_cxx::__enable_if<std::__is_integer<int>::__value, double>::__type std::sqrt<int>(int) (cmath:476)
==163675==    by 0x10CE5A: test_example_3()::{lambda(int)#1}::operator()(int) const (linq_tests.cpp:112)
==163675==    by 0x115AFE: linq::impl::select_enumerator<double, int, test_example_3()::{lambda(int)#1}>::operator++() (linq.hpp:153)
==163675==    by 0x1181B2: void linq::impl::enumerator<double>::copy_to<std::back_insert_iterator<std::vector<double, std::allocator<double> > > >(std::back_insert_iterator<std::vector<double, std::allocator<double> > >) (linq.hpp:73)
==163675==    by 0x116FCD: linq::impl::enumerator<double>::to_vector() (linq.hpp:63)
==163675==    by 0x10CF2D: test_example_3() (linq_tests.cpp:113)
==163675==    by 0x113127: main (linq_tests.cpp:445)
==163675== 
==163675== 
  • select_enumerator(enumerator<U> &parent, F func) : parent_(parent), func_(std::move(func)), elem(func(*parent)) Здесь UB дважды

4 + 3

comment:4 Changed 4 years ago by fedorov.vladimir

Owner: changed from fedorov.vladimir to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:5 Changed 4 years ago by Дмитрий Свиридкин

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

в цепочке where(...).where(...)
первый where будет проверять предикат дважды на одном и том же элементе


6 + 3

Note: See TracTickets for help on using tickets.