/
solidbase
/
C2_SimpleBashUtils
Обзор
Документация
Войти
/
solidbase
/
C2_SimpleBashUtils
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/grep/tests/run_grep_tests.sh
157 строк
4 KB
Dmitrii Isaev
refactor(grep): decompose process.c and options.c per structural programming principles
02 дек 2025, 11:05
02 дек 2025, 11:05
9a23220
Код
Авторство
О чём код?
#!/usr/bin/env bash S21_GREP=./s21_grep SYS_GREP="ggrep --color=never" TEST_DIR=./tests TMP_DIR=./tmp mkdir -p "${TMP_DIR}" failures=0 test_id=1 run_test() { local description="$1" shift local args=("$@") echo "Test ${test_id}: ${description}" echo " Args: ${S21_GREP} ${args[*]}" local my_out="${TMP_DIR}/grep_${test_id}.out" local my_err="${TMP_DIR}/grep_${test_id}.err" local ref_out="${TMP_DIR}/grep_${test_id}_ref.out" local ref_err="${TMP_DIR}/grep_${test_id}_ref.err" ${S21_GREP} "${args[@]}" >"${my_out}" 2>"${my_err}" local s21_status=$? ${SYS_GREP} "${args[@]}" >"${ref_out}" 2>"${ref_err}" local sys_status=$? local status_ok=0 if [ "${s21_status}" -ne "${sys_status}" ]; then echo " STATUS MISMATCH: s21_grep=${s21_status}, ggrep=${sys_status}" status_ok=1 fi if ! diff -u "${ref_out}" "${my_out}" >/dev/null; then echo " STDOUT DIFFERS:" diff -u "${ref_out}" "${my_out}" || true status_ok=1 fi if ! diff -u "${ref_err}" "${my_err}" >/dev/null; then echo " STDERR DIFFERS:" diff -u "${ref_err}" "${my_err}" || true status_ok=1 fi if [ "${status_ok}" -eq 0 ]; then echo " RESULT: OK" else echo " RESULT: FAIL" failures=$((failures + 1)) fi echo test_id=$((test_id + 1)) } run_test "simple pattern, single file" \ "foo" "${TEST_DIR}/file1.txt" run_test "-n: line numbers, two files" \ "-n" "строка" "${TEST_DIR}/file1.txt" "${TEST_DIR}/file2.txt" run_test "-i: case-insensitive search" \ "-i" "abcdef" "${TEST_DIR}/file2.txt" run_test "-v: invert match" \ "-v" "foo" "${TEST_DIR}/file1.txt" run_test "-c: count matches" \ "-c" "строка" "${TEST_DIR}/file1.txt" run_test "-l: list matching files" \ "-l" "строка" "${TEST_DIR}/file1.txt" "${TEST_DIR}/file2.txt" run_test "-h: no filenames in output" \ "-h" "строка" "${TEST_DIR}/file1.txt" "${TEST_DIR}/file2.txt" run_test "-s: suppress error messages (missing file)" \ "-s" "foo" "${TEST_DIR}/file1.txt" "no_such_file.txt" run_test "-e: multiple explicit patterns" \ "-e" "foo" "-e" "строка" "${TEST_DIR}/file1.txt" run_test "-o: only matching parts" \ "-o" "foo" "${TEST_DIR}/file1.txt" run_test "-no: only matching parts with line numbers" \ "-n" "-o" "строка" "${TEST_DIR}/file1.txt" "${TEST_DIR}/file2.txt" run_test "-in: case-insensitive + line numbers" \ "-i" "-n" "abc" "${TEST_DIR}/file2.txt" run_test "-iv: case-insensitive + invert" \ "-i" "-v" "foo" "${TEST_DIR}/file1.txt" run_test "-cv: count non-matching lines" \ "-c" "-v" "foo" "${TEST_DIR}/file1.txt" if [ -f "${TEST_DIR}/patterns.txt" ]; then echo "Additional tests with patterns from ${TEST_DIR}/patterns.txt" echo run_test "-f: patterns from file" \ "-f" "${TEST_DIR}/patterns.txt" "${TEST_DIR}/file1.txt" "${TEST_DIR}/file2.txt" run_test "-nf: line numbers + patterns from file" \ "-n" "-f" "${TEST_DIR}/patterns.txt" "${TEST_DIR}/file1.txt" "${TEST_DIR}/file2.txt" fi run_test "grouped -iv: case-insensitive + invert" \ "-iv" "foo" "${TEST_DIR}/file1.txt" run_test "grouped -in: case-insensitive + line numbers" \ "-in" "abc" "${TEST_DIR}/file2.txt" run_test "grouped -vn: invert + line numbers" \ "-vn" "foo" "${TEST_DIR}/file1.txt" run_test "grouped -hn: no filename + line numbers (single file)" \ "-hn" "строка" "${TEST_DIR}/file1.txt" run_test "grouped -cv: count non-matching lines" \ "-cv" "foo" "${TEST_DIR}/file1.txt" run_test "grouped -lv: list files without matches" \ "-lv" "foo" "${TEST_DIR}/file1.txt" "${TEST_DIR}/file2.txt" run_test "regex: dot matches any char" \ "." "${TEST_DIR}/file1.txt" run_test "regex: ^ anchor at line start" \ "^Первая" "${TEST_DIR}/file1.txt" run_test "regex: $ anchor at line end" \ "строка$" "${TEST_DIR}/file1.txt" run_test "regex: digit character class [0-9]" \ "[0-9]" "${TEST_DIR}/file2.txt" run_test "regex + -o: only digit sequences" \ "-o" "[0-9][0-9]*" "${TEST_DIR}/file2.txt" run_test "regex: foo.* pattern" \ "foo.*" "${TEST_DIR}/file1.txt" if [ "${failures}" -eq 0 ]; then echo "All tests passed." exit 0 else echo "${failures} test(s) failed." exit 1 fi