65 lines
2.3 KiB
Haskell
65 lines
2.3 KiB
Haskell
{-# LANGUAGE BangPatterns #-}
|
|
module Main where
|
|
|
|
import Criterion.Main
|
|
import qualified Data.Map as Map
|
|
|
|
import Eval
|
|
import FileEval
|
|
import Parser
|
|
import Research
|
|
|
|
-- | Build an environment from a library file.
|
|
loadLib :: FilePath -> IO Env
|
|
loadLib = evaluateFile
|
|
|
|
main :: IO ()
|
|
main = do
|
|
!baseLib <- loadLib "lib/base.tri"
|
|
!listLib <- loadLib "lib/list.tri"
|
|
!contractsLib <- loadLib "lib/contracts.tri"
|
|
!intLib <- loadLib "lib/intensionalContracts.tri"
|
|
!guardedLib <- loadLib "lib/guardedBase.tri"
|
|
let !env = Map.unions [baseLib, listLib, contractsLib, intLib, guardedLib]
|
|
|
|
defaultMain
|
|
[ bgroup "contracts"
|
|
[ bench "raw head" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"head [1 2 3 4 5]"
|
|
, bench "safeHead (checked)" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"safeHead [1 2 3 4 5]"
|
|
, bench "raw div" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"div 10 2"
|
|
, bench "safeDiv (checked)" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"safeDiv 10 2"
|
|
, bench "safeDiv failure (div by zero)" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"safeDiv 10 0"
|
|
, bench "sortedMax on sorted list" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"sortedMax [1 2 3 4 5]"
|
|
, bench "safeHalf (even check)" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"safeHalf 8"
|
|
, bench "sortedList? success" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"withContract (sortedList? nat?) [1 2 3 4 5] (xs : sum xs) (msg : 0)"
|
|
, bench "sortedList? failure" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"withContract (sortedList? nat?) [5 1 3] (xs : sum xs) (msg : 0)"
|
|
, bench "listOf nat? success" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"withContract (listOf nat?) [1 2 3 4 5] (xs : sum xs) (msg : 0)"
|
|
, bench "fn2 apply add" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"(fn2 nat? nat? nat? add) 3 5"
|
|
, bench "fnContract apply identity" $ whnf
|
|
(result . evalTricu env . parseTricu)
|
|
"(fnContract nat? nat? (x : x)) 7"
|
|
]
|
|
]
|