packages feed

fix-whitespace-0.1: test/QuickCheck.hs

{-# LANGUAGE TemplateHaskell #-}

-- | Test 'dropWhileEnd1'.

module Main where

import Data.Maybe            ( isJust )

import Test.QuickCheck.All   ( allProperties )
import Test.Tasty            ( defaultMain )
import Test.Tasty.QuickCheck ( testProperties )

import Data.List.Extra.Drop  ( dropWhile1, dropWhileEnd1 )

-- | If the predicate is true for exactly one value, we can express 'dropWhileEnd1' in terms of 'dropWhile1'.
--
--   Example: predicate 'not' holds only for 'False'.
--
prop_dropWhileEnd1_Bool :: [Bool] -> Bool
prop_dropWhileEnd1_Bool xs = dropWhileEnd1 not xs == (reverse . dropWhile1 not . reverse) xs

-- | If the predicate is *not* a singleton, this relation does not hold.
--
prop_dropWhileEnd1_Maybe_Bool :: Bool
prop_dropWhileEnd1_Maybe_Bool = l /= r
  where
  xs = [Just True, Just False]
  l  = dropWhileEnd1 isJust xs                     -- Just True
  r  = (reverse . dropWhile1 isJust . reverse) xs  -- Just False

-- Pseudo Template Haskell instruction to make $allProperties work
return []

main :: IO ()
main = defaultMain $ testProperties "Tests" $allProperties