Opened 6 years ago

Closed 6 years ago

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

ha5

Reported by: basharin.egor Owned by: rutsky,grabovoy.philipp
Priority: проверка Milestone: ha5-deadline
Component: HA#5 lazy_string Version: 1.0
Keywords: Cc: eaniconer@…

Description

Check ha5, please.

Change History (16)

comment:1 Changed 6 years ago by cpptester

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

Tested revision 614 by basharin.egor.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

WARNING

run_smoke_test-gcc62.log

SUCCESS
SUCCESS

run_smoke_test-valgrind.log

WARNING

run_smoke_test-gcc62-asan.log

SUCCESS
WARNING

run_smoke_test-clang-san.log

SUCCESS

Common header used in some tests: common.h

comment:2 Changed 6 years ago by cpptester

Tested revision 633 by basharin.egor.

Main tests

test

stage

result

info

log

comp_char_traits_custom.cpp

FAILURE

comp_char_traits_custom-gcc62.log

run_assign_assign.cpp

SUCCESS
FAILURE

exit code 139

run_assign_assign-run.log

run_assign_c_str_no_mem.cpp

SUCCESS
FAILURE

exit code 139

run_assign_c_str_no_mem-run.log

run_assign_linked.cpp

SUCCESS
FAILURE

exit code 139

run_assign_linked-run.log

run_clear_wide.cpp

FAILURE

run_clear_wide-gcc62.log

run_eq_compare.cpp

SUCCESS
FAILURE

exit code 139

run_eq_compare-run.log

Common header used in some tests: common.h

comment:3 Changed 6 years ago by cpptester

Tested revision 634 by basharin.egor.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

WARNING

run_smoke_test-gcc62.log

FAILURE

exit code 139

run_smoke_test-run.log

Common header used in some tests: common.h

comment:4 Changed 6 years ago by cpptester

Tested revision 635 by basharin.egor.

Main tests

test

stage

result

info

log

run_lazy_istring_less2.cpp

SUCCESS
FAILURE

exit code 139

run_lazy_istring_less2-run.log

run_lazy_istring_less2_rev.cpp

SUCCESS
FAILURE

exit code 139

run_lazy_istring_less2_rev-run.log

Common header used in some tests: common.h

comment:5 Changed 6 years ago by cpptester

Tested revision 636 by basharin.egor.

All tests passed. Good job!

comment:6 Changed 6 years ago by basharin.egor

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

comment:7 Changed 6 years ago by Vladimir Rutsky

Milestone: ha5-milestone2ha5-deadline
Type: ожидается проверкаожидаются исправления

Замечания:

  1. Вы храните общий buffer в экземлярах lazy_basic_string в std::shared_ptr, а внутри buffer в std::shared_ptr храните data_. В последнем случае std::shared_ptr не нужен, т.к., насколько я вижу, вы используете data_ эксклюзивно в buffer.
  1. Интерфейс buffer сильно связан с lazy_basic_string --- этот класс легко привести в некорректное состояние (например, когда он просто конструируется size_ ничем не инициализирован). Добавьте в buffer конструкторы. Если вы предполагаете, что один экземпляр buffer должен хранить строку фиксированный длины (довольно разумное ограничение), то зафиксируйте это явно в интерфейсе класса.


comment:8 Changed 6 years ago by cpptester

Tested revision 816 by basharin.egor.

All tests passed. Good job!

comment:9 Changed 6 years ago by basharin.egor

Type: ожидаются исправленияожидается проверка
  1. Исправлено. (Вообще умный указатель задумывался для того, чтобы использовать RAII)
  2. Исправлено. (Не совсем понял последнее предложение, что значит зафиксировать?)

comment:10 Changed 6 years ago by Vladimir Rutsky

Type: ожидается проверкаожидаются исправления
  1. Да, RAII это правильная вещь, но вместо std::shared_ptr стоит использовать std::unique_ptr внутри buffer.
  1. Насколько я вижу, во всех использованиях buffer размер буфера заранее известен (или вычислим через Traits::length(str)), и не изменяется.

Я предлагаю зафиксировать то, что размер буфера никогда не меняется в интерфейсе так, чтобы в процессе жизни экземпляра buffer его размер нельзя было поменять. Это можно сделать, ограничив конструкторы и операторы копирования:

struct buffer
{
  buffer(size_type size) {...}
  buffer(size_type size, CharT ch) {...}
  buffer(CharT const *str) {...}

  buffer(buffer const &) = delete;
  buffer & operator=(buffer const &) = delete;

  ~buffer() {...}
  CharT& get_ch (size_type pos) {...}
  const CharT& get_ch(size_type pos) const {...}
}

Класс с таким интерфейсом нельзя использовать неправильно и у него больше полезных инвариантов (buffer никогда не пуст и фиксированной длины).

Исправьте, пожалуйста.

comment:11 Changed 6 years ago by cpptester

Tested revision 821 by basharin.egor.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

SUCCESS
SUCCESS
FAILURE

exit code 1

run_smoke_test-valgrind.log

SUCCESS
FAILURE

exit code 1

run_smoke_test-asan.log

SUCCESS
FAILURE

exit code 1

run_smoke_test-san.log

Common header used in some tests: common.h

comment:12 Changed 6 years ago by cpptester

Tested revision 822 by basharin.egor.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

SUCCESS
SUCCESS
FAILURE

exit code 1

run_smoke_test-valgrind.log

SUCCESS
FAILURE

exit code 1

run_smoke_test-asan.log

SUCCESS
FAILURE

exit code 1

run_smoke_test-san.log

Common header used in some tests: common.h

comment:13 Changed 6 years ago by cpptester

Tested revision 823 by basharin.egor.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

SUCCESS
SUCCESS
FAILURE

exit code 1

run_smoke_test-valgrind.log

SUCCESS
FAILURE

exit code 1

run_smoke_test-asan.log

SUCCESS
FAILURE

exit code 1

run_smoke_test-san.log

Common header used in some tests: common.h

comment:14 Changed 6 years ago by cpptester

Tested revision 824 by basharin.egor.

All tests passed. Good job!

comment:15 Changed 6 years ago by basharin.egor

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

Исправлено.

comment:16 Changed 6 years ago by Vladimir Rutsky

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

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

Note: See TracTickets for help on using tickets.