Как использовать среду тестирования Common Lisp «Доказательство»? - PullRequest
0 голосов
/ 06 июня 2019

Итак, у меня есть этот файл с именем test.lisp .Вот оно:

(in-package :cl-user)
(defpackage test
  (:use :cl
    :prove))
(in-package :test)

(defun square (x) (* x x))

(plan 3)

(ok (not (find 4 '(1 2 3))))
(is 4 4)
(is (square 3) 9)

(finalize)

Когда я загружаю этот файл, т. Е.

(load "test.lisp")

, 3 теста завершены - это успешно;но когда я пытаюсь вызвать функцию square, я получаю сообщение о том, что square не определено.

Почему это происходит?

Я хотел бы знать, как использовать Prove для файла src.

Спасибо

Ответы [ 3 ]

2 голосов
/ 06 июня 2019

Как следует из комментария coredump, ваша проблема может быть не связана с prove, и вам следует привыкнуть к логике пакетов CL.

Если вам нужна дополнительная информация о тестировании , в кулинарной книге CL .

есть очень хорошие примеры.
1 голос
/ 08 июня 2019

Ваше определение пакета должно export имена в пакете, к которому вы хотите получить доступ извне пакета:

(in-package :cl-user)

(defpackage test
  (:use :cl
    :prove)
  (:documentation "My new test package.")
  (:export :square)) ;; add more functions/variables if you want to make them
                     ;; available for user who imports this package 'test'

(in-package :test)

Теперь, после (load "test.lisp") :export ed имена доступны внепакет.Или сделайте так, как предложил @coredump - без :export ing -:

доступ к не :export ed именам внутри пакета с помощью test::square (<packagename>::<func/var-name>).

0 голосов
/ 09 июня 2019

Я решил это, экспортировав процедуру square; вот так:

(in-package :cl-user)
(defpackage test
  (:use :cl
    :prove)
  (:export :square)) ; like so - exporting `square`
(in-package :test)

(defun square (x) (* x x))

(plan 3)

(ok (not (find 4 '(1 2 3))))
(is 4 4)
(is (square 3) 9)

(finalize)

Затем я загрузил файл и оценил:

(use-package :test)

Мне удалось позвонить square. Woohoo!

...