相关疑难解决方法(0)

为什么`changes`返回`Event t(Future a)`

changes函数有类型Frameworks t => Behavior t a -> Moment t (Event t (Future a)).Future是抽象的,只有一个函数使用它(reactimate').

但是,我可以轻松编写以下函数:

changes' :: Frameworks t => Behavior t a -> Moment t (Event t a)
changes' b = fmap (fmap const b <@>) (changes b)
Run Code Online (Sandbox Code Playgroud)

获得正常(非Future)事件.

这个功能有问题吗?如果没有,为什么原始changes功能有更严格的类型?

haskell reactive-banana

8
推荐指数
1
解决办法
110
查看次数

Reactive Banana 1.0.0 - MomentIO()Monad中的单元测试

这是我用来调查特定monadic动作行为的事件网络示例.我想要一种原则性的方法,而不是这种测试我的代码的特殊方式.我知道如何测试我的功能,但我正在寻找测试行为和事件的最佳实践,给出了新的设计选择reactive-banana 1.0.0

我遗漏了很多,希望我只包括说明问题的必要条件.请告诉我是否应该包含哪些内容,以使问题更加清晰.

makeNetworkDescription ::  Parameters -> MomentIO ()
makeNetworkDescription params = mdo
  eInput <- fromAddHandler (input params)
  eTick <- fromAddHandler (tick params)
  let   
   eValidated :: Event VAC
   eValidated = toVAC <$> eInput

   eClearBuffer = Clear <$ eBuffer

   eBuffer ::Event BufferMap
   eBuffer = bBuffer <@ eTick

  bBuffer <- accumB (BufferMap (M.empty :: M.Map AID VAC))  $
             manageBuffer <$> unionWith (clearBuffer) eValidated eClearBuffer    
 reactimate $ writeOut_Debug <$> eBuffer
Run Code Online (Sandbox Code Playgroud)

缓冲区应该做的是累积的播放器命令(然后在其他地方处理),然后在处理特定批次的播放器命令后清空.在下一次打勾时,它会再次发生.

我希望确保缓冲区在它应该被清除时被清除,并且像它应该那样累积命令.现在,代码工作,我想编写测试,以确保它在我构建这个游戏时继续工作.

我可以在上面的例子中将缓冲区BehaviorEvent网络分开,但那又如何呢?从测试中获得准确结果的最佳方法是什么?

编辑:更新 - 我相信此链接将提供足够的提示.我会对它进行一次尝试并明天报告更多细节. …

haskell unit-testing reactive-banana

8
推荐指数
1
解决办法
240
查看次数

标签 统计

haskell ×2

reactive-banana ×2

unit-testing ×1