@@ -16,6 +16,7 @@ import Data.Maybe (Maybe(..))
1616import Data.NonEmpty ((:|))
1717import Data.StrMap as M
1818import Data.Tuple (Tuple (..), fst )
19+ import Data.Traversable (sequence )
1920
2021import Partial.Unsafe (unsafePartial )
2122
@@ -28,6 +29,11 @@ newtype TestStrMap v = TestStrMap (M.StrMap v)
2829instance arbTestStrMap :: (Arbitrary v ) => Arbitrary (TestStrMap v ) where
2930 arbitrary = TestStrMap <<< (M .fromFoldable :: L.List (Tuple String v ) -> M.StrMap v ) <$> arbitrary
3031
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+
3137data Instruction k v = Insert k v | Delete k
3238
3339instance showInstruction :: (Show k , Show v ) => Show (Instruction k v ) where
@@ -54,6 +60,9 @@ runInstructions instrs t0 = foldl step t0 instrs
5460number :: Int -> Int
5561number n = n
5662
63+ toAscArray :: forall a . M.StrMap a -> Array (Tuple String a )
64+ toAscArray = M .toAscUnfoldable
65+
5766strMapTests :: forall eff . Eff (console :: CONSOLE , random :: RANDOM , exception :: EXCEPTION | eff ) Unit
5867strMapTests = do
5968 log " Test inserting into empty tree"
@@ -167,6 +176,19 @@ strMapTests = do
167176 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 )
168177 in resultViaMapWithKey === resultViaLists
169178
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+
170192 log " Bug #63: accidental observable mutation in foldMap"
171193 quickCheck \(TestStrMap m) ->
172194 let lhs = go m
0 commit comments