Edebug предоставляет рудиментарное тестирование покрытия и отображение частоты выполнения.
Тестирование покрытия работает путем сравнения результата каждого выражения с предыдущим результатом; каждая форма в программе считается покрытой, если она вернула два разных значения с момента начала тестирования покрытия в текущей сессии Emacs. Таким образом, чтобы провести тестирование покрытия вашей программы, выполните ее при различных условиях и отметьте, ведет ли она себя правильно; Edebug сообщит вам, когда вы попробовали достаточное количество различных условий, чтобы каждая форма вернула два разных значения.
Тестирование покрытия замедляет выполнение, поэтому оно выполняется только в том случае, если edebug-test-coverage не равно nil. Подсчет частоты выполняется для всех выполнений инструментализированной функции, даже если режим выполнения установлен в Go-nonstop, и независимо от того, включено ли тестирование покрытия.
Используйте C-x X = (edebug-display-freq-count) для отображения как информации о покрытии, так и подсчета частоты для определения. Просто = (edebug-temp-display-freq-count) временно отображает ту же информацию, только до тех пор, пока вы не нажмете другую клавишу.
Эта команда отображает данные подсчета частоты для каждой строки текущего определения.
Она вставляет подсчеты частоты в виде комментариев после каждой строки кода. Вы можете отменить все вставки одной командой undo. Подсчеты появляются под «(» перед выражением или «)» после выражения или в последнем символе переменной. Для упрощения отображения подсчет не показывается, если он равен подсчету более раннего выражения в той же строке.
Символ «=» после подсчета для выражения означает, что выражение возвращало одно и то же значение при каждом вычислении. Другими словами, оно еще не покрыто для целей тестирования покрытия.
Чтобы очистить данные подсчета частоты и покрытия для определения, просто повторно инструментализуйте его с помощью eval-defun.
Например, после вычисления (fac 5) с точкой останова исходного кода и установки edebug-test-coverage в t, когда достигается точка останова, данные частоты выглядят следующим образом:
(defun fac (n)
(if (= n 0) (edebug))
;#6 1 = =5
(if (< 0 n)
;#5 =
(* n (fac (1- n)))
;# 5 0
1))
;# 0
Строки комментариев показывают, что fac был вызван 6 раз. Первое утверждение if вернулось 5 раз с одинаковым результатом; то же самое относится и к условию второго if. Рекурсивный вызов fac не вернулся вовсе.