我试图测试一个编译器在球拍中的标记器/解析器组合,并且我有一个函数parse-string
,契约类型为(-> string? ast:IntExp)
(我知道,我应该重命名我的但我正在试验打字球拍一小会儿 无论如何,我有一个测试银行写了 (check-equal? (parse-string "4") (ast:IntExp 4))
这样的东西,所有的测试都失败了,即使经过人工检查,他们看起来应该是他们应该通过我所有的结构都与define-struct/contract
定义,所有的人都标志着#:transparent
。 什么事错在这里?Rackunit等式检查结构
好了,对不起,不包括enoug氢源是有帮助的:
下面是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
ING:
(require "lexer.rkt" "parser.rkt" parser-tools/lex (prefix-in ast: "ast.rkt") rackunit)
实际解析器代码是一种我觉得这不是问题的根源,因为我的所有测试都是以这种方式失败的(检查结果看起来是正确的)。我敢打赌,我在rackunit中做了一件非常愚蠢的事情。
因此,你有一个过程'parse-string',它的结果是一个结构,而另一个结构的版本是用'parse-string'使用的相同的值初始化的,你会得到'#f'作为'check-equal?'它们之间?如果您需要更多帮助,我认为您需要提供更多代码。 – Sylwester 2014-10-05 20:43:00