tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

Bench.hs (2322B)


      1 {-# LANGUAGE BangPatterns #-}
      2 module Main where
      3 
      4 import Criterion.Main
      5 import qualified Data.Map as Map
      6 
      7 import Eval
      8 import FileEval
      9 import Parser
     10 import Research
     11 
     12 -- | Build an environment from a library file.
     13 loadLib :: FilePath -> IO Env
     14 loadLib = evaluateFile
     15 
     16 main :: IO ()
     17 main = do
     18   !baseLib      <- loadLib "lib/base.tri"
     19   !listLib      <- loadLib "lib/list.tri"
     20   !contractsLib <- loadLib "lib/contracts.tri"
     21   !intLib       <- loadLib "lib/intensionalContracts.tri"
     22   !guardedLib   <- loadLib "lib/guardedBase.tri"
     23   let !env = Map.unions [baseLib, listLib, contractsLib, intLib, guardedLib]
     24 
     25   defaultMain
     26     [ bgroup "contracts"
     27         [ bench "raw head" $ whnf
     28             (result . evalTricu env . parseTricu)
     29             "head [1 2 3 4 5]"
     30         , bench "safeHead (checked)" $ whnf
     31             (result . evalTricu env . parseTricu)
     32             "safeHead [1 2 3 4 5]"
     33         , bench "raw div" $ whnf
     34             (result . evalTricu env . parseTricu)
     35             "div 10 2"
     36         , bench "safeDiv (checked)" $ whnf
     37             (result . evalTricu env . parseTricu)
     38             "safeDiv 10 2"
     39         , bench "safeDiv failure (div by zero)" $ whnf
     40             (result . evalTricu env . parseTricu)
     41             "safeDiv 10 0"
     42         , bench "sortedMax on sorted list" $ whnf
     43             (result . evalTricu env . parseTricu)
     44             "sortedMax [1 2 3 4 5]"
     45         , bench "safeHalf (even check)" $ whnf
     46             (result . evalTricu env . parseTricu)
     47             "safeHalf 8"
     48         , bench "sortedList? success" $ whnf
     49             (result . evalTricu env . parseTricu)
     50             "withContract (sortedList? nat?) [1 2 3 4 5] (xs : sum xs) (msg : 0)"
     51         , bench "sortedList? failure" $ whnf
     52             (result . evalTricu env . parseTricu)
     53             "withContract (sortedList? nat?) [5 1 3] (xs : sum xs) (msg : 0)"
     54         , bench "listOf nat? success" $ whnf
     55             (result . evalTricu env . parseTricu)
     56             "withContract (listOf nat?) [1 2 3 4 5] (xs : sum xs) (msg : 0)"
     57         , bench "fn2 apply add" $ whnf
     58             (result . evalTricu env . parseTricu)
     59             "(fn2 nat? nat? nat? add) 3 5"
     60         , bench "fnContract apply identity" $ whnf
     61             (result . evalTricu env . parseTricu)
     62             "(fnContract nat? nat? (x : x)) 7"
     63         ]
     64     ]