extensible-0.2.9: benchmarks/membership.hs
{-# LANGUAGE ViewPatterns, TypeOperators, GADTs, Rank2Types, ScopedTypeVariables #-}
import Data.Extensible
import Data.Extensible.Internal
import Control.Applicative
import Criterion.Main
import AtoZ
import Data.HList hiding (K(..))
import Unsafe.Coerce
data Sum = C0 A|C1 B|C2 C|C3 D|C4 E|C5 F|C6 G|C7 H|C8 I|C9 J|C10 K |C11 L|C12 M
|C13 N|C14 O|C15 P|C16 Q|C17 R|C18 S|C19 T|C20 U|C21 V|C22 W|C23 X|C24 Y|C25 Z
testNaive :: Sum -> Int
testNaive (C0 (A n)) = n
testNaive (C1 (B n)) = n
testNaive (C2 (C n)) = n
testNaive (C3 (D n)) = n
testNaive (C4 (E n)) = n
testNaive (C5 (F n)) = n
testNaive (C6 (G n)) = n
testNaive (C7 (H n)) = n
testNaive (C8 (I n)) = n
testNaive (C9 (J n)) = n
testNaive (C10 (K n)) = n
testNaive (C11 (L n)) = n
testNaive (C12 (M n)) = n
testNaive (C13 (N n)) = n
testNaive (C14 (O n)) = n
testNaive (C15 (P n)) = n
testNaive (C16 (Q n)) = n
testNaive (C17 (R n)) = n
testNaive (C18 (S n)) = n
testNaive (C19 (T n)) = n
testNaive (C20 (U n)) = n
testNaive (C21 (V n)) = n
testNaive (C22 (W n)) = n
testNaive (C23 (X n)) = n
testNaive (C24 (Y n)) = n
testNaive (C25 (Z n)) = n
testExt :: K0 :| AtoZ -> Int
testExt = match match26
main = defaultMain [
bgroup "product" [
bench "A" $ whnf (\(pluck -> A x) -> x) extensible26
, bench "B" $ whnf (\(pluck -> B x) -> x) extensible26
, bench "C" $ whnf (\(pluck -> C x) -> x) extensible26
, bench "D" $ whnf (\(pluck -> D x) -> x) extensible26
, bench "E" $ whnf (\(pluck -> E x) -> x) extensible26
, bench "F" $ whnf (\(pluck -> F x) -> x) extensible26
, bench "G" $ whnf (\(pluck -> G x) -> x) extensible26
, bench "H" $ whnf (\(pluck -> H x) -> x) extensible26
, bench "I" $ whnf (\(pluck -> I x) -> x) extensible26
, bench "J" $ whnf (\(pluck -> J x) -> x) extensible26
, bench "K" $ whnf (\(pluck -> K x) -> x) extensible26
, bench "L" $ whnf (\(pluck -> L x) -> x) extensible26
, bench "M" $ whnf (\(pluck -> M x) -> x) extensible26
, bench "N" $ whnf (\(pluck -> N x) -> x) extensible26
, bench "O" $ whnf (\(pluck -> O x) -> x) extensible26
, bench "P" $ whnf (\(pluck -> P x) -> x) extensible26
, bench "Q" $ whnf (\(pluck -> Q x) -> x) extensible26
, bench "R" $ whnf (\(pluck -> R x) -> x) extensible26
, bench "S" $ whnf (\(pluck -> S x) -> x) extensible26
, bench "T" $ whnf (\(pluck -> T x) -> x) extensible26
, bench "U" $ whnf (\(pluck -> U x) -> x) extensible26
, bench "V" $ whnf (\(pluck -> V x) -> x) extensible26
, bench "W" $ whnf (\(pluck -> W x) -> x) extensible26
, bench "X" $ whnf (\(pluck -> X x) -> x) extensible26
, bench "Y" $ whnf (\(pluck -> Y x) -> x) extensible26
, bench "Z" $ whnf (\(pluck -> Z x) -> x) extensible26
, bench "A" $ whnf (\(hOccursFst -> A x) -> x) hlist26
, bench "B" $ whnf (\(hOccursFst -> B x) -> x) hlist26
, bench "C" $ whnf (\(hOccursFst -> C x) -> x) hlist26
, bench "D" $ whnf (\(hOccursFst -> D x) -> x) hlist26
, bench "E" $ whnf (\(hOccursFst -> E x) -> x) hlist26
, bench "F" $ whnf (\(hOccursFst -> F x) -> x) hlist26
, bench "G" $ whnf (\(hOccursFst -> G x) -> x) hlist26
, bench "H" $ whnf (\(hOccursFst -> H x) -> x) hlist26
, bench "I" $ whnf (\(hOccursFst -> I x) -> x) hlist26
, bench "J" $ whnf (\(hOccursFst -> J x) -> x) hlist26
, bench "K" $ whnf (\(hOccursFst -> K x) -> x) hlist26
, bench "L" $ whnf (\(hOccursFst -> L x) -> x) hlist26
, bench "M" $ whnf (\(hOccursFst -> M x) -> x) hlist26
, bench "N" $ whnf (\(hOccursFst -> N x) -> x) hlist26
, bench "O" $ whnf (\(hOccursFst -> O x) -> x) hlist26
, bench "P" $ whnf (\(hOccursFst -> P x) -> x) hlist26
, bench "Q" $ whnf (\(hOccursFst -> Q x) -> x) hlist26
, bench "R" $ whnf (\(hOccursFst -> R x) -> x) hlist26
, bench "S" $ whnf (\(hOccursFst -> S x) -> x) hlist26
, bench "T" $ whnf (\(hOccursFst -> T x) -> x) hlist26
, bench "U" $ whnf (\(hOccursFst -> U x) -> x) hlist26
, bench "V" $ whnf (\(hOccursFst -> V x) -> x) hlist26
, bench "W" $ whnf (\(hOccursFst -> W x) -> x) hlist26
, bench "X" $ whnf (\(hOccursFst -> X x) -> x) hlist26
, bench "Y" $ whnf (\(hOccursFst -> Y x) -> x) hlist26
, bench "Z" $ whnf (\(hOccursFst -> Z x) -> x) hlist26
]
, bgroup "sum" [
bench "A" $ whnf testExt (bury (A 0))
, bench "M" $ whnf testExt (bury (M 0))
, bench "T" $ whnf testExt (bury (T 0))
, bench "Z" $ whnf testExt (bury (Z 0))
, bench "A_" $ whnf testNaive (C0 (A 0))
, bench "M_" $ whnf testNaive (C12 (M 0))
, bench "T_" $ whnf testNaive (C19 (T 0))
, bench "Z_" $ whnf testNaive (C25 (Z 0))
]
, bgroup "tuple" [
bench "A" $ whnf (\(a,b,c,d,e,f,g,h,i,j,k,l,M res,n,o,p,q,r,s,t,u,v,w,x,y,z) -> res) tuple26
]
]