首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rackunit相等-检查结构

Rackunit相等-检查结构
EN

Stack Overflow用户
提问于 2014-10-05 17:46:21
回答 1查看 523关注 0票数 1

我正在尝试测试racket中编译器的标记器/解析器组合,并且我有一个函数parse-string,契约类型类似于(-> string? ast:IntExp) (我知道,我可能应该重命名我的结构,但我在那里试验了一小段时间。不管怎样,我有一个测试库,上面写着(check-equal? (parse-string "4") (ast:IntExp 4))之类的东西,而且所有的测试都失败了,尽管在手动检查时,它们看起来应该通过。我的所有结构都是用define-struct/contract定义的,它们都被标记为#:transparent。这里出什么问题了?

好吧,很抱歉没有包括足够的资料来帮助我们:

以下是IntExp的结构定义:(define-struct/contract (IntExp Exp) ([val integer?]) #:transparent),这是测试:(check-equal? (parse-string "4") (ast:IntExp 4)),这是抱怨rackunit返回的内容:

-------------------- FAILURE actual: #(struct:IntExp ... 4) expected: #(struct:IntExp ... 4) name: check-equal? location: (#<path:/Users/clem/dev/tiger/parser-lexer-tests.rkt> 8 0 139 48) expression: (check-equal? (parse-string "4") (ast:IntExp 4)),以防万一,这里是我require的依赖项:

(require "lexer.rkt" "parser.rkt" parser-tools/lex (prefix-in ast: "ast.rkt") rackunit)

实际的解析器代码有点大,我有一种预感它不是问题的根源,因为我的所有测试都是这样失败的(经过检查,结果似乎是正确的)。我打赌我正在做一些很愚蠢的事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-18 16:26:57

因为从不透明的结构类型继承的结构,球拍使用的是引用相等。根据医生们,要么使不透明父结构透明,要么添加比较底层结构的equal?-recur方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26205442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档