packages feed

bind-marshal-0.1: test/verify_arbmarshal_full_static_cases.hs

-- Copyright   :  (C) 2009 Corey O'Connor
-- License     :  BSD-style (see the file LICENSE)

{-# LANGUAGE CPP #-}
{-# LANGUAGE NoRebindableSyntax #-}
{-# LANGUAGE ImplicitPrelude #-}
#define ONLY_ONE
-- #define FEW_SER_EQUIVS
-- #define ALL_SER_EQUIVS
import Verify

import ArbMarshal
import qualified ArbMarshal.Binary as Binary

import Data.Binary.Get (runGet)
import Data.Binary.Put (runPut)

import Bind.Marshal.Dynamic
import Bind.Marshal.StdLib

import Control.DeepSeq
import Control.Monad
import Control.Monad.IO.Class

#ifdef ONLY_ONE
import qualified TestCases.FullStaticCase0 as FullStaticCase0
#else
import qualified TestCases.FullStaticCase1 as FullStaticCase1
import qualified TestCases.FullStaticCase2 as FullStaticCase2
import qualified TestCases.FullStaticCase3 as FullStaticCase3
import qualified TestCases.FullStaticCase4 as FullStaticCase4
import qualified TestCases.FullStaticCase5 as FullStaticCase5
import qualified TestCases.FullStaticCase6 as FullStaticCase6
import qualified TestCases.FullStaticCase7 as FullStaticCase7
import qualified TestCases.FullStaticCase8 as FullStaticCase8
import qualified TestCases.FullStaticCase9 as FullStaticCase9
import qualified TestCases.FullStaticCase10 as FullStaticCase10
import qualified TestCases.FullStaticCase11 as FullStaticCase11
import qualified TestCases.FullStaticCase12 as FullStaticCase12
import qualified TestCases.FullStaticCase13 as FullStaticCase13
import qualified TestCases.FullStaticCase14 as FullStaticCase14
import qualified TestCases.FullStaticCase15 as FullStaticCase15
import qualified TestCases.FullStaticCase16 as FullStaticCase16
import qualified TestCases.FullStaticCase17 as FullStaticCase17
import qualified TestCases.FullStaticCase18 as FullStaticCase18
import qualified TestCases.FullStaticCase19 as FullStaticCase19
#endif

#ifdef ONLY_ONE
import qualified TestCases.BinaryCase0 as BinaryCase0
#else
import qualified TestCases.BinaryCase1 as BinaryCase1
import qualified TestCases.BinaryCase2 as BinaryCase2
import qualified TestCases.BinaryCase3 as BinaryCase3
import qualified TestCases.BinaryCase4 as BinaryCase4
import qualified TestCases.BinaryCase5 as BinaryCase5
import qualified TestCases.BinaryCase6 as BinaryCase6
import qualified TestCases.BinaryCase7 as BinaryCase7
import qualified TestCases.BinaryCase8 as BinaryCase8
import qualified TestCases.BinaryCase9 as BinaryCase9
import qualified TestCases.BinaryCase10 as BinaryCase10
import qualified TestCases.BinaryCase11 as BinaryCase11
import qualified TestCases.BinaryCase12 as BinaryCase12
import qualified TestCases.BinaryCase13 as BinaryCase13
import qualified TestCases.BinaryCase14 as BinaryCase14
import qualified TestCases.BinaryCase15 as BinaryCase15
import qualified TestCases.BinaryCase16 as BinaryCase16
import qualified TestCases.BinaryCase17 as BinaryCase17
import qualified TestCases.BinaryCase18 as BinaryCase18
import qualified TestCases.BinaryCase19 as BinaryCase19
#endif

main = run_test $ do
    verify1 "case 0 deserialization vs rd binary" 
            ( verify_full_static_des_vs_rd_binary FullStaticCase0.static_structure 
                                                  FullStaticCase0.des_static_structure
            )
#if 0
    verify1 "case 0 serialization vs rd binary" 
            ( verify_full_static_ser_vs_rd_binary FullStaticCase0.static_structure 
                                                  FullStaticCase0.ser_static_structure
            )
    verify1 "case 0 deserialization vs equiv binary" 
            ( verify_full_static_des_vs_equiv_binary FullStaticCase0.static_structure 
                                                     FullStaticCase0.des_static_structure
                                                     BinaryCase0.des_static_structure
            )
#endif
#ifdef ONLY_ONE
    verify1 "case 0 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase0.static_structure 
                                                     FullStaticCase0.ser_static_structure
                                                     BinaryCase0.ser_static_structure
            )
#else
    verify1 "case 1 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase1.static_structure 
                                                     FullStaticCase1.ser_static_structure
                                                     BinaryCase1.ser_static_structure
            )
    verify1 "case 2 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase2.static_structure 
                                                     FullStaticCase2.ser_static_structure
                                                     BinaryCase2.ser_static_structure
            )
    verify1 "case 3 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase3.static_structure 
                                                     FullStaticCase3.ser_static_structure
                                                     BinaryCase3.ser_static_structure
            )
    verify1 "case 4 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase4.static_structure 
                                                     FullStaticCase4.ser_static_structure
                                                     BinaryCase4.ser_static_structure
            )
    verify1 "case 5 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase5.static_structure 
                                                     FullStaticCase5.ser_static_structure
                                                     BinaryCase5.ser_static_structure
            )
    verify1 "case 6 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase6.static_structure 
                                                     FullStaticCase6.ser_static_structure
                                                     BinaryCase6.ser_static_structure
            )
    verify1 "case 7 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase7.static_structure 
                                                     FullStaticCase7.ser_static_structure
                                                     BinaryCase7.ser_static_structure
            )
    verify1 "case 8 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase8.static_structure 
                                                     FullStaticCase8.ser_static_structure
                                                     BinaryCase8.ser_static_structure
            )
    verify1 "case 9 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase9.static_structure 
                                                     FullStaticCase9.ser_static_structure
                                                     BinaryCase9.ser_static_structure
            )
    verify1 "case 10 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase10.static_structure 
                                                     FullStaticCase10.ser_static_structure
                                                     BinaryCase10.ser_static_structure
            )
    verify1 "case 11 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase11.static_structure 
                                                     FullStaticCase11.ser_static_structure
                                                     BinaryCase11.ser_static_structure
            )
    verify1 "case 12 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase12.static_structure 
                                                     FullStaticCase12.ser_static_structure
                                                     BinaryCase12.ser_static_structure
            )
    verify1 "case 13 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase13.static_structure 
                                                     FullStaticCase13.ser_static_structure
                                                     BinaryCase13.ser_static_structure
            )
    verify1 "case 14 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase14.static_structure 
                                                     FullStaticCase14.ser_static_structure
                                                     BinaryCase14.ser_static_structure
            )
    verify1 "case 15 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase15.static_structure 
                                                     FullStaticCase15.ser_static_structure
                                                     BinaryCase15.ser_static_structure
            )
    verify1 "case 16 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase16.static_structure 
                                                     FullStaticCase16.ser_static_structure
                                                     BinaryCase16.ser_static_structure
            )
    verify1 "case 17 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase17.static_structure 
                                                     FullStaticCase17.ser_static_structure
                                                     BinaryCase17.ser_static_structure
            )
    verify1 "case 18 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase18.static_structure 
                                                     FullStaticCase18.ser_static_structure
                                                     BinaryCase18.ser_static_structure
            )
    verify1 "case 19 serialization vs equiv binary" 
            ( verify_full_static_ser_vs_equiv_binary FullStaticCase19.static_structure 
                                                     FullStaticCase19.ser_static_structure
                                                     BinaryCase19.ser_static_structure
            )
