Skip to content

feat(algorithm): Реализация движка интервального повторения (C) и настройка CI/CD#28

Merged
ilindan-dev merged 23 commits into
devfrom
feature/c-algorithm-core
Mar 31, 2026
Merged

feat(algorithm): Реализация движка интервального повторения (C) и настройка CI/CD#28
ilindan-dev merged 23 commits into
devfrom
feature/c-algorithm-core

Conversation

@ilindan-dev

Copy link
Copy Markdown
Owner

Описание (Description)

В этом PR реализовано математическое ядро алгоритма интервального повторения (модификация SM-2) на чистом C. Код подготовлен для безопасной линковки с Go-бэкендом через cgo. Также заложен фундамент инфраструктуры монорепозитория: настроены независимые линтеры и CI/CD пайплайны для всех трех языков проекта (C, Go, Python).

Что сделано (Changes)

Ядро алгоритма (C/C++):

  • Написана функция calculate_next_review, переводящая косинусное сходство (cosine similarity) в оценку качества (0-5) и высчитывающая новые интервалы.
  • Использованы фиксированные типы данных (int64_t, int32_t) для бинарной совместимости с Go и PostgreSQL.
  • Подключен Google Test (GTest) через CMake FetchContent. Написаны unit-тесты для пограничных сценариев алгоритма.

CI/CD и Линтеры (GitHub Actions):

  • Разделен пайплайн проверок: созданы независимые workflow для C/C++, Go и Python. Actions запускаются только при изменении файлов в соответствующих директориях (paths).
  • C/C++: Настроен .clang-format (Google Style) и строгий .clang-tidy (включены правила cert-*, bugprone-*, performance-*). Для папки с тестами MISRA отключена локальным конфигом.
  • Go: Интегрирован golangci-lint (под Go 1.26).
  • Python: Добавлены проверки через Ruff.

Как проверить (How to test)

  1. Дождаться зеленой галочки от GitHub Actions (все линтеры и сборка компиляций должны пройти).
  2. Локальный запуск тестов алгоритма:
    cmake -B algorithm/build -S algorithm
    cmake --build algorithm/build
    ./algorithm/build/test_algorithm

TToJlkoBHuK and others added 23 commits March 21, 2026 13:48
Использовать Ninja для сборки, чтобы создавался json lkz последующей проверки линтерами.
- Add CardState and ReviewResult structures
- Implement calculate_next_review function with math constraints
- Map cosine similarity percentages to 0-5 quality grades
- Configure CMake with FetchContent for GTest
- Add unit tests for boundary conditions and score calculation
- Enforce Google C++ style formatting
- Enable strict static analysis (cert, bugprone, readability)
- Disable MISRA checks for test directory to allow GTest macros
- Automate clang-format and clang-tidy checks on PRs
- Generate compile_commands.json via CMake for accurate linting
@ilindan-dev
ilindan-dev merged commit 2367055 into dev Mar 31, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants