sbv-14.1: SBVBenchSuite/BenchSuite/WeakestPreconditions/Sum.hs
-----------------------------------------------------------------------------
-- |
-- Module : BenchSuite.WeakestPreconditions.Sum
-- Copyright : (c) Jeffrey Young
-- Levent Erkok
-- License : BSD3
-- Maintainer: erkokl@gmail.com
-- Stability : experimental
--
-- Bench suite for Documentation.SBV.Examples.WeakestPreconditions.Sum
-----------------------------------------------------------------------------
{-# OPTIONS_GHC -Wall -Werror -Wno-orphans #-}
{-# LANGUAGE NamedFieldPuns #-}
module BenchSuite.WeakestPreconditions.Sum(benchmarks) where
import Documentation.SBV.Examples.WeakestPreconditions.Sum
import Data.SBV
import Control.DeepSeq
import BenchSuite.Bench.Bench
import BenchSuite.WeakestPreconditions.Instances()
instance NFData a => NFData (SumS a)
benchmarks :: Runner
benchmarks = rGroup [ runIO "Correctness.Sum.correctInvariant" $ correctness correctInvariant (Just measure)
, runIO "Correctness.Sum.alwaysFalseInvariant" $ correctness alwaysFalseInvariant Nothing
, runIO "Correctness.Sum.alwaysTrueInvariant" $ correctness alwaysTrueInvariant Nothing
, runIO "Correctness.Sum.loopInvariant" $ correctness loopInvariant Nothing
, runIO "Correctness.Sum.badMeasure1" $ correctness badMeasure1Invariant (Just badMeasure1)
, runIO "Correctness.Sum.badMeasure2" $ correctness badMeasure2Invariant (Just badMeasure2)
]
where
correctInvariant SumS{n, i, s} = s .== (i*(i+1)) `sDiv` 2 .&& i .<= n
measure SumS{n, i} = [n - i]
alwaysFalseInvariant _ = sFalse
alwaysTrueInvariant _ = sTrue
loopInvariant SumS{n, i, s} = s .<= i .&& s .== (i*(i+1)) `sDiv` 2 .&& i .<= n
badMeasure1Invariant SumS{n, i, s} = s .== (i*(i+1)) `sDiv` 2 .&& i .<= n
badMeasure1 SumS{i} = [- i]
badMeasure2Invariant SumS{n, i, s} = s .== (i*(i+1)) `sDiv` 2 .&& i .<= n
badMeasure2 SumS{n, i} = [n + i]