module Test.Utils (
    forAllLabeled,
    pr12,
    pr23,
    pr3,
) where

import Data.Text (Text)
import Test.Tasty.QuickCheck (
    Gen,
    Property,
    Testable,
    forAll,
    property,
 )

pr12 :: (a, b, c) -> (a, b)
pr12 (x, y, _) = (x, y)

pr23 :: (a, b, c) -> (b, c)
pr23 (_, x, y) = (x, y)

pr3 :: (a, b, c) -> c
pr3 (_, _, x) = x

forAllLabeled ::
    (Testable p, Show a) =>
    Gen a ->
    (Text -> a -> b) ->
    [Text] ->
    ([b] -> p) ->
    Property
forAllLabeled g mkRow (l : ls) mkTest = forAll g $ \z -> forAllLabeled g mkRow ls $ mkTest . (mkRow l z :)
forAllLabeled _ _ _ mkTest = property $ mkTest []