在 Racket 中对程序使用单元测试

Using unit-testing for a procedure in Racket

如果我打电话进来 Racket/Dr。拍下以下代码:

> add1

我得到:

#<procedure:add1>

如果我使用名为 rackunit 的单元测试库,我会尝试这样做:

(require rackunit)

(check-equal? add1 #<procedure:add1>)

测试失败,出现语法错误:

read: bad syntax `#<'

为什么会这样?

对于许多类型的数据,what you write can be read back. But in the case of procedures you can't, and thus it gets outputted as an unreadable value

过程相等就像不透明的结构相等:它只检查身份。如果这就是您所需要的,您仍然可以将过程存储在某个地方并使用 check-equal 吗? (例如,具有 add1 的列表将与具有 add1 的列表进行比较)。如果您需要实际检查程序在逻辑上是否相同,.