packages feed

unicode-0.0: test/Test/Utility.hs

module Test.Utility where

import qualified System.Exit as Exit
import qualified System.IO as IO

import qualified Data.List.HT as ListHT
import qualified Data.Map as Map

import Control.Monad (when, )


checkDuplicates :: (Show a) => [a] -> (a -> Char) -> IO ()
checkDuplicates xs f = do
   let duplicates =
          Map.toList $
          Map.filter (ListHT.lengthAtLeast 2) $
          Map.fromListWith (++) $
          map (\x -> (f x, [x])) xs
   when (not $ null duplicates) $ do
      IO.hPutStrLn IO.stderr "duplicates:"
      mapM_ (IO.hPrint IO.stderr) duplicates
      Exit.exitFailure