Skip to content

Commit

Permalink
Golden test for cost model parameter names
Browse files Browse the repository at this point in the history
  • Loading branch information
Unisay committed Dec 17, 2024
1 parent d6b567d commit 48a36dc
Show file tree
Hide file tree
Showing 8 changed files with 1,023 additions and 231 deletions.
42 changes: 34 additions & 8 deletions plutus-core/testlib/Test/Tasty/Extras.hs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeSynonymInstances #-}

module Test.Tasty.Extras
( Layer (..)
Expand All @@ -24,6 +24,7 @@ module Test.Tasty.Extras
, goldenVsDoc
, goldenVsDocM
, nestedGoldenVsText
, nestedGoldenVsTextPredM
, nestedGoldenVsTextM
, nestedGoldenVsDoc
, nestedGoldenVsDocM
Expand All @@ -33,16 +34,18 @@ module Test.Tasty.Extras
import PlutusPrelude hiding (toList)

import Control.Monad.Free.Church (F (runF), MonadFree, liftF)
import Control.Monad.Reader
import Control.Monad.Reader (MonadReader (ask, local), ReaderT (..), asks, mapReaderT)
import Data.ByteString.Lazy qualified as BSL
import Data.Text (Text)
import Data.Text.Encoding (encodeUtf8)
import Data.Version
import GHC.Exts
import Data.Text.IO qualified as TIO
import Data.Version (showVersion)
import GHC.Exts (IsList (Item, fromList, toList))
import System.FilePath (joinPath, (</>))
import System.Info
import Test.Tasty
import Test.Tasty.Golden
import System.Info (compilerVersion)
import Test.Tasty (TestName, TestTree, testGroup)
import Test.Tasty.Golden (goldenVsStringDiff, createDirectoriesAndWriteFile)
import Test.Tasty.Golden.Advanced (goldenTest)

-- | We use the GHC version number to create directories with names like `9.2`
-- and `9.6` containing golden files whose contents depend on the GHC version.
Expand Down Expand Up @@ -206,6 +209,28 @@ goldenVsDocM name ref val = goldenVsTextM name ref $ render <$> val
nestedGoldenVsText :: TestName -> FilePath -> Text -> TestNested
nestedGoldenVsText name ext = nestedGoldenVsTextM name ext . pure

{-| Compare the contents of a file under a name prefix against a 'Text'
using a predicate.
-}
nestedGoldenVsTextPredM
:: TestName
-- ^ The name of the test
-> FilePath
-- ^ The file extension
-> IO Text
-- ^ The text-producing action to execute
-> (Text -> Text -> Bool)
-- ^ How to compare golden file contents with the produced text
-> TestNested
nestedGoldenVsTextPredM name ext action predicate = do
filePath <- asks $ foldr (</>) (name ++ ext ++ ".golden")
embed $ goldenTest name (TIO.readFile filePath) action
do \golden actual -> pure
if predicate golden actual
then Nothing
else Just "Predicate failed on golden file"
do createDirectoriesAndWriteFile filePath . BSL.fromStrict . encodeUtf8

-- | Check the contents of a file under a name prefix against a 'Text'.
nestedGoldenVsTextM :: TestName -> FilePath -> IO Text -> TestNested
nestedGoldenVsTextM name ext text = do
Expand All @@ -219,3 +244,4 @@ nestedGoldenVsDoc name ext = nestedGoldenVsDocM name ext . pure
-- | Check the contents of a file under a name prefix against a 'Text'.
nestedGoldenVsDocM :: TestName -> FilePath -> IO (Doc ann) -> TestNested
nestedGoldenVsDocM name ext val = nestedGoldenVsTextM name ext $ render <$> val

Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ test_IntegerDistribution =
\(AsArbitraryBuiltin (i :: Integer)) ->
let magnitudes = magnitudesPositive nextInterestingBound highInterestingBound
(low, high) =
maybe (error $ "Panic: unknown integer") (bimap (* signum i) (* signum i)) $
maybe (error "Panic: unknown integer") (bimap (* signum i) (* signum i)) $
find ((>= abs i) . snd) magnitudes
bounds = map snd magnitudes
isInteresting = i `elem` concat
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,303 @@
addInteger-cpu-arguments-intercept
addInteger-cpu-arguments-slope
addInteger-memory-arguments-intercept
addInteger-memory-arguments-slope
appendByteString-cpu-arguments-intercept
appendByteString-cpu-arguments-slope
appendByteString-memory-arguments-intercept
appendByteString-memory-arguments-slope
appendString-cpu-arguments-intercept
appendString-cpu-arguments-slope
appendString-memory-arguments-intercept
appendString-memory-arguments-slope
bData-cpu-arguments
bData-memory-arguments
blake2b_256-cpu-arguments-intercept
blake2b_256-cpu-arguments-slope
blake2b_256-memory-arguments
cekApplyCost-exBudgetCPU
cekApplyCost-exBudgetMemory
cekBuiltinCost-exBudgetCPU
cekBuiltinCost-exBudgetMemory
cekConstCost-exBudgetCPU
cekConstCost-exBudgetMemory
cekDelayCost-exBudgetCPU
cekDelayCost-exBudgetMemory
cekForceCost-exBudgetCPU
cekForceCost-exBudgetMemory
cekLamCost-exBudgetCPU
cekLamCost-exBudgetMemory
cekStartupCost-exBudgetCPU
cekStartupCost-exBudgetMemory
cekVarCost-exBudgetCPU
cekVarCost-exBudgetMemory
chooseData-cpu-arguments
chooseData-memory-arguments
chooseList-cpu-arguments
chooseList-memory-arguments
chooseUnit-cpu-arguments
chooseUnit-memory-arguments
consByteString-cpu-arguments-intercept
consByteString-cpu-arguments-slope
consByteString-memory-arguments-intercept
consByteString-memory-arguments-slope
constrData-cpu-arguments
constrData-memory-arguments
decodeUtf8-cpu-arguments-intercept
decodeUtf8-cpu-arguments-slope
decodeUtf8-memory-arguments-intercept
decodeUtf8-memory-arguments-slope
divideInteger-cpu-arguments-constant
divideInteger-cpu-arguments-model-arguments-c00
divideInteger-cpu-arguments-model-arguments-c01
divideInteger-cpu-arguments-model-arguments-c02
divideInteger-cpu-arguments-model-arguments-c10
divideInteger-cpu-arguments-model-arguments-c11
divideInteger-cpu-arguments-model-arguments-c20
divideInteger-cpu-arguments-model-arguments-minimum
divideInteger-memory-arguments-intercept
divideInteger-memory-arguments-minimum
divideInteger-memory-arguments-slope
encodeUtf8-cpu-arguments-intercept
encodeUtf8-cpu-arguments-slope
encodeUtf8-memory-arguments-intercept
encodeUtf8-memory-arguments-slope
equalsByteString-cpu-arguments-constant
equalsByteString-cpu-arguments-intercept
equalsByteString-cpu-arguments-slope
equalsByteString-memory-arguments
equalsData-cpu-arguments-intercept
equalsData-cpu-arguments-slope
equalsData-memory-arguments
equalsInteger-cpu-arguments-intercept
equalsInteger-cpu-arguments-slope
equalsInteger-memory-arguments
equalsString-cpu-arguments-constant
equalsString-cpu-arguments-intercept
equalsString-cpu-arguments-slope
equalsString-memory-arguments
fstPair-cpu-arguments
fstPair-memory-arguments
headList-cpu-arguments
headList-memory-arguments
iData-cpu-arguments
iData-memory-arguments
ifThenElse-cpu-arguments
ifThenElse-memory-arguments
indexByteString-cpu-arguments
indexByteString-memory-arguments
lengthOfByteString-cpu-arguments
lengthOfByteString-memory-arguments
lessThanByteString-cpu-arguments-intercept
lessThanByteString-cpu-arguments-slope
lessThanByteString-memory-arguments
lessThanEqualsByteString-cpu-arguments-intercept
lessThanEqualsByteString-cpu-arguments-slope
lessThanEqualsByteString-memory-arguments
lessThanEqualsInteger-cpu-arguments-intercept
lessThanEqualsInteger-cpu-arguments-slope
lessThanEqualsInteger-memory-arguments
lessThanInteger-cpu-arguments-intercept
lessThanInteger-cpu-arguments-slope
lessThanInteger-memory-arguments
listData-cpu-arguments
listData-memory-arguments
mapData-cpu-arguments
mapData-memory-arguments
mkCons-cpu-arguments
mkCons-memory-arguments
mkNilData-cpu-arguments
mkNilData-memory-arguments
mkNilPairData-cpu-arguments
mkNilPairData-memory-arguments
mkPairData-cpu-arguments
mkPairData-memory-arguments
modInteger-cpu-arguments-constant
modInteger-cpu-arguments-model-arguments-c00
modInteger-cpu-arguments-model-arguments-c01
modInteger-cpu-arguments-model-arguments-c02
modInteger-cpu-arguments-model-arguments-c10
modInteger-cpu-arguments-model-arguments-c11
modInteger-cpu-arguments-model-arguments-c20
modInteger-cpu-arguments-model-arguments-minimum
modInteger-memory-arguments-intercept
modInteger-memory-arguments-slope
multiplyInteger-cpu-arguments-intercept
multiplyInteger-cpu-arguments-slope
multiplyInteger-memory-arguments-intercept
multiplyInteger-memory-arguments-slope
nullList-cpu-arguments
nullList-memory-arguments
quotientInteger-cpu-arguments-constant
quotientInteger-cpu-arguments-model-arguments-c00
quotientInteger-cpu-arguments-model-arguments-c01
quotientInteger-cpu-arguments-model-arguments-c02
quotientInteger-cpu-arguments-model-arguments-c10
quotientInteger-cpu-arguments-model-arguments-c11
quotientInteger-cpu-arguments-model-arguments-c20
quotientInteger-cpu-arguments-model-arguments-minimum
quotientInteger-memory-arguments-intercept
quotientInteger-memory-arguments-minimum
quotientInteger-memory-arguments-slope
remainderInteger-cpu-arguments-constant
remainderInteger-cpu-arguments-model-arguments-c00
remainderInteger-cpu-arguments-model-arguments-c01
remainderInteger-cpu-arguments-model-arguments-c02
remainderInteger-cpu-arguments-model-arguments-c10
remainderInteger-cpu-arguments-model-arguments-c11
remainderInteger-cpu-arguments-model-arguments-c20
remainderInteger-cpu-arguments-model-arguments-minimum
remainderInteger-memory-arguments-intercept
remainderInteger-memory-arguments-slope
serialiseData-cpu-arguments-intercept
serialiseData-cpu-arguments-slope
serialiseData-memory-arguments-intercept
serialiseData-memory-arguments-slope
sha2_256-cpu-arguments-intercept
sha2_256-cpu-arguments-slope
sha2_256-memory-arguments
sha3_256-cpu-arguments-intercept
sha3_256-cpu-arguments-slope
sha3_256-memory-arguments
sliceByteString-cpu-arguments-intercept
sliceByteString-cpu-arguments-slope
sliceByteString-memory-arguments-intercept
sliceByteString-memory-arguments-slope
sndPair-cpu-arguments
sndPair-memory-arguments
subtractInteger-cpu-arguments-intercept
subtractInteger-cpu-arguments-slope
subtractInteger-memory-arguments-intercept
subtractInteger-memory-arguments-slope
tailList-cpu-arguments
tailList-memory-arguments
trace-cpu-arguments
trace-memory-arguments
unBData-cpu-arguments
unBData-memory-arguments
unConstrData-cpu-arguments
unConstrData-memory-arguments
unIData-cpu-arguments
unIData-memory-arguments
unListData-cpu-arguments
unListData-memory-arguments
unMapData-cpu-arguments
unMapData-memory-arguments
verifyEcdsaSecp256k1Signature-cpu-arguments
verifyEcdsaSecp256k1Signature-memory-arguments
verifyEd25519Signature-cpu-arguments-intercept
verifyEd25519Signature-cpu-arguments-slope
verifyEd25519Signature-memory-arguments
verifySchnorrSecp256k1Signature-cpu-arguments-intercept
verifySchnorrSecp256k1Signature-cpu-arguments-slope
verifySchnorrSecp256k1Signature-memory-arguments
cekConstrCost-exBudgetCPU
cekConstrCost-exBudgetMemory
cekCaseCost-exBudgetCPU
cekCaseCost-exBudgetMemory
bls12_381_G1_add-cpu-arguments
bls12_381_G1_add-memory-arguments
bls12_381_G1_compress-cpu-arguments
bls12_381_G1_compress-memory-arguments
bls12_381_G1_equal-cpu-arguments
bls12_381_G1_equal-memory-arguments
bls12_381_G1_hashToGroup-cpu-arguments-intercept
bls12_381_G1_hashToGroup-cpu-arguments-slope
bls12_381_G1_hashToGroup-memory-arguments
bls12_381_G1_neg-cpu-arguments
bls12_381_G1_neg-memory-arguments
bls12_381_G1_scalarMul-cpu-arguments-intercept
bls12_381_G1_scalarMul-cpu-arguments-slope
bls12_381_G1_scalarMul-memory-arguments
bls12_381_G1_uncompress-cpu-arguments
bls12_381_G1_uncompress-memory-arguments
bls12_381_G2_add-cpu-arguments
bls12_381_G2_add-memory-arguments
bls12_381_G2_compress-cpu-arguments
bls12_381_G2_compress-memory-arguments
bls12_381_G2_equal-cpu-arguments
bls12_381_G2_equal-memory-arguments
bls12_381_G2_hashToGroup-cpu-arguments-intercept
bls12_381_G2_hashToGroup-cpu-arguments-slope
bls12_381_G2_hashToGroup-memory-arguments
bls12_381_G2_neg-cpu-arguments
bls12_381_G2_neg-memory-arguments
bls12_381_G2_scalarMul-cpu-arguments-intercept
bls12_381_G2_scalarMul-cpu-arguments-slope
bls12_381_G2_scalarMul-memory-arguments
bls12_381_G2_uncompress-cpu-arguments
bls12_381_G2_uncompress-memory-arguments
bls12_381_finalVerify-cpu-arguments
bls12_381_finalVerify-memory-arguments
bls12_381_millerLoop-cpu-arguments
bls12_381_millerLoop-memory-arguments
bls12_381_mulMlResult-cpu-arguments
bls12_381_mulMlResult-memory-arguments
keccak_256-cpu-arguments-intercept
keccak_256-cpu-arguments-slope
keccak_256-memory-arguments
blake2b_224-cpu-arguments-intercept
blake2b_224-cpu-arguments-slope
blake2b_224-memory-arguments
integerToByteString-cpu-arguments-c0
integerToByteString-cpu-arguments-c1
integerToByteString-cpu-arguments-c2
integerToByteString-memory-arguments-intercept
integerToByteString-memory-arguments-slope
byteStringToInteger-cpu-arguments-c0
byteStringToInteger-cpu-arguments-c1
byteStringToInteger-cpu-arguments-c2
byteStringToInteger-memory-arguments-intercept
byteStringToInteger-memory-arguments-slope
andByteString-cpu-arguments-intercept
andByteString-cpu-arguments-slope1
andByteString-cpu-arguments-slope2
andByteString-memory-arguments-intercept
andByteString-memory-arguments-slope
orByteString-cpu-arguments-intercept
orByteString-cpu-arguments-slope1
orByteString-cpu-arguments-slope2
orByteString-memory-arguments-intercept
orByteString-memory-arguments-slope
xorByteString-cpu-arguments-intercept
xorByteString-cpu-arguments-slope1
xorByteString-cpu-arguments-slope2
xorByteString-memory-arguments-intercept
xorByteString-memory-arguments-slope
complementByteString-cpu-arguments-intercept
complementByteString-cpu-arguments-slope
complementByteString-memory-arguments-intercept
complementByteString-memory-arguments-slope
readBit-cpu-arguments
readBit-memory-arguments
writeBits-cpu-arguments-intercept
writeBits-cpu-arguments-slope
writeBits-memory-arguments-intercept
writeBits-memory-arguments-slope
replicateByte-cpu-arguments-intercept
replicateByte-cpu-arguments-slope
replicateByte-memory-arguments-intercept
replicateByte-memory-arguments-slope
shiftByteString-cpu-arguments-intercept
shiftByteString-cpu-arguments-slope
shiftByteString-memory-arguments-intercept
shiftByteString-memory-arguments-slope
rotateByteString-cpu-arguments-intercept
rotateByteString-cpu-arguments-slope
rotateByteString-memory-arguments-intercept
rotateByteString-memory-arguments-slope
countSetBits-cpu-arguments-intercept
countSetBits-cpu-arguments-slope
countSetBits-memory-arguments
findFirstSetBit-cpu-arguments-intercept
findFirstSetBit-cpu-arguments-slope
findFirstSetBit-memory-arguments
ripemd_160-cpu-arguments-intercept
ripemd_160-cpu-arguments-slope
ripemd_160-memory-arguments
lengthArray-cpu-arguments
lengthArray-memory-arguments
listToArray-cpu-arguments
listToArray-memory-arguments
indexArray-cpu-arguments
indexArray-memory-arguments
Loading

0 comments on commit 48a36dc

Please sign in to comment.