Opened 4 years ago

Closed 4 years ago

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

Tankov Vladislav HW4

Reported by: tankov.vladislav Owned by: rutsky,grabovoy.philipp
Priority: проверка Milestone: ha4-deadline
Component: HA#4 function Version:
Keywords: Cc:

Description


Change History (15)

comment:1 Changed 4 years ago by cpptester

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

Tested revision 598 by tankov.vladislav.

Smoke tests

test

stage

result

info

log

run_function_smoke_test.cpp

WARNING

run_function_smoke_test-gcc62.log

SUCCESS
SUCCESS

run_function_smoke_test-valgrind.log

WARNING

run_function_smoke_test-gcc62-asan.log

SUCCESS
WARNING

run_function_smoke_test-clang-san.log

SUCCESS

Common header used in some tests: common.h

comment:2 Changed 4 years ago by cpptester

Tested revision 598 by tankov.vladislav.

Smoke tests

test

stage

result

info

log

run_function_smoke_test.cpp

WARNING

run_function_smoke_test-gcc62.log

SUCCESS
SUCCESS

run_function_smoke_test-valgrind.log

WARNING

run_function_smoke_test-gcc62-asan.log

SUCCESS
WARNING

run_function_smoke_test-clang-san.log

SUCCESS

Common header used in some tests: common.h

comment:3 Changed 4 years ago by Vladimir Rutsky

Milestone: ha4-milestone2ha4-deadline

Владислав, исправьте, пожалуйста, предупреждения при компиляции, которые показывают автотесты (warning: unused parameter 'aNullptr').

При хранении свободной функции с той же сигнатурой, что и шаблонный параметр fn::function, нет необходимости в type erasure (с использованием runnable) --- вы можете хранить такую функцию просто как указатель на функцию, при этом вам не потребуется выделение памяти и лишний косвенный доступ к памяти (в таблицу виртуальных функций) для вызова функции.
Реализуйте, пожалуйста, оптимизацию для хранения свободной функции с совместимой сигнатурой.

comment:4 Changed 4 years ago by cpptester

Tested revision 762 by tankov.vladislav.

Main tests

test

stage

result

info

log

run_free_function.cpp

SUCCESS
FAILURE

exit code 139

run_free_function-run.log

Common header used in some tests: common.h

comment:5 Changed 4 years ago by cpptester

Tested revision 763 by tankov.vladislav.

All tests passed. Good job!

comment:6 Changed 4 years ago by tankov.vladislav

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

comment:7 Changed 4 years ago by Vladimir Rutsky

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

Замечания:

  1. В каком случае условие данного if будет истинно?
     function(function &&func_in) noexcept {
         if (this != &func_in) {
             ...
  1. Используйте swap() членов для реализации swap() function:
void swap(function &func_in) {
            runnable *tmp_func = func_in.func;
            func_in.func = func;
            func = tmp_func;
            free_func_type tmp_free_func = func_in.func_free;
            func_in.func_free = func_free;
            func_free = tmp_free_func;
        }
  1. Вместо использования сырого указателя на runnable, используйте std::unique_ptr --- это легковесная обертка, которая позволит упросить код и сделать его более безопасным (испключает случайное копирование и не требует явного вызова delete).
  1. В данном операторе произойдёт ошибка в func_in.func->copy(), если func_in.func == nullptr:
     function &operator=(const function &func_in) {
         assert(false);
         if (this != &func_in) {
             delete func;
             func = func_in.func->copy();
             func_free = func_in.func_free;
         }
         return *this;
     }

Эта ошибка не проявляется на практике, т.к. определённый вами template<class F> function &operator=(F &&runnable) принимает "универсальную ссылку" и фактически используется для всех =.
Вы можете оставить только этот оператор и фактически реализовать копирование через использование конструктор и swap (только убедитесь, что вы корректно муваете функтор).

comment:8 Changed 4 years ago by cpptester

Tested revision 804 by tankov.vladislav.

All tests passed. Good job!

comment:9 Changed 4 years ago by Vladimir Rutsky

Можно проверять?

comment:10 Changed 4 years ago by cpptester

Tested revision 813 by tankov.vladislav.

All tests passed. Good job!

comment:11 Changed 4 years ago by tankov.vladislav

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

comment:12 Changed 4 years ago by cpptester

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

Tested revision 814 by tankov.vladislav.

Smoke tests

test

stage

result

info

log

run_function_smoke_test.cpp

SUCCESS
FAILURE

exit code 139

run_function_smoke_test-run.log

Common header used in some tests: common.h

comment:13 Changed 4 years ago by cpptester

Tested revision 815 by tankov.vladislav.

All tests passed. Good job!

comment:14 Changed 4 years ago by tankov.vladislav

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

comment:15 Changed 4 years ago by Vladimir Rutsky

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

Решение зачтено.

Note: See TracTickets for help on using tickets.