@@ -10,9 +10,12 @@ import Data.FoldableWithIndex (foldlWithIndex, foldrWithIndex, foldMapWithIndex)
10
10
import Data.Function (on )
11
11
import Data.List as L
12
12
import Data.List.NonEmpty as NEL
13
+ import Data.Map as M
13
14
import Data.Maybe (Maybe (..), fromMaybe )
15
+ import Data.Profunctor.Strong (first )
14
16
import Data.Semigroup.First (First (..))
15
17
import Data.Semigroup.Last (Last (..))
18
+ import Data.String (toUpper )
16
19
import Data.Traversable (sequence , traverse )
17
20
import Data.TraversableWithIndex (traverseWithIndex )
18
21
import Data.Tuple (Tuple (..), fst , snd , uncurry )
@@ -150,6 +153,14 @@ objectTests = do
150
153
quickCheck (O .lookup " 1" nums == Just " one" <?> " invalid lookup - 1" )
151
154
quickCheck (O .lookup " 2" nums == Nothing <?> " invalid lookup - 2" )
152
155
156
+ log " fromFoldableWithIndex & key collision"
157
+ do
158
+ let numsMap = M .fromFoldable [Tuple 0 " zero" , Tuple 1 " what" , Tuple 1 " one" ]
159
+ nums = O .fromFoldableWithIndex show numsMap
160
+ quickCheck (O .lookup " 0" nums == Just " zero" <?> " invalid lookup - 0" )
161
+ quickCheck (O .lookup " 1" nums == Just " one" <?> " invalid lookup - 1" )
162
+ quickCheck (O .lookup " 2" nums == Nothing <?> " invalid lookup - 2" )
163
+
153
164
log " fromFoldableWith const [] = empty"
154
165
quickCheck (O .fromFoldableWith const [] == (O .empty :: O.Object Unit )
155
166
<?> " was not empty" )
@@ -170,6 +181,15 @@ objectTests = do
170
181
let f m1 = O .fromFoldable ((O .toUnfoldable m1) :: L.List (Tuple String Int )) in
171
182
O .toUnfoldable (f m) == (O .toUnfoldable m :: L.List (Tuple String Int )) <?> show m
172
183
184
+ log " fromFoldableWithIndex id = id"
185
+ quickCheck $ \(TestObject m :: _ Int ) ->
186
+ O .fromFoldableWithIndex identity m == identity m <?> show m
187
+
188
+ log " fromFoldableWithIndex f ~ fromFoldable . map (first f) . toUnfoldable"
189
+ quickCheck $ \(TestObject m) ->
190
+ O .fromFoldableWithIndex toUpper m ==
191
+ O .fromFoldable (first toUpper <$> (O .toUnfoldable m :: L.List (Tuple String Int ))) <?> show m
192
+
173
193
log " fromFoldableWith const = fromFoldable"
174
194
quickCheck $ \arr -> O .fromFoldableWith const arr ==
175
195
O .fromFoldable (arr :: L.List (Tuple String Int )) <?> show arr
0 commit comments