- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个事件网络示例,我一直在使用它来调查特定单子(monad) Action 的行为。我想要一种有原则的方法,而不是这种测试我的代码的临时方法。我知道如何测试我的功能,但我正在寻找测试行为和事件的最佳实践,因为 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
Behavior
与
Event
分开上例中的网络,但那又如何呢?从测试中获得准确结果的最佳方法是什么?
main :: IO ()
main = defaultMain
[ testGroup "EventNetwork Input"
[testBuffer "bBuffer" Populated]
]
testBuffer :: String -> BufferState -> Test
testBuffer name Populated =
testCase name $ assert $ bufferPopulated (UAC (PlayerCommand (Move (ToPlanetName Mongo)) (AID (Data.Text.pack "100"))))
testBuffer name Empty =
testCase name $ assert $ bufferEmptied (UAC (PlayerCommand (Move (ToPlanetName Mongo)) (AID (Data.Text.pack "100"))))
bufferPopulated :: UAC -> MomentIO Bool
bufferPopulated ev = do
let eInput = ev <$ never
eValidated = toVAC <$> eInput
bBufferMap <- (buffer eValidated eClear) :: MomentIO (Behavior BufferMap)
let r2 = [(Just $ BufferMap $ M.insert (AID (Data.Text.pack "100")) (toVAC ev) (M.empty :: M.Map AID VAC))]
r1 <- liftIO $ ((interpret (eBuffer bBufferMap) []) :: IO [Maybe BufferMap])
return $ r1 == r2
bufferEmptied :: UAC -> MomentIO Bool
bufferEmptied ev = undefined
eBuffer :: Behavior BufferMap -> Event a -> Event BufferMap
eBuffer bBufferMap nvr =
bBufferMap <@ (() <$ nvr)
eClear = Clear <$ (() <$ never)
tests/Spec.hs:26:19:
No instance for (Test.HUnit.Base.Assertable (MomentIO Bool))
arising from a use of ‘assert’
In the expression: assert
In the second argument of ‘($)’, namely
‘assert
$ bufferPopulated
(UAC
(PlayerCommand (Move (ToPlanetName Mongo)) (AID (pack "100"))))’
In the expression:
testCase name
$ assert
$ bufferPopulated
(UAC
(PlayerCommand (Move (ToPlanetName Mongo)) (AID (pack "100"))))
accumB
创建
Behavior
在
MomemtIO
.如果我有
bufferPopulated
返回
IO Bool
我该如何调和呢?
MomentIO Bool
一样简单吗?实例?
bufferPopulated
的签名
bufferPopulated :: UAC -> IO Bool
bufferPopulated ev = do
let eInput = ev <$ never
eValidated = toVAC <$> eInput
bBufferMap <- liftMoment ((buffer eValidated eClear) :: Moment (Behavior BufferMap))
let r2 = [(Just $ BufferMap $ M.insert (AID (Data.Text.pack "100")) (toVAC ev) (M.empty :: M.Map AID VAC))]
r1 <- (interpret (eBuffer bBufferMap) []) :: IO [Maybe BufferMap])
return $ r1 == r2
tests/Spec.hs:35:17:
No instance for (MonadMoment IO) arising from a use of ‘liftMoment’
In a stmt of a 'do' block:
bBufferMap <- liftMoment
((buffer eValidated eClear) :: Moment (Behavior BufferMap))
MonadMoment
来自
Reactive.Banana.Combinators
class Monad m => MonadMoment m where
An instance of the MonadMoment class denotes a computation that happens at one particular moment in time.
Unlike the Moment monad, it need not be pure anymore.
Methods
liftMoment :: Moment a -> m a
Instances
MonadMoment MomentIO
MonadMoment Moment
m
可以是任何
Monad
,
IO
是
Monad
.所以
liftMoment
应该解除
Moment Behavior (BufferMap)
至
IO Behavior (BufferMap)
,为什么不呢。我的推理有什么问题?
最佳答案
答案的来源来自这个先前的答案。
Testing in reactive-bananainterpretFramwork
需要一个新的签名。
interpretFrameWorks'' :: (Event a -> MomentIO (Behavior b)) -> [a] -> IO (b,[[b]])
interpretFrameWorks'' f xs = do
output <- newIORef []
init <- newIORef undefined
(addHandler, runHandlers) <- newAddHandler
network <- compile $ do
e <- fromAddHandler addHandler
f' <- f e
o <- changes $ f'
i <- valueB $ f'
liftIO $ writeIORef init i
reactimate' $ (fmap . fmap) (\b -> modifyIORef output (++[b])) o
actuate network
bs <- forM xs $ \x -> do
runHandlers x
bs <- readIORef output
writeIORef output []
return bs
i <- readIORef init
return (i, bs)
关于unit-testing - Reactive Banana 1.0.0 - MomentIO() Monad 中的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613120/
我对一个查询进行了“分组”。这是对带有版本的技术部件的查询。 喜欢: ID , GlobalID, Name , DateCreated 413, 17, Mastersc
这个问题在这里已经有了答案: How are strings compared? (7 个答案) 关闭 3 年前。 "banana " False 尽管它们仍然由 6 个字符组成。我看不懂他们?你能
我想要根据标记特征(如 Cream)绑定(bind)不同的方法(在编译时!)。如何实现? 我下面的解决方案无法编译。 如何修复? class Apple class Banana trait Crea
这个问题已经有答案了: How to initialize HashSet values by construction? (24 个回答) 已关闭 4 年前。 我想创建不区分大小写的水果最终 Tre
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
如题,不知道Ruby和Rails有没有这样的辅助方法? 我知道 Ruby 的 join 方法,但它没有考虑“and”。 最佳答案 您正在寻找来自ActiveSupport 的to_sentence:h
我对此进行了测试,似乎事件处理的顺序与源事件中列表的顺序相同。我认为我不能依赖这一点,因为文档仅指出: Emit simultaneous event occurrences. Up to stric
我找到了reactive-banana-wx,想知道是否还有一个类似的gtk包,因为根据http://www.haskell.org/haskellwiki/Reactive-banana react
我目前正在开发一款利用 React Banana 和 SDL 的小游戏。由于目标主要是了解更多有关响应式(Reactive)香蕉和 FRP 的知识,因此我尝试使用动态切换来设置游戏对象的集合,但到目前
当您尝试安装库 reactie-banana-wx 时,出现错误: src\CRUD.hs:10:18: Could not find module `Data.Map': It is a membe
我正在使用 Banana(Kibana 3 的开源端口 https://github.com/LucidWorks/banana/ )可视化存储在 SOLR 中的数据。我在显示堆叠直方图时遇到了一些问
设置 : 我正在使用 Reactive Banana 和 OpenGL,并且我有一个想要旋转的齿轮。我有以下信号: bTime :: Behavior t Int -- the time in ms
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我现在正在 Traveler 中尝试处理独立于玩家的游戏状态更新。作为引用,该项目是 here (开发分支是与此问题相关的分支)。 Libraries/Universe/GameState.hs 有一
在我的突破实现中,有两个主要行为描述了游戏的主要状态: paddlePosition :: Behavior t Point ballPosition :: Behavior t Point 两者都是
我正在尝试实现一个滴答事件,并在下面进行了一个小测试,证明它不起作用。我很想知道为什么它不起作用。 gameloop :: TChan UAC -> IO () gameloo
我正在阅读 Conal Elliot 的论文 "Declarative Event-Oriented Programming"它的示例是使用 Fran 库编写的,该库现已过时。 在我学习 FRP 时,
我有一个运行 Linux 的 BananaPi 作为我的 NAS。它的运行对我来说非常完美。现在,我想配置为从互联网连接它。 但是,当我尝试为设备提供静态 IP 地址时,路由器给出了以下错误消息 Th
我正在用 C# 开发一个相对独特的 WPF 应用程序,接下来我需要以编程方式将 my Buttons(用户可以添加和删除按钮)排列成香蕉状曲线我的按钮是这样的: 我用 StackPanel 试过了,但
我在 Stack Overflow 上查看了许多问题的答案,试图找到解决我在使用 Reactive Banana 库时遇到的问题的方法。所有的答案都使用了一些我不太理解的“mapAccum”魔法。查看
我是一名优秀的程序员,十分优秀!