packages feed

dataframe-0.2.0.2: tests/Operations/GroupBy.hs

{-# LANGUAGE OverloadedStrings #-}
module Operations.GroupBy where

import qualified DataFrame as D
import qualified DataFrame as DI
import qualified DataFrame as DE
import qualified Data.Text as T
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as VU

import Assertions
import Test.HUnit

values :: [(T.Text, DI.Column)]
values = [ ("test1", DI.fromList (concatMap (replicate 10) [1 :: Int, 2, 3, 4]))
         , ("test2", DI.fromList (take 40 $ cycle [1 :: Int,2]))
         , ("test3", DI.fromList [(1 :: Int)..40])
         , ("test4", DI.fromList (reverse [(1 :: Int)..40]))
         ]

testData :: D.DataFrame
testData = D.fromNamedColumns values

groupBySingleRowWAI :: Test
groupBySingleRowWAI = TestCase (assertEqual "Groups by single column"
                (D.fromNamedColumns [("test1", DI.fromList [(1::Int)..4]),
                                        -- This just makes rows with [1, 2] for every unique test1 row
                                        ("test2", DI.GroupedUnboxedColumn (V.replicate 4 $ VU.fromList (take 10 $ cycle [1 :: Int, 2]))),
                                        ("test3", DI.GroupedUnboxedColumn (V.generate 4 (\i -> VU.fromList [(i * 10 + 1)..((i + 1) * 10)]))),
                                        ("test4", DI.GroupedUnboxedColumn (V.generate 4 (\i -> VU.fromList [(((3 - i) + 1) * 10),(((3 - i) + 1) * 10 - 1)..((3 - i) * 10 + 1)])))
                                        ])
                (D.groupBy ["test1"] testData D.|> D.sortBy D.Ascending ["test1"]))

groupByMultipleRowsWAI :: Test
groupByMultipleRowsWAI = TestCase (assertEqual "Groups by single column"
                (D.fromNamedColumns [("test1", DI.fromList$ concatMap (replicate 2) [(1::Int)..4]),
                                        ("test2", DI.fromList (take 8 $ cycle [1 :: Int, 2])),
                                        ("test3", DI.GroupedUnboxedColumn (V.fromList [
                                                        VU.fromList [1 :: Int,3..9],
                                                        VU.fromList [2,4..10],
                                                        VU.fromList [11,13..19],
                                                        VU.fromList [12,14..20],
                                                        VU.fromList [21,23..29],
                                                        VU.fromList [22,24..30],
                                                        VU.fromList [31,33..39],
                                                        VU.fromList [32,34..40]
                                                ])),
                                        ("test4", DI.GroupedUnboxedColumn (V.fromList $ reverse [
                                                        VU.fromList [1 :: Int,3..9],
                                                        VU.fromList [2,4..10],
                                                        VU.fromList [11,13..19],
                                                        VU.fromList [12,14..20],
                                                        VU.fromList [21,23..29],
                                                        VU.fromList [22,24..30],
                                                        VU.fromList [31,33..39],
                                                        VU.fromList [32,34..40]
                                                ]))
                                        ])
                (D.groupBy ["test1", "test2"] testData D.|> D.sortBy D.Ascending ["test1", "test2"]))

groupByColumnDoesNotExist :: Test
groupByColumnDoesNotExist = TestCase (assertExpectException "[Error Case]"
                                (DE.columnNotFound "[\"test0\"]" "groupBy" (D.columnNames testData))
                                (print $ D.groupBy ["test0"] testData))

tests :: [Test]
tests = [ TestLabel "groupBySingleRowWAI" groupBySingleRowWAI
        , TestLabel "groupByMultipleRowsWAI" groupByMultipleRowsWAI
        , TestLabel "groupByColumnDoesNotExist" groupByColumnDoesNotExist
        ]