project-m36-0.6: test/DataFrame.hs
import ProjectM36.Client
import ProjectM36.DataFrame
import TutorialD.Interpreter.TestBase
import Test.HUnit
import System.Exit
import qualified Data.Set as S
testList :: Test
testList = TestList [testOrderBy, testLimit, testOffset]
main :: IO ()
main = do
tcounts <- runTestTT testList
if errors tcounts + failures tcounts > 0 then exitFailure else exitSuccess
testOrderBy :: Test
testOrderBy = TestCase $ do
(sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
Right df <- executeDataFrameExpr sessionId dbconn (
DataFrameExpr {
convertExpr = Project (AttributeNames (S.singleton "status")) (RelationVariable "s" ()),
orderExprs = [AttributeOrderExpr "status" AscendingOrder],
offset = Nothing,
limit = Nothing
})
let vals = map (\tup -> case atomForAttributeName "status" tup of
Left err -> error (show err)
Right atom -> atom) (tuples df)
assertEqual "sort order of s" [IntegerAtom 10, IntegerAtom 20, IntegerAtom 30] vals
testOffset :: Test
testOffset = TestCase $ do
(sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
Right df <- executeDataFrameExpr sessionId dbconn (
DataFrameExpr {
convertExpr = Project (AttributeNames (S.singleton "status")) (RelationVariable "s" ()),
orderExprs = [AttributeOrderExpr "status" AscendingOrder],
offset = Just 1,
limit = Nothing
})
let vals = map (\tup -> case atomForAttributeName "status" tup of
Left err -> error (show err)
Right atom -> atom) (tuples df)
assertEqual "sort + offset" [IntegerAtom 20, IntegerAtom 30] vals
testLimit :: Test
testLimit = TestCase $ do
(sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
Right df <- executeDataFrameExpr sessionId dbconn (
DataFrameExpr {
convertExpr = Project (AttributeNames (S.singleton "status")) (RelationVariable "s" ()),
orderExprs = [AttributeOrderExpr "status" DescendingOrder],
offset = Nothing,
limit = Just 1
})
let vals = map (\tup -> case atomForAttributeName "status" tup of
Left err -> error (show err)
Right atom -> atom) (tuples df)
assertEqual "sort + limit" [IntegerAtom 30] vals