packages feed

dani-sqlite-0.1.0.0: test-query/Fold.hs

{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

module Fold
  ( testFolds,
  )
where

import Common

testFolds :: TestEnv -> Test
testFolds TestEnv {..} = TestCase $ do
  execute_ conn "CREATE TABLE testf (id INTEGER PRIMARY KEY, t INT)"
  execute_ conn "INSERT INTO testf (t) VALUES (4)"
  execute_ conn "INSERT INTO testf (t) VALUES (5)"
  execute_ conn "INSERT INTO testf (t) VALUES (6)"
  val <- fold_ conn "SELECT id,t FROM testf" sumValues do pure ([], [])
  assertEqual "fold_" val ([3, 2, 1], [6, 5, 4])
  val <- fold conn "SELECT id,t FROM testf WHERE id > ?" (MkSolo (1 :: Int)) sumValues do pure ([], [])
  assertEqual "fold" val ([3, 2], [6, 5])
  val <- foldNamed conn "SELECT id,t FROM testf WHERE id > :id" [":id" := (1 :: Int)] sumValues do pure ([], [])
  assertEqual "fold" val ([3, 2], [6, 5])
  where
    sumValues (accId, accT) (id_ :: Int, t :: Int) = return (id_ : accId, t : accT)