packages feed

grouped-list-0.2.1.1: test/examples.hs

{-# LANGUAGE OverloadedLists #-}

module Main (main) where

import System.Exit (exitFailure)
import Data.GroupedList (Grouped)
import qualified Data.GroupedList as GL
import Control.Monad (unless)
import Data.Functor.Identity

(=:) :: (Show a, Eq a) => a -> a -> IO ()
x =: y = unless (x == y) $ do
  print x
  putStrLn " /= "
  print y
  exitFailure

main :: IO ()
main = do
  (GL.empty :: Grouped ())
    =: []
  (GL.point 0 :: Grouped Int)
    =: [0]
  GL.replicate 3 0
    =: [0,0,0]
  GL.index [1,2,3] 1
    =: Just 2
  GL.index [1,2,3] 3
    =: Nothing
  GL.adjust (+1) 1 [1,2,2]
    =: [1,3,2]
  GL.adjust (+1) 3 [1,2,3]
    =: [1,2,3]
  GL.take 2 [1,1,1,2]
    =: [1,1]
  GL.take 2 [1,2,2,2]
    =: [1,2]
  GL.take 2 [1,2,3,4]
    =: [1,2]
  GL.drop 2 [1,1,1,2]
    =: [1,2]
  GL.drop 2 [1,2,2,2]
    =: [2,2]
  GL.drop 2 [1,2,3,4]
    =: [3,4] 
  GL.map (+1) [1,2,3,4]
    =: [2,3,4,5]
  GL.map (+1) [1,1,2,3]
    =: [2,2,3,4]
  GL.map (const 0) [1,2,2,3]
    =: [0,0,0,0]
  GL.partition even [1,2,3,4]
    =: ([2,4],[1,3])
  GL.partition even [1,2,1,2]
    =: ([2,2],[1,1])
  GL.sort [1,2,1,2]
    =: [1,1,2,2]
  GL.sort [3,2,1,3]
    =: [1,2,3,3]
  GL.zipWith (+) [1,2,1,1] [2,1,1,2]
    =: [3,3,2,3]
  runIdentity (fmap snd $ GL.traverseGroupedByGroupAccum (\acc g -> Identity (acc+1, GL.map (+acc) $ GL.fromGroup g)) 0 [1,2,3,3,4])
    =: [1,3,5,5,7]