我正在尝试在方案中使用check-expect函数,但我一直被告知它是一个未绑定的check-expect标识符。不检查 - 期待我已经可以使用的功能吗?以下是我的代码:
#lang racket
(define contains (lambda (item list*)
(if (equal? list* '())
#f
(if (equal? item (car list*))
#t
(contains item (cdr list*))))))
(define z (list 1 2 3))
(define q (list 4 5 6))
(define p (list "apple" "orange" "carrot"))
(check-expect (contains 1 z) #t)
答案 0 :(得分:6)
check-expect
在技术上并未自动构建到方案或Racket中。
请注意,您使用的是#lang racket
。这是专业的Racket语言,该语言希望您知道并明确说明要导入的库。它不会为您自动导入它们。
(现在,您可能需要一个unit testing library;还有一个随Racket标准库一起提供。)
但是如果你刚开始学习编程,那么在Racket中使用teaching languages之一更有意义。
对于你上面使用的代码,我怀疑你可能会想要这个代码。启动DrRacket并从“语言”菜单中的“如何设计程序”子菜单中选择“初学者学生语言”。
有关详细信息,请参阅http://www.ccs.neu.edu/home/matthias/HtDP2e/prologue.html。
答案 1 :(得分:1)
我设法提出了这个解决方法:
在文件的顶部(但在#lang racket
之后)添加了一行
(require rackunit)
而不是(check-expect)
我使用了
(check-equal? (member? "a" (list "b" "a")) #f )
与check-expect
不同,必须在函数定义之后添加。
如果检查成功,则无输出。只有在测试失败时,输出才会如下所示:
--------------------
FAILURE
name: check-equal?
actual: #f
expected: #t
expression: (check-equal? #f (member? "a" (list "b" "a")))
message: "test"
答案 2 :(得分:0)
我使用DrRacket参加了一个课程并查看了终端(Mac)中的第一个作业。
此文件中由DrRacket自动添加的行使得check-expect可用:
(+ 1 2)
作为旁注,我想尝试没有DrRacket的Racket程序。为了测试,我决定做#! /Applications/Racket\ v6.2.1/bin/racket
#lang racket
(+ 1 2)
。为了使它工作,我的文件看起来像这样:
racket test.rkt
我在终端中运行它:
alias racket='/Applications/Racket\ v6.2.1/bin/racket'
我把它放在.bash_profile:
with inactive_runs as (
select
CustID,
row_number() over (partition by CustID order by dd)
- datediff(day, min(dd) over (partition by CustID), dd) as grp
from matrix_dd
where Active = 0
)
select distinct CustID from matrix_dd m
where 3 >= all (
select count(*) from inactive_runs ir
where ir.CustID = m.CustID
group by grp
);
答案 3 :(得分:0)
老问题,但是googlers的回答:
您可以(require test-engine/racket-tests)
,defines check-expect
。
请注意,与BSL不同,您必须使用(test)
运行测试。