Общий лисп: как запускать лямбда-тесты
Я использую пример let-over-lambda Дуга Хойта и The Phoeron, чтобы одновременно укрепить мое понимание пакетов с общим списком, quicklisp и asdf и профессиональных практик для программирования на уровне общего масштабирования на уровне lisp.
Я могу использовать пакет способами, показанными ниже, но еще не выяснил, как запустить его тесты, используя похожие догадки. Подробности следуют.
Я нашел код здесь: https://github.com/thephoeron/let-over-lambda. Я использую подход "пожарный шланг" и "догадки с постепенным образованием", чтобы как можно быстрее втиснуть в мою голову, используя это в качестве путеводителя. Конечно, этот подход оставит мне больше размытых пятен знаний по пути, чем более структурированный подход, но он может привести меня к вершине горы быстрее (не стесняйтесь отвлекать меня от этой идеи).
На моем нынешнем элементарном уровне понимания я могу использовать пакет в своем собственном коде. Например, я могу написать
(load "~/quickload/setup.lisp")
(ql:quickload "let-over-lambda")
(let-overlambda:flatten '((a . b) c (d e)))
и получить
(A B C D E)
Я могу заметить, что пакет определяет псевдоним, lol
прочитав defpackage
в "package.lisp", а именно (сокращенно):
(defpackage #:let-over-lambda
(:nicknames #:lol)
(:use #:cl #:cl-user #:cl-ppcre)
Я могу использовать псевдоним:
(lol:flatten '((a . b) c (d e)))
=> (A B C D E)
и даже импортировать его экспорт, избавляясь от необходимости уточнять символы:
(use:package :lol)
(flatten '((a . b) c (d e)))
=> (A B C D E)
Теперь я заметил, что репозиторий содержит дразнящий тестовый пакет и каталог "t":
-rw-r--r-- 1 921 Dec 5 05:27 let-over-lambda-test.asd
-rw-r--r-- 1 941 Dec 5 05:27 let-over-lambda.asd
-rw-r--r-- 1 17421 Dec 5 05:27 let-over-lambda.lisp
-rw-r--r-- 1 1771 Dec 5 05:27 package.lisp
drwxr-xr-x 3 102 Dec 5 05:27 t
Однако я не смог понять, как проводить тесты, и это мой вопрос: как мне это сделать? Вот некоторые вещи, которые я безуспешно пытался использовать в sbcl 1.3.1:
* (ql:quickload "let-over-lambda-test")
debugger invoked on a QUICKLISP-CLIENT:SYSTEM-NOT-FOUND in thread
#<THREAD "main thread" RUNNING {1002ACC943}>:
System "let-over-lambda-test" not found
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Try again
1: [ABORT ] Give up on "let-over-lambda-test"
2: Exit debugger, returning to top level.
((LABELS QUICKLISP-CLIENT::RECURSE :IN QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY) "let-over-lambda-test")
0]
и это
* (load "./t/let-over-lambda.lisp")
While evaluating the form starting at line 3, column 0
of #P"/Users/bbeckman/Documents/let-over-lambda/./t/let-over-lambda.lisp":
debugger invoked on a SB-KERNEL:SIMPLE-PACKAGE-ERROR in thread
#<THREAD "main thread" RUNNING {1002ACC943}>:
The name "PROVE" does not designate any package.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [RETRY ] Retry EVAL of current toplevel form.
1: [CONTINUE] Ignore error and continue loading file "/Users/bbeckman/Documents/let-over-lambda/./t/let-over-lambda.lisp".
2: [ABORT ] Abort loading file "/Users/bbeckman/Documents/let-over-lambda/./t/let-over-lambda.lisp".
3: Exit debugger, returning to top level.
(SB-INT:%FIND-PACKAGE-OR-LOSE "PROVE")
0]
РЕДАКТИРОВАТЬ: быстрая загрузка "доказать", как показано ниже, загрузила кучу более интересных вещей в мою среду, но все равно оставила меня не знающим, как запустить тесты. Я бы подумал, что "доказать" будет автоматически загружен как зависимость от defsystem
в "let-over-lambda-test", так что это был небольшой сюрприз:
* (ql:quickload "prove")
To load "prove":
Load 2 ASDF systems:
alexandria cl-ppcre
Install 5 Quicklisp releases:
anaphora cl-ansi-text cl-colors let-plus prove
; Fetching #<URL "http://beta.quicklisp.org/archive/anaphora/2011-06-19/anaphora-0.9.4.tgz">
; 5.02KB
==================================================
5,136 bytes in 0.00 seconds (5015.63KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/let-plus/2013-12-11/let-plus-20131211-git.tgz">
; 10.52KB
==================================================
10,768 bytes in 0.00 seconds (0.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/cl-colors/2015-03-02/cl-colors-20150302-git.tgz">
; 14.11KB
==================================================
14,449 bytes in 0.06 seconds (220.47KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/cl-ansi-text/2015-08-04/cl-ansi-text-20150804-git.tgz">
; 5.74KB
==================================================
5,876 bytes in 0.00 seconds (5738.28KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/archive/prove/2015-08-04/prove-20150804-git.tgz">
; 854.08KB
==================================================
874,578 bytes in 3.35 seconds (254.95KB/sec)
; Loading "prove"
[package alexandria.0.dev]........................
..................................................
[package anaphora]................................
[package anaphora-basic]..........................
[package anaphora-symbol].........................
[package let-plus]................................
[package cl-colors]...............................
[package cl-ansi-text]............................
[package prove.output]............................
[package prove.report]............................
[package prove.reporter]..........................
[package prove.asdf]..............................
[package prove.suite].............................
[package prove.test]..............................
[package prove.color].............................
[package prove]...................................
[package prove.reporter.tap]......................
[package prove.reporter.fiveam]...................
[package prove.reporter.list].....................
[package prove.reporter.dot].
("prove")
* (ql:quickload "let-over-lambda-test")
debugger invoked on a QUICKLISP-CLIENT:SYSTEM-NOT-FOUND in thread
#<THREAD "main thread" RUNNING {1002ACC943}>:
System "let-over-lambda-test" not found
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Try again
1: [ABORT ] Give up on "let-over-lambda-test"
2: Exit debugger, returning to top level.
((LABELS QUICKLISP-CLIENT::RECURSE :IN QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY) "let-over-lambda-test")
0] 2
Буду благодарен за любое руководство.
1 ответ
Тест ASDF определен таким образом, оценивая
(asdf:test-system #:let-over-lambda)
должен сделать свое дело. Возможно, вам сначала понадобится загрузить систему let-over-lambda-test.