Opened 5 years ago

Closed 5 years ago

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

WW #2

Reported by: chaykova.anastasiya Owned by: Egor Suvorov
Component: WW_strings Version: 2.0
Keywords: Cc:

Description


Change History (12)

comment:1 Changed 5 years ago by chaykova.anastasiya

Component: HW #1 (BMP)WW_strings

comment:2 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Корректность:

  1. Непонятно, зачем test.c включает str.h.
  2. Непонятно, зачем test_str.h включает str.h.
  3. Не хватает const и/или restrict в некоторых местах.
  4. Сигнатуры не в точности соответствуют стандарту.
  5. my_strcat делает немного не то (идея верная).
  6. assert((s2 == s1)==0); — подозрительно выглядит. Здесь вы убеждаетесь, что (s2 == s1) — ложь, т.е. s2 != s. А тесты проходит.
  7. В my_strcmp есть UB.

Стиль:

  1. Ставьте отступы во всех блоках и внутри фигурных скобок.
  2. В тестах можно сравнивать прямо строковые литералы (они уже лежат в константной памяти, на них можно брать указатели), незачем их сначала класть в массив.
  3. Вместо '\0' лучше использовать просто 0.
  4. Странные касты (преобразования типа) в my_strcmp, они скорее не нужны: (const char *) s1.
  5. В my_strcmp не нужен break, лучше напишите цикл с нужным условием.
  6. Ключ -c традиционно в CFLAGS не включают, а пишут в каждой строчке компиляции отдельно. Это нужно, чтобы можно было просто переиспользовать флаги, если мы хотим и скомпилировать, и слинковать.
  7. В тестах можно сравнивать прямо строковые литералы (они уже лежат в константной памяти, на них можно брать указатели), незачем их сначала класть в массив.
  8. Вместо '\0' лучше использовать просто 0.

comment:3 Changed 5 years ago by Egor Suvorov

Ещё по корректности:

  1. У тестовых функций нет параметров => в сигнатуре должно быть (void), иначе в языке Си это означает "любые параметры" (в C++ не так).

comment:4 Changed 5 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:5 Changed 5 years ago by chaykova.anastasiya

Version: 1.02.0

comment:6 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Пока что падают ваши тесты из-за undefined behavior:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Assertion failed!

File: src/test_str.c, Line 19

Expression: my_strcmp(s,s1)==0

comment:7 Changed 5 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:8 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Корректность:

  1. str.c должен включать str.h. Из-за этого зависимости от заголовков в Makefile не соответствует реально включаемым заголовкам.
  2. Include guard в test_str.h сделан с опечаткой.
  3. У тестовых функций нет параметров => в сигнатуре должно быть (void), иначе в языке Си это означает "любые параметры" (в C++ не так).
  4. Сигнатуры не в точности соответствуют стандарту.

По стилю (пока 1.5/3):

  1. Ставьте отступы во всех блоках и внутри фигурных скобок. У вас в my_strcpy поехали как минимум.
  2. В тестах можно сравнивать прямо строковые литералы (они уже лежат в константной памяти, на них можно брать указатели), незачем их сначала класть в массив. Например, в test_strlen.
  3. Вместо while (*s != 0) лучше while (*s) (и в Си, и в C++, и во всех лабах).
  4. Вместо '\0' лучше использовать просто 0.
  5. Вместо my_strcmp в тестах лучше использовать прямые проверки элементов массива assert'ами.
  6. Тесты на strcmp стоит либо объединить в одну test_strcmp, либо назвать так, чтобы их названия показывали, чем они отличаются (а не просто порядковый номер): test_strcmp_equal, test_strcmp_less.

Лайк за my_strcmp!

Баллы за корректность:

  • Ваши тесты проходят +1
  • Корректный strcpy и тест +1
  • Корректный strcat и тест +1
  • Корректный strcmp и тест +1
  • Корректный strlen и тест +1

comment:9 Changed 5 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:10 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Корректность:

  1. Ваш test_strcpy не проверяет корректность my_strcpy.

Баллы за корректность:

  • Корректный makefile и структура папок +1
  • Корректные заголовки +1
  • Ваши тесты проходят +1
  • Корректный strcat и тест +1
  • Корректный strcmp и тест +1
  • Корректный strlen и тест +1

Стиль (2.5/3):

  1. Ставьте пробелы между for/while/if и следующей скобочкой: while (1), не while(1).
  2. Ставьте пробелы вокруг бинарных операторов: x[a + b] = y[c];
  3. Массив s1 можно объявить проще: char s1[6] = { 'H', 'e', '\0' }; (в фигурных скобках перечисляете только первые элементы, которые хотите проинициализировать).

comment:11 Changed 5 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:12 Changed 5 years ago by Egor Suvorov

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

Успех, 10/10!

Note: See TracTickets for help on using tickets.