Вызов реализации алгоритма на случайных тестовых данных с ожидаемым результатом. Используйте функцию assert()
, чтобы подтвердить, что тесты пройдут. Требуется включить библиотеку assert.h
.
Тестовые случаи должны полностью проверять работу программы в соответствии с ожиданиями. Вместо того чтобы запрашивать ввод у пользователя, лучше убедиться, что полученный результат является правильным.
Примеры самотестирования:
// NOTE: функция `rot13` определена в другой части кода.
char test_01[] = "The more I C, the less I see.";
rot13(test_01);
assert(strcmp(test_01, "Gur zber V P, gur yrff V frr.") == 0);
char test_02[] = "Which witch switched the Swiss wristwatches?";
rot13(test_02);
assert(strcmp(test_02, "Juvpu jvgpu fjvgpurq gur Fjvff jevfgjngpurf?") == 0);
char test_03[] = "Juvpu jvgpu fjvgpurq gur Fjvff jevfgjngpurf?";
rot13(test_03);
assert(strcmp(test_03, "Which witch switched the Swiss wristwatches?") == 0);
uint8_t test_array[] = {3, 0, 6, 5, 0, 8, 4, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0,
0, 0, 8, 7, 0, 0, 0, 0, 3, 1, 0, 0, 3, 0, 1, 0, 0,
8, 0, 9, 0, 0, 8, 6, 3, 0, 0, 5, 0, 5, 0, 0, 9, 0,
6, 0, 0, 1, 3, 0, 0, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0,
0, 0, 7, 4, 0, 0, 5, 2, 0, 6, 3, 0, 0};
struct sudoku a = {.N = 9, .N2 = 3, .a = test_array};
assert(solve(&a)); // ensure that solution is obtained
// NOTE: `solve` is defined in another part of the code.
uint8_t expected[] = {3, 1, 6, 5, 7, 8, 4, 9, 2, 5, 2, 9, 1, 3, 4, 7, 6,
8, 4, 8, 7, 6, 2, 9, 5, 3, 1, 2, 6, 3, 4, 1, 5, 9,
8, 7, 9, 7, 4, 8, 6, 3, 1, 2, 5, 8, 5, 1, 7, 9, 2,
6, 4, 3, 1, 3, 8, 9, 4, 7, 2, 5, 6, 6, 9, 2, 3, 5,
1, 8, 7, 4, 7, 4, 5, 2, 8, 6, 3, 1, 9};
for (int i = 0; i < a.N; i++)
for (int j = 0; j < a.N; j++)
assert(a.a[i * a.N + j] == expected[i * a.N + j]);
#include <stdio.h> /// for IO operations
#include <assert.h> /// for assert
#include <stdbool.h> /// for bool
/**
* @brief Verifies if the given array
* contains the given number on it.
* @param arr the array to be used for checking
* @param number the number to check if it's inside the array
* @return false if the number was NOT found in the array
* @return true if the number WAS found in the array
*/
bool is_number_on_array(const int *arr, const int number) {
for (int i = 0; i < sizeof(arr); i++) {
if (arr[i] == number) {
return true;
}
else {
// Number not in the current index, keep searching.
}
}
return false;
}
/**
* @brief Self-test implementations
* @returns void
*/
static void tests() {
int arr[] = { 9, 14, 21, 98, 67 };
assert(is_number_on_array(arr, 9) == true);
assert(is_number_on_array(arr, 4) == false);
assert(is_number_on_array(arr, 98) == true);
assert(is_number_on_array(arr, 512) == false);
printf("All tests have successfully passed!\n");
}
/**
* @brief Main function
* @returns 0 on exit
*/
int main() {
tests(); // run self-test implementations
return 0;
}
/**
* @file
* @brief Добавьте здесь одну строку описания. Должна содержать ссылку на Википедию или другой источник, объясняющий алгоритм/реализацию.
* @details
* Это многострочное
* описание, содержащее ссылки, ссылки,
* математические уравнения и т. д.
* @author [Имя](https://github.com/handle)
* @see related_file.c, another_file.c
*/
#include <assert.h> /// для assert
#include /// для `некоторой функции здесь`
/**
* @brief Документация по структуре
*/
struct struct_name {
int **Файл с именем guidelines**
* Используйте строчные буквы и символ нижнего подчёркивания в качестве разделителя.
Например:
MyNewCStruct.C — неверно;
my_new_c_struct.c — верно.
Имя файла будет использоваться для динамического создания каталога файлов и реализации. Проверка имени файла будет выполняться в Docker, чтобы обеспечить его правильность. Если реализация алгоритма уже существует и ваша версия отличается от реализованной, пожалуйста, используйте инкрементную цифровую цифру в качестве суффикса. Например, если median_search.c уже существует в папке search и вы предоставляете новую реализацию, имя файла должно быть median_search2.c. Для третьей реализации — median_search3.c и так далее.
**Рекомендации по созданию каталогов**
Рекомендуется добавлять файлы в существующие каталоги, насколько это возможно. Используйте строчные буквы и символ нижнего подчёркивания в качестве разделителей (пробелы или дефисы не допускаются).
Например:
SomeNew Fancy-Category — неверно;
some_new_fancy_category — верно.
Пути к файлам будут использоваться для динамического создания каталога наших алгоритмов. Проверка пути к файлу будет выполняться на GitHub Actions, чтобы убедиться в соответствии требованиям.
**Интеграция CMake в новый каталог**
Если требуется создать новый каталог, необходимо обновить файл CMakeLists.txt в корневом каталоге и создать новый файл CMakeLists.txt внутри нового каталога. Пример того, как должен выглядеть ваш новый файл CMakeLists.txt, приведён ниже. Обратите внимание, что если требуются дополнительные библиотеки или настройки, их также необходимо включить в этот файл.
```cmake
# Если необходимо, используйте флаг RELATIVE, иначе каждый исходный файл может быть указан
# с полным путём. Флаг RELATIVE упрощает автоматическое извлечение имени исполняемого файла.
file( GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.c )
foreach( testsourcefile ${APP_SOURCES} )
string( REPLACE ".c" "" testname ${testsourcefile} ) # File type. Example: `.c`
add_executable( ${testname} ${testsourcefile} )
if(OpenMP_C_FOUND)
target_link_libraries(${testname} OpenMP::OpenMP_C)
endif()
if(MATH_LIBRARY)
target_link_libraries(${testname} ${MATH_LIBRARY})
endif()
install(TARGETS ${testname} DESTINATION "bin/<foldername>") # Folder name. Do NOT include `<>`
endforeach( testsourcefile ${APP_SOURCES} )
Файл CMakeLists.txt в корневом каталоге следует обновить, включив новый каталог. Добавьте свой новый каталог после последнего подкаталога.
Пример:
...
add_subdirectory(numerical_methods)
add_subdirectory(<foldername>)
Правила оформления коммитов
Рекомендуется группировать изменения логически в отдельных коммитах. Сопровождающим легче понять изменения, которые логически распределены по нескольким коммитам. Попробуйте изменить только один или два файла в одном каталоге. Запросы на вытягивание, охватывающие несколько каталогов, часто отклоняются.
git add file_xyz.c
git commit -m "your message"
Примеры сообщений о фиксации с семантическими префиксами:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )