Unit testing 球拍散列相等

Unit testing 球拍散列相等,unit-testing,lisp,racket,Unit Testing,Lisp,Racket,我一直在玩弄球拍和架子。我正在将我的小静态站点生成器移植到Racket并编写单元测试的过程中,遇到了这个奇怪的问题 #lang racket (require (planet esilkensen/yaml:2:1)) (require rackunit) (define some-yaml (string->yaml " - name : ding")) (check-equal? some-yaml '(#hash(("name" . "ding"))) ) 有人能向我解释

我一直在玩弄球拍和架子。我正在将我的小静态站点生成器移植到Racket并编写单元测试的过程中,遇到了这个奇怪的问题

#lang racket
(require (planet esilkensen/yaml:2:1))
(require rackunit)

(define some-yaml 
  (string->yaml " - name : ding"))

(check-equal? some-yaml '(#hash(("name" . "ding"))) )
有人能向我解释一下为什么测试失败,结果如下:

Welcome to DrRacket, version 5.3.3 [3m].
Language: racket; memory limit: 128 MB.
--------------------
FAILURE
name:       check-equal?
location:   (#<path:/home/ding/Documents/racket/blog-generator> 7 0 119 45)
expression: (check-equal? x '(#hash(("name" . "ding"))))
actual:     (#hash(("name" . "ding")))
expected:   (#hash(("name" . "ding")))
欢迎使用DrRacket,版本5.3.3[3m]。
语言:球拍;内存限制:128 MB。
--------------------
失败
姓名:检查是否相等?
地点:(#7 0 119 45)
表达式:(检查等于?x'(#散列((“名称”。“丁”)))
实际:(#散列((“名称”“丁”))
应为:(#散列((“名称”“丁”))

”#散列(…)
在源代码中被读取为不可变散列,但看起来库生成了可变散列。(不幸的是,它们打印的是相同的。)

我的猜测是
string->yaml
的结果是一个可变散列,它永远不等于不可变散列(请参见)。

这与可变散列与不可变散列有关。以下测试将通过:

(check-equal? some-yaml (list (make-hash '(("name" . "ding")))))
其中是可变哈希构造函数

正如Eli提到的,可变哈希和不可变哈希以相同的方式打印是令人困惑的,所以我报告了一个bug