packages feed

bitcoin-payment-channel-1.2.0.0: bench/Main.hs

{-# LANGUAGE CPP, BangPatterns #-}
module Main where

import qualified PaymentChannel.Test as Pay
import Criterion.Main
import Test.QuickCheck  (sample')

#if !MIN_VERSION_bytestring(0,10,0)
instance NFData B.ByteString
#endif

payCount = 1000 :: Integer

main :: IO ()
main = do
  (arbPair,_)   <- fmap head $ sample' $ Pay.mkChanPairInitAmount 0
  let mkCappedPayment :: Pay.BtcAmount -> (Pay.ClientPayChan, Pay.SignedPayment, Pay.BtcAmount)
      mkCappedPayment  = Pay.createPaymentCapped (Pay.sendChan arbPair) . Pay.Capped
      (_,!payment,_) = mkCappedPayment 1
  let multiMkVerify = Pay.runChanPair arbPair (fromIntegral <$> [1..payCount])
  defaultMain
    [ bench "Create payment" $ nf mkCappedPayment 1
    , bench "Verify payment" $ nfIO
        ( either (error . show) id <$> Pay.acceptPayment (Pay.toPaymentData payment) (Pay.recvChan arbPair) )
    , bench (show payCount ++ " rounds of create+verify payment") $ nfIO multiMkVerify
    ]