如何在Racket中使用check-expect

时间:2014-02-01 00:25:05

标签: scheme racket

我正在尝试在方案中使用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)

4 个答案:

答案 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"

更多信息:RackUnit documentation

答案 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)运行测试。