Консольное приложение, ищущее в текстовом файле пару заданных слов на определённом расстоянии друг от друга.
В репозитории содержатся следующие файлы:
- main.cpp - основной файл запуска приложения;
- myLibrary.h - библиотека собственных функций;
- myLibrary.cpp - реализация собственных функци;
- Makefile;
- features/findPair.feature - описание сценариев;
- features/steps/findPair.py - обработчики сценариев;
- features/materials - папка с текстовыми документами для тестирования.
Чтобы собрать приложение:
make
Образуются файлы:
- count_pairs.exe - приложение;
- main.o;
- myLibrary.o.
Чтобы очистить папку:
make clean
Реализована возможность запуска тестов на «человеческом языке» с использованием фреймворка Behave
Тесты представляют собой основные логические развилки в работе приложения и имеют:
- Scenario: - краткое описание тестируемой развилки работы приложения;
- Given - исходное состояние приложения и используемых данных;
- When - непосрественное описание способа запуска приложения;
- Then - получаемый результат.
Реализованы тесты:
- Выдающие ошибку:
- несуществующий файл во входных параметрах;
- недостаточно входных параметров;
- слишком много входных параметров;
- документ с неправильной кодировкой (ошибка конвертирования произойдёт).
- Отрабатывающие корректно:
- поиск пары слов на малом расстоянии, пары находятся;
- поиск пары слов на малом расстоянии, пары не находятся;
- поиск пары слов на среднем расстоянии, пары находятся;
- поиск пары слов на среднем расстоянии, пары не находятся;
- поиск пары слов на большом расстоянии, пары находятся;
- поиск пары слов на большом расстоянии, пары не находятся;
Чтобы запустить тесты, соберите приложение и запустите работу Behave:
make
behave
В формулировке задания мне остался не до конца ясным один момент - нужно ли считать только ближайшие пары или вообще все. Поясню на примере: пусть заданное расстояние 5, а в тексте содержится фраза:
firstKeyWord word firstKeyWord secondKeyWord Word secondKeyWord
Пар тут, конечно, две. Но алгоритм при такой задаче будет весьма сложным, так как нужно хранить информацию о наличии первых ключевых слов ранее на заданном состоянии при обработке каждого слова в документе. В моём приложении реализован вариант, когда ответ на данном примере - 1, считается только внутренняя пара.