欢迎!有关如何使用本站的更多信息,请参阅关于页面。
如果你的代码中有1. },则生成的代码是
cljs.core.into.call(null,cljs.core.PersistentQueue.EMPTY,cljs.core.PersistentVector.EMPTY)
在空向量的情况下,可以生成
cljs.core.PersistentQueue.EMPTY
见https://github.com/clojure/clojurescript/blob/f289ffee2270567f7976d45012a0a52c38eb6488/src/main/clojure/ cljs/tagged_literals.cljc#L21
评论者:colinkahn
这是我尝试的方法。不确定测试是否正确。
评论者:mfikes
嗨,Colin。谢谢您的贡献!您签了CA吗?我没有看到您的名字在这份清单里https://clojure.org/community/contributors
如果没有的话,请参阅https://script.clojure.org/community/contributing
迈克,您好
今天早上做的,已经在我的电子邮件中收到确认。
很好,我会审查补丁。
嗨Colin,
在你的第二次测试中,你是不是想检查这个?
(instance? PersistentQueue #queue [1 2 3])
在实际测试补丁方面,我能想到的只有检查生成的代码。查看
(binding [*print-fn-bodies* true] (pr-str (fn [] #queue [])))
似乎有点笨拙,但你可以检查产生的字符串是否包含 {{PersistentVector}},如果是,则测试失败。
是的,绝对是有意检查类型的。奇怪的是,测试报告中没有失败。我很想知道是否有办法只运行测试的一部分?
你认为使用 with-redefs 怎么样?
`(with-redefs [into (fn [& _] (throw (ex-info "Inefficiently created PersistentQueue" {})))] #queue [])`
`
我不了解是否有办法只运行一部分测试。仅供参考,Travis CI 构建失败https://travis-ci.org/mfikes/clojurescript/builds/430674720
我绝对喜欢你的 with-redefs 方法。这比我的字符串黑客技巧聪明得多 :)
我已经更新了附带的补丁。
当您运行 'lein test' 时,这些测试实际上不会执行,看起来 Travis 会构建并使用 jsc 运行它们。我在本地复制的,不确定是否有命令可以让这变得更容易。
谢谢。我将查看修改过的补丁。这些测试通过{{script/test}}执行。更多详细信息请访问 https://script.clojure.org/community/running-tests
补丁1现在是免费的。
基准测试:1. }
之前
使用V8基准测试[f (fn [] cljs.core/into cljs.core/PersistentQueue.EMPTY [])], (f), 1亿次运行,442毫秒
之后
使用V8基准测试[f (fn [] cljs.core/PersistentQueue.EMPTY)], (f), 1亿次运行,0毫秒
2018/9/19 6:12 PM 的CLJS-2916.patch获得批准。
它通过了所有测试,包括Canary测试。考虑到之前的评论,性能看起来很好。
CLJS-2916.patch已添加到补丁Tender (i)