packages feed

persistent-test-2.13.2.1: src/LargeNumberTest.hs

{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}

module LargeNumberTest where

import Data.Word

import Init

share
    [mkPersist sqlSettings{mpsGeneric = True}, mkMigrate "numberMigrate"]
    [persistLowerCase|
  Number
    intx Int
    int32 Int32
    word32 Word32
    int64 Int64
    word64 Word64
    deriving Show Eq
|]

cleanDB
    :: (Runner backend m) => ReaderT backend m ()
cleanDB = do
    deleteWhere ([] :: [Filter (NumberGeneric backend)])

specsWith :: (Runner backend m) => RunDb backend m -> Spec
specsWith runDb = describe "Large Numbers" $ do
    it "preserves their values in the database" $ runDb $ do
        let
            go x = do
                xid <- insert x
                x' <- get xid
                liftIO $ x' @?= Just x

        go $ Number maxBound 0 0 0 0
        go $ Number 0 maxBound 0 0 0
        go $ Number 0 0 maxBound 0 0
        go $ Number 0 0 0 maxBound 0
        go $ Number 0 0 0 0 maxBound

        go $ Number minBound 0 0 0 0
        go $ Number 0 minBound 0 0 0
        go $ Number 0 0 minBound 0 0
        go $ Number 0 0 0 minBound 0
        go $ Number 0 0 0 0 minBound