Skip to content

Commit d39cce6

Browse files
Add some basic tests for mapIncremental
1 parent 6c2411e commit d39cce6

3 files changed

Lines changed: 45 additions & 1 deletion

File tree

src/Reflex/Class.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/{-# LANGUAGE BangPatterns #-}
1+
{-# LANGUAGE BangPatterns #-}
22
{-# LANGUAGE CPP #-}
33
{-# LANGUAGE ConstraintKinds #-}
44
{-# LANGUAGE DefaultSignatures #-}
@@ -38,6 +38,7 @@ module Reflex.Class
3838
, EventSelector (..)
3939
, EventSelectorInt (..)
4040
-- ** 'Incremental'-related types
41+
, mapIncremental
4142
-- * Convenience functions
4243
, constDyn
4344
, pushAlways

test/Reflex/Plan/Pure.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ instance MonadHold (Pure Int) PurePlan where
3939
hold initial = liftPlan . hold initial
4040
holdDyn initial = liftPlan . holdDyn initial
4141
holdIncremental initial = liftPlan . holdIncremental initial
42+
4243
buildDynamic getInitial = liftPlan . buildDynamic getInitial
44+
buildIncremental getInitial = liftPlan . buildIncremental getInitial
4345
headE = liftPlan . headE
4446

4547
instance MonadSample (Pure Int) PurePlan where

test/Reflex/Test/Micro.hs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ scanInnerDyns d = do
4242

4343

4444

45+
4546
{-# ANN testCases "HLint: ignore Functor law" #-}
4647
testCases :: [(String, TestCase)]
4748
testCases =
@@ -282,6 +283,31 @@ testCases =
282283
d' <- pushDyn scanInnerDyns d >>= scanInnerDyns
283284
return $ current d'
284285

286+
, testB "holdIncremental" $ do
287+
inc <- makeIncremental
288+
return (currentIncremental inc)
289+
290+
, testB "unsafeMapIncremental" $ do
291+
inc <- makeIncremental
292+
let f = Map.mapKeys (+1)
293+
g (PatchMap m) = PatchMap (Map.mapKeys (+1) m)
294+
295+
let inc' = unsafeMapIncremental f g inc
296+
return (currentIncremental inc')
297+
298+
, testB "mapIncremental" $ do
299+
300+
-- Not be safe with 'unsafeBuildIncremental' due to key changes
301+
let f = Map.mapKeys (+1)
302+
g (PatchMap m) = PatchMap (Map.mapKeys (+2) m)
303+
304+
rec -- Backwards order, test laziness
305+
inc'' <- mapIncremental f g inc'
306+
inc' <- mapIncremental f g inc
307+
inc <- makeIncremental
308+
309+
return $ currentIncremental inc''
310+
285311
, testE "fan-1" $ do
286312
e <- fmap toMap <$> events1
287313
let es = select (fanMap e) . Const2 <$> values
@@ -331,6 +357,7 @@ testCases =
331357
events2 = plan [(1, "e"), (3, "d"), (4, "c"), (6, "b"), (7, "a")]
332358
events3 = liftA2 mappend events1 events2
333359

360+
334361
eithers :: TestPlan t m => m (Event t (Either String String))
335362
eithers = plan [(1, Left "e"), (3, Left "d"), (4, Right "c"), (6, Right "b"), (7, Left "a")]
336363

@@ -344,3 +371,17 @@ testCases =
344371

345372
deep e = leftmost [e, e]
346373
leftmost2 e1 e2 = leftmost [e1, e2]
374+
375+
376+
makeIncremental :: forall t m. TestPlan t m => m (Incremental t (PatchMap Int String))
377+
makeIncremental = do
378+
e1 <- events1
379+
e2 <- events2
380+
381+
e <- zipListWithEvent (,) [(0::Int)..] (leftmost [e1, e2])
382+
let f (k, v) = Map.fromList $ if odd k
383+
then [(k, Just v)]
384+
else [(k, Nothing)]
385+
386+
holdIncremental (Map.fromList [((1 :: Int), "g"), (2, "b"), (5, "b")])
387+
(PatchMap . f <$> e)

0 commit comments

Comments
 (0)