Testing 结构的Rackunit相等性检查

Testing 结构的Rackunit相等性检查,testing,scheme,racket,Testing,Scheme,Racket,我正在尝试为racket中的编译器测试一个标记器/解析器组合,我有一个函数parse string,合同类型类似于(>string?ast:IntExp)(我知道,我可能应该重命名我的结构,但我在那里试验了一段时间类型化的racket。 不管怎样,我有一个题库,上面写着 (检查相等?(解析字符串“4”)(ast:IntExp 4)),所有测试都失败,即使在手动检查时,它们看起来应该通过。我的所有结构都是用定义结构/契约定义的,并且所有结构都标记为:透明的。 这里怎么了 好的,很抱歉没有包含足够的

我正在尝试为racket中的编译器测试一个标记器/解析器组合,我有一个函数
parse string
,合同类型类似于
(>string?ast:IntExp)
(我知道,我可能应该重命名我的结构,但我在那里试验了一段时间类型化的racket。 不管怎样,我有一个题库,上面写着
(检查相等?(解析字符串“4”)(ast:IntExp 4))
,所有测试都失败,即使在手动检查时,它们看起来应该通过。我的所有结构都是用
定义结构/契约定义的,并且所有结构都标记为
:透明的
。
这里怎么了

好的,很抱歉没有包含足够的源代码以提供帮助:

以下是
IntExp
的结构定义:
(定义结构/契约(IntExp Exp)([val integer?])#:透明)
下面是测试:
(检查相等?(解析字符串“4”)(ast:IntExp 4))
以下是rackunit反馈的投诉:

--------------------
失败
实际值:#(结构:IntExp…4)
应为:#(结构:IntExp…4)
姓名:检查是否相等?
地点:(#8 0 139 48)
表达式:(检查相等?(解析字符串“4”)(ast:IntExp 4))
为了以防万一,这里是我
需要的依赖项:

(需要“lexer.rkt”
“parser.rkt”
解析器工具/lex
(ast中的前缀:“ast.rkt”)
机架单元)


实际的解析器代码有点大,我有一种预感,它不是问题的根源,因为我所有的测试都以这种方式失败(检查结果似乎是正确的)。我敢打赌,我在rackunit中做了一些非常愚蠢的事情。

Rack使用引用相等,因为所讨论的结构继承自不透明结构类型。根据,使不透明父结构透明,或添加
equal?-recur
方法,该方法比较底层结构。

因此,您有一个过程
解析字符串
,该过程计算为一个结构,该结构的另一个版本将使用相同的值初始化
解析字符串
,您得到
的f
用于检查它们之间的相等?我认为您需要如果需要更多帮助,请提供更多代码。