Мне трудно рассуждать о макрорасширении и задавалось вопросом, какие лучшие методы были для их тестирования.
Итак, если у меня есть макрос, я могу выполнить один уровень расширения макроса через macroexpand-1
.
(defmacro incf-twice (n)
`(progn
(incf ,n)
(incf ,n)))
например
(macroexpand-1 '(incf-twice n))
оценивается как
(PROGN (INCF N) (INCF N))
Кажется достаточно простым, чтобы превратить это в тест для макроса.
(equalp (macroexpand-1 '(incf-twice n))
'(progn (incf n) (incf n)))
Существует ли установленное соглашение для организации тестов для макросов? Кроме того, существует ли библиотека для обобщения различий между s-выражениями?