Skip to content

Commit 9be5ba7

Browse files
committed
Tests for bitraverseDefault & bisequenceDefault
1 parent 30c13e4 commit 9be5ba7

File tree

1 file changed

+48
-9
lines changed

1 file changed

+48
-9
lines changed

test/Main.purs

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,13 @@ main = do
5050
testBifoldableIOrWith 10 100 42
5151

5252
log "Test Bitraversable on `inclusive or`"
53-
testBitraversableIOr
53+
testBitraversableIOrWith id
54+
55+
log "Test bitraverseDefault"
56+
testBitraversableIOrWith BTD
57+
58+
log "Test bisequenceDefault"
59+
testBitraversableIOrWith BSD
5460

5561
log "All done!"
5662

@@ -207,12 +213,45 @@ testBifoldableIOrWith fst snd u = do
207213
assert $ bifoldMap Additive Additive (Fst fst) == Additive fst
208214
assert $ bifoldMap Additive Additive (Snd snd) == Additive snd
209215

210-
testBitraversableIOr :: forall e. Eff (assert :: ASSERT | e) Unit
211-
testBitraversableIOr = do
212-
assert $ bisequence (Both (Just true) (Just false)) == Just (Both true false)
213-
assert $ bisequence (Fst (Just true)) == Just (Fst true :: IOr Boolean Boolean)
214-
assert $ bisequence (Snd (Just false)) == Just (Snd false :: IOr Boolean Boolean)
215-
assert $ bitraverse Just Just (Both true false) == Just (Both true false)
216-
assert $ bitraverse Just Just (Fst true) == Just (Fst true :: IOr Boolean Boolean)
217-
assert $ bitraverse Just Just (Snd false) == Just (Snd false :: IOr Boolean Boolean)
216+
testBitraversableIOrWith :: forall t e. (Bitraversable t, Eq (t Boolean Boolean)) =>
217+
(forall l r. IOr l r -> t l r) ->
218+
Eff (assert :: ASSERT | e) Unit
219+
testBitraversableIOrWith lift = do
220+
let just a = Just (lift a)
221+
assert $ bisequence (lift (Both (Just true) (Just false))) == just (Both true false)
222+
assert $ bisequence (lift (Fst (Just true))) == just (Fst true :: IOr Boolean Boolean)
223+
assert $ bisequence (lift (Snd (Just false))) == just (Snd false :: IOr Boolean Boolean)
224+
assert $ bitraverse Just Just (lift (Both true false)) == just (Both true false)
225+
assert $ bitraverse Just Just (lift (Fst true)) == just (Fst true :: IOr Boolean Boolean)
226+
assert $ bitraverse Just Just (lift (Snd false)) == just (Snd false :: IOr Boolean Boolean)
227+
228+
229+
-- structures for testing default `Bitraversable` implementations
230+
231+
newtype BitraverseDefault l r = BTD (IOr l r)
232+
newtype BisequenceDefault l r = BSD (IOr l r)
233+
234+
instance eqBTD :: (Eq l, Eq r) => Eq (BitraverseDefault l r) where eq (BTD l) (BTD r) = l == r
235+
instance eqBSD :: (Eq l, Eq r) => Eq (BisequenceDefault l r) where eq (BSD l) (BSD r) = l == r
236+
237+
instance bifunctorBTD :: Bifunctor BitraverseDefault where bimap f g (BTD m) = BTD (bimap f g m)
238+
instance bifunctorBSD :: Bifunctor BisequenceDefault where bimap f g (BSD m) = BSD (bimap f g m)
239+
240+
instance bifoldableBTD :: Bifoldable BitraverseDefault where
241+
bifoldMap f g (BTD m) = bifoldMap f g m
242+
bifoldr f g u (BTD m) = bifoldr f g u m
243+
bifoldl f g u (BTD m) = bifoldl f g u m
244+
245+
instance bifoldableBSD :: Bifoldable BisequenceDefault where
246+
bifoldMap f g (BSD m) = bifoldMap f g m
247+
bifoldr f g u (BSD m) = bifoldr f g u m
248+
bifoldl f g u (BSD m) = bifoldl f g u m
249+
250+
instance bitraversableBTD :: Bitraversable BitraverseDefault where
251+
bitraverse f g = bitraverseDefault f g
252+
bisequence (BTD m) = map BTD (bisequence m)
253+
254+
instance bitraversableBSD :: Bitraversable BisequenceDefault where
255+
bitraverse f g (BSD m) = map BSD (bitraverse f g m)
256+
bisequence m = bisequenceDefault m
218257

0 commit comments

Comments
 (0)