如何在haskell quickcheck中生成随机json diffs

时间:2018-01-11 20:13:05

标签: haskell quickcheck

我需要测试可以观察一些json http资源的状态的框架(我在这里简化了一点)并且可以将有关其更改的信息发送到消息队列,以便基于此框架的服务客户端可以重建实际国家没有民意调查http资源。

很容易为这种框架制定属性。假设我们有一个三元组列表State, Diff, Timestamp gen_states = [(gs1, Nothing, t1), (gs2, Just d1-2, t2), (gs3, Just d2-3, t3), (gs4, Just d3-4, t4)] 在将所有这些状态镜像到http资源(用作测试双精度)后,我们收集了[rs1, rd1-2, rd2-3] r代表收到的信息。

apply [rd1-2, rd2-3] rs1 == gs4最终状态应该是相同的

另外,假设轮询间隔大于变化t3-t2之间的时间差,而不是我们可以松散差异d2-3,但状态仍然必须包含在之前轮询中的状态{{1} }。所以我们可能会错过一些更改,但收到的状态应该包含在之前的一些状态中,这些状态不迟于之前的一个轮询间隔。

问题是如何创建一个为json资源生成随机差异的生成器,因为资源始终是一个都具有gs2 for example密钥的对象数组。

例如初始状态可能看起来像那样

id

下一个州

[
  {"id": "1", "some": {"complex": "value"}},
  {"id": "2", "other": {"simple": "value"}}
]

哪个应该像差异一样

[
  {"id": "1", "some": {"complex": "value"}},
  {"id": "3", "other": "simple_value"}
]

我试图为type Id = String data Diff = Diff {removed :: [Id], added :: [(Id, JsonValue)]} added = [aesonQQ| {"id": 3, "other": "simple_value"} |] Diff [2] [added] 推导Arbitrary,但得到了这个

Object

但即使我完成了,我如何指定<interactive>:15:1: warning: [-Wmissing-methods] • No explicit implementation for ‘arbitrary’ • In the instance declaration for ‘Arbitrary (unordered-containers-0.2.8.0:Data.HashMap.Base.HashMap Data.Text.Internal.Text Value)’ 应该有新的唯一ID?

0 个答案:

没有答案