packages feed

postgresql-binary-0.3.0: executables/Decoding.hs

module Main where

import BasePrelude
import MTLPrelude
import Control.DeepSeq
import Criterion
import Criterion.Main
import Data.Text (Text)
import Data.ByteString (ByteString)
import Data.Scientific (Scientific)
import Data.Time
import qualified PostgreSQLBinary.Encoder as E
import qualified PostgreSQLBinary.Decoder as D
import qualified PostgreSQLBinary.Array as Array


main =
  defaultMain
    [
      b "bool"        D.bool               (E.bool True),
      b "int2"        (D.int :: D.D Int16) (E.int2 (Left 1000)),
      b "int4"        (D.int :: D.D Int32) (E.int4 (Left 1000)),
      b "int8"        (D.int :: D.D Int64) (E.int8 (Left 1000)),
      b "float4"      D.float4             (E.float4 12.65468468),
      b "float8"      D.float8             (E.float8 12.65468468),
      b "numeric"     D.numeric            (E.numeric (read "20.213290183")),
      b "char"        D.char               (E.char 'Я'),
      b "text"        D.text               (E.text (Left "alsdjflskjдывлоаы оады")),
      b "bytea"       D.bytea              (E.bytea (Left "alskdfj;dasjfl;dasjflksdj")),
      b "date"        D.date               (E.date (read "2000-01-19")),
      b "time"        (D.time True)        (E.time True (read "10:41:06")),
      b "timetz"      (D.timetz True)      (E.timetz True (read "(10:41:06, +0300)")),
      b "timestamp"   (D.timestamp True)   (E.timestamp True (read "2000-01-19 10:41:06")),
      b "timestamptz" (D.timestamptz True) (E.timestamptz True (read "2000-01-19 10:41:06")),
      b "interval"    D.interval           (E.interval (secondsToDiffTime 23472391128374)),
      b "uuid"        D.uuid               (E.uuid (read "550e8400-e29b-41d4-a716-446655440000")),
      b "array"       D.array              (E.array 
                                             (Array.fromListUnsafe 
                                               [Array.fromSingleton (Just "dfs") True 0,
                                                Array.fromSingleton Nothing True 0]))
    ]
  where
    b name decoder value = 
      bench name $ nf decoder value