#128 closed ожидаются исправления (задача НЕ сдана)
ha4
Reported by: | Мусатян Сабрина | Owned by: | Vladimir Rutsky |
---|---|---|---|
Priority: | проверка | Milestone: | |
Component: | HA#4 lazy_string | Version: | 1.0 |
Keywords: | Cc: |
Description
Здравствуйте, выкладываю свое решение;
Хотелось бы узнать можно ли как-то более удобно и красиво определять операторы (например +), в том плане, чтобы можно было сразу в одной функции учитывать случай, когда первый аргумент функции это символ а второй lazy_string и наоборот; а то в моем случае это копирование кода, что определенно нехорошо.
Change History (28)
comment:1 Changed 7 years ago by
Component: | HA#1 matrices → HA#4 lazy_string |
---|---|
Version: | → 1.0 |
comment:2 Changed 7 years ago by
Milestone: | → ha4-milestone1 |
---|
comment:3 Changed 7 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:4 Changed 7 years ago by
Tested revision 734 by musatyan.sabrina.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | WARNING | |||
run | SUCCESS | |||
valgrind | SUCCESS | |||
gcc62-asan | WARNING | |||
asan | SUCCESS | |||
clang-san | SUCCESS | |||
san | WARNING | |||
Common header used in some tests: common.h
comment:5 Changed 7 years ago by
Tested revision 735 by musatyan.sabrina.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | SUCCESS | |||
gcc62-asan | SUCCESS | |||
asan | SUCCESS | |||
clang-san | SUCCESS | |||
san | WARNING | |||
Common header used in some tests: common.h
comment:6 Changed 7 years ago by
Tested revision 736 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:7 Changed 7 years ago by
Tested revision 748 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:8 Changed 7 years ago by
Tested revision 754 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
Common header used in some tests: common.h
comment:9 follow-up: 12 Changed 7 years ago by
Подскажите пожалуйста, почему тест ncomp_c_str_const.cpp может не компилироваться? Локально на моей машине все работает.
comment:10 Changed 7 years ago by
Tested revision 755 by musatyan.sabrina.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
Common header used in some tests: common.h
comment:11 Changed 7 years ago by
Tested revision 756 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:12 Changed 7 years ago by
Replying to musatyan.sabrina:
Подскажите пожалуйста, почему тест ncomp_c_str_const.cpp может не компилироваться? Локально на моей машине все работает.
Тесты, начинающиеся на ncomp_
не должны компилироваться, а вас ncomp_c_str_const.cpp
компилируется.
Хотя мне кажется, что в этом тесте ошибка --- проигнорируйте пока этот тест.
comment:13 Changed 7 years ago by
Tested revision 767 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
Common header used in some tests: common.h
comment:14 Changed 7 years ago by
Tested revision 768 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
Common header used in some tests: common.h
comment:15 Changed 7 years ago by
Tested revision 769 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:16 Changed 7 years ago by
Tested revision 770 by musatyan.sabrina.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | WARNING | |||
run | SUCCESS | |||
valgrind | SUCCESS | |||
gcc62-asan | WARNING | |||
asan | SUCCESS | |||
clang-san | WARNING | |||
san | SUCCESS | |||
Common header used in some tests: common.h
comment:17 Changed 7 years ago by
Tested revision 771 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:18 Changed 7 years ago by
Tested revision 772 by musatyan.sabrina.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | WARNING | |||
run | SUCCESS | |||
valgrind | SUCCESS | |||
gcc62-asan | WARNING | |||
asan | SUCCESS | |||
clang-san | SUCCESS | |||
san | SUCCESS | |||
Common header used in some tests: common.h
comment:19 Changed 7 years ago by
Tested revision 773 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:20 Changed 7 years ago by
Tested revision 774 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
Common header used in some tests: common.h
comment:21 Changed 7 years ago by
Tested revision 775 by musatyan.sabrina.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
Common header used in some tests: common.h
comment:22 Changed 7 years ago by
Tested revision 776 by musatyan.sabrina.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
Common header used in some tests: common.h
comment:23 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Проверьте пожалуйста мое решение;
Этот компилирующий тест я пропустила, как вы и сказали. Я посмотрела его код и не вижу причин, почему он не должен компилироваться, подскажите пожалуйста, если я не права и как это исправить
Спасибо
comment:24 Changed 7 years ago by
Milestone: | ha4-milestone1 → ha4-milestone2 |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Замечания:
- В чем смысл ловить и пробрасывать дальше исключения?
try { return !((*this).operator == (toCmp)); } catch (...) { throw; }
- Используйте
LAZY_STRING_H
вместоlazy_string_h
:
#ifndef lazy_string_h #define lazy_string_h
- Для проброса исключения стоит использовать
throw;
, вместоthrow ba;
:
try { buffer newBuf; newBuf.emplace_back(); sharedMem = std::make_shared<buffer>(newBuf); } catch(std::bad_alloc const & ba) { sharedMem = 0; //throw ba; throw; // <-- }
Но на самом деле в данной задаче не стоит использовать try/catch: это плохой способ обеспечения гарантии строгой безопасности исключений. Гораздо лучше использовать умные указатели (вы отчасти так и делаете).
- Здесь:
lazy_basic_string(const CharT *s) { try { ... } catch (std::bad_alloc const &ba) { sharedMem = 0; throw ba; } catch (std::exception const & e) { throw std::invalid_argument(e.what()); }
нет смысла в первом
catch
--- если в конструкторе бросили исключение, значит объект не будет создан и нет смысла делать какие-то хитрые манипуляции с полями объекта (тем более, чтоsharedMem
--- этоstd::shared_ptr
, который выполняет строгие гарантии безопасности исключений, и он либо будет чем-то инициализирован, либо останется пустым).
Во втором
catch
тоже нет смысла --- лучше, если вызывающий код поймает оригинальное исключение, чем переписанное вами, но с тем жеwhat()
.
- Не используйте
vector::emplace_back()
при работе с символами. Хотя это и позволяет избежать копирования черезoperator=
это не лучший способ для инициализацииvector
символами.
Создавайте
vector
сразу нужного размера и работайте с буфером, который хранится в нём:
size_t l = Traits::length(str); //buffer newBuf; //for (size_t i = 0; i < l; i++) //{ // newBuf.emplace_back(); //} //Traits::copy(&(newBuf.front()), str, l); //newBuf.emplace_back(); buffer newBuf(l + 1); Traits::copy(newBuf.data(), str, l + 1);
Исправьте, пожалуйста, в ближайшее время (ещё раз повторюсь: в вашем решении не должно быть try/catch
).
comment:25 Changed 7 years ago by
- Касательно теста
ncomp_c_str_const.cpp
: тест корректен, c_str() должен вернуть немодифицируемый буффер. Исправьте это тоже, пожалуйста.
comment:26 Changed 7 years ago by
Спасибо за замечания!
К сожалению, у меня не получается по времени исправить это задание и ha5; поэтому этот тикет и 154 можно закрыть. Я попробую взять курс в следующем году еще раз.
Спасибо!
comment:27 Changed 7 years ago by
Resolution: | → задача НЕ сдана |
---|---|
Status: | new → closed |
Хорошо, Сабрина, спасибо, что сообщили.
Tested revision 733 by musatyan.sabrina.
Smoke tests
test
stage
result
info
log
run_smoke_test.cpp
gcc62
run_smoke_test-gcc62.log
Common header used in some tests: common.h