#endif
    return ()

verify_full_static_des_vs_rd_binary ss des_ss = liftIOResult $ do
    ssvs <- liftIO $ replicateM 30000 (ssv_for_ss ss)
    let bss = deepseq ssvs $ map Binary.to_bytestring ssvs
        in_data = deepseq bss $ zip ssvs bss
    ( t_0, t_1) <- liftIO $ time_and_compare in_data
                              (\(ssv,bs) -> return $ decode_ (dyn_action des_ss) bs)
                              (\(ssv,bs) -> return $ hole_values $ Binary.from_bytestring ss bs)
    log_out $ "static des: " ++ show t_0
    log_out $ "rd binary: " ++ show t_1
    case t_0 > t_1 of
        False -> return succeeded
        True -> return failed

verify_full_static_ser_vs_rd_binary ss ser_ss = liftIOResult $ do
    ssvs <- liftIO $ replicateM 30000 (ssv_for_ss ss)
    ( t_0, t_1) <- liftIO $ time_and_compare ssvs
                              (return . encode_ . dyn_action . ser_ss . hole_values)
                              (return . Binary.to_bytestring)
    log_out $ "static ser: " ++ show t_0
    log_out $ "rd binary: " ++ show t_1
    case t_0 > t_1 of
        False -> return succeeded
        True -> return failed

verify_full_static_des_vs_equiv_binary ss des_ss get = liftIOResult $ do
    ssvs <- liftIO $ replicateM 30000 (ssv_for_ss ss)
    let bss = deepseq ssvs $ map Binary.to_bytestring ssvs
        in_data = deepseq bss $ zip ssvs bss
    ( t_0, t_1) <- liftIO $ time_and_compare in_data
                              (\(ssv,bs) -> return $ decode_ (dyn_action des_ss) bs)
                              (\(ssv,bs) -> return $ runGet get bs)
    log_out $ "static des: " ++ show t_0
    log_out $ "equiv binary: " ++ show t_1
    case t_0 > t_1 of
        False -> return succeeded
        True -> return failed

verify_full_static_ser_vs_equiv_binary ss ser_ss put = liftIOResult $ do
    ssvs <- liftIO $ replicateM 30000 (ssv_for_ss ss)
    ( t_0, t_1) <- liftIO $ time_and_compare ssvs
                              (return . encode_ . dyn_action . ser_ss . hole_values)
                              (return . runPut . put . hole_values)
    log_out $ "static ser: " ++ show t_0
    log_out $ "equiv binary: " ++ show t_1
    case t_0 > t_1 of
        False -> return succeeded
        True -> return failed