@@ -16,6 +16,7 @@ import Data.Maybe (Maybe(..))
16
16
import Data.NonEmpty ((:|))
17
17
import Data.StrMap as M
18
18
import Data.Tuple (Tuple (..), fst )
19
+ import Data.Traversable (sequence )
19
20
20
21
import Partial.Unsafe (unsafePartial )
21
22
@@ -28,6 +29,11 @@ newtype TestStrMap v = TestStrMap (M.StrMap v)
28
29
instance arbTestStrMap :: (Arbitrary v ) => Arbitrary (TestStrMap v ) where
29
30
arbitrary = TestStrMap <<< (M .fromFoldable :: L.List (Tuple String v ) -> M.StrMap v ) <$> arbitrary
30
31
32
+ newtype SmallArray v = SmallArray (Array v )
33
+
34
+ instance arbSmallArray :: (Arbitrary v ) => Arbitrary (SmallArray v ) where
35
+ arbitrary = SmallArray <$> Gen .resize 3 arbitrary
36
+
31
37
data Instruction k v = Insert k v | Delete k
32
38
33
39
instance showInstruction :: (Show k , Show v ) => Show (Instruction k v ) where
@@ -54,6 +60,9 @@ runInstructions instrs t0 = foldl step t0 instrs
54
60
number :: Int -> Int
55
61
number n = n
56
62
63
+ toAscArray :: forall a . M.StrMap a -> Array (Tuple String a )
64
+ toAscArray = M .toAscUnfoldable
65
+
57
66
strMapTests :: forall eff . Eff (console :: CONSOLE , random :: RANDOM , exception :: EXCEPTION | eff ) Unit
58
67
strMapTests = do
59
68
log " Test inserting into empty tree"
@@ -167,6 +176,19 @@ strMapTests = do
167
176
resultViaLists = m # M .toUnfoldable # map (\(Tuple k v) → Tuple k (f k v)) # (M .fromFoldable :: forall a . L.List (Tuple String a ) -> M.StrMap a )
168
177
in resultViaMapWithKey === resultViaLists
169
178
179
+ log " sequence works (for m = Array)"
180
+ quickCheck \(TestStrMap mOfSmallArrays :: TestStrMap (SmallArray Int )) ->
181
+ let m = (\(SmallArray a) -> a) <$> mOfSmallArrays
182
+ Tuple keys values = A .unzip (toAscArray m)
183
+ resultViaArrays = (M .fromFoldable <<< A .zip keys) <$> sequence values
184
+ in A .sort (sequence m) === A .sort (resultViaArrays)
185
+
186
+ log " sequence works (for m = Maybe)"
187
+ quickCheck \(TestStrMap m :: TestStrMap (Maybe Int )) ->
188
+ let Tuple keys values = A .unzip (toAscArray m)
189
+ resultViaArrays = (M .fromFoldable <<< A .zip keys) <$> sequence values
190
+ in sequence m === resultViaArrays
191
+
170
192
log " Bug #63: accidental observable mutation in foldMap"
171
193
quickCheck \(TestStrMap m) ->
172
194
let lhs = go m
0 commit comments