首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为test.check生成随机密钥?

如何为test.check生成随机密钥?
EN

Stack Overflow用户
提问于 2022-01-21 19:19:26
回答 2查看 115关注 0票数 0

我正在使用test.check生成一个hashmap。我想要一个随机的数字关键字--这就是我尝试过的

代码语言:javascript
复制
(gen/hash-map
  :16 gen/nat
  :1041 gen/string
  (keyword (str gen/nat)) gen/string)

这对于前两个键很好,但是gen/sample返回最后一个键的函数,而不是一个值。来自gen/sample {:16 1, :1041 "»", :clojure.test.check.generators.Generator@3daf97b7 "u"}的输出

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-21 22:55:02

下面是一个使用gen/bind的示例

代码语言:javascript
复制
user> (require '[clojure.test.check.generators :as gen])
nil
user> (gen/sample (gen/bind gen/nat
                            #(gen/hash-map
                              :16 gen/nat
                              :1041 gen/string
                              (keyword (str %)) gen/string)))
({:16 0, :1041 "", :0 ""}
 {:16 1, :1041 "—", :1 "Õ"}
 {:16 1, :1041 "~", :2 "{"}
 {:16 0, :1041 "", :0 ""}
 {:16 1, :1041 "}", :2 "š¤#"}
 {:16 4, :1041 "", :4 "ÂêÃ"}
 {:16 6, :1041 "¯¾ùPêà", :1 "xaÝ$"}
 {:16 1, :1041 "", :4 "ž"}
 {:16 7, :1041 "", :3 "Ù¡"}
 {:16 3, :1041 "‚«¤s", :5 "ƶoÒA“"})
user> 

这里有一个使用gen/fmap

代码语言:javascript
复制
user> (gen/sample (gen/fmap (fn [[m n s]] (assoc m (keyword (str n)) s))
                            (gen/tuple (gen/hash-map
                                        :16 gen/nat
                                        :1041 gen/string)
                                       gen/nat gen/string)))
({:16 0, :1041 "", :0 ""}
 {:16 0, :1041 "", :1 "Ô"}
 {:16 2, :1041 "`", :0 "V²"}
 {:16 1, :1041 "X", :2 "b"}
 {:16 3, :1041 "JÓ", :2 ""}
 {:16 2, :1041 "", :2 ""}
 {:16 2, :1041 "", :2 "×kîj"}
 {:16 0, :1041 "", :0 ""}
 {:16 5, :1041 "ÎÖ", :0 ":üv-`"}
 {:16 8, :1041 "¬KéÎêo\r", :4 "ÆÌ"})
user> 

在这种情况下,您必须使用gen/fmapgen/bind。这两种方法都允许您操作生成器的输出。如果要返回生成器,请使用gen/bind。如果您想返回一个值,那么使用gen/fmapgen/fmapgen/bind都使用两个参数,其中一个是生成器,另一个参数是一个函数,它以第一个参数生成的值作为输入,并返回生成器( gen/bind)或值( gen/fmap)。

票数 3
EN

Stack Overflow用户

发布于 2022-01-21 19:56:37

您需要使用Clojure.test.check.generers/fmap将您的函数(strkeyword)应用于生成器。

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

https://stackoverflow.com/questions/70806594

复制
相关文章

相似问题

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