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