WIP simple sample test for Stake policy

This commit is contained in:
Emily Martins 2022-03-09 22:00:02 +01:00
parent 5bae354268
commit 8b98324cee
9 changed files with 256 additions and 137 deletions

View file

@ -9,14 +9,21 @@ import Test.Tasty (defaultMain, testGroup)
--------------------------------------------------------------------------------
import Spec.Int
import Spec.Stake qualified as Stake
main :: IO ()
main =
defaultMain $
testGroup
"apropos-tx"
"test suite"
[ testGroup
"Int"
[ intPlutarchTests
"sample-tests"
Stake.tests
, testGroup
"apropos-tx"
[ testGroup
"Int"
[ intPlutarchTests
]
]
]

View file

@ -0,0 +1,97 @@
{- |
Module : Spec.Sample.Stake
Maintainer : emi@haskell.fyi
Description: Sample based testing for Stake utxos
This module tests primarily the happy path for Stake creation
-}
module Spec.Sample.Stake (
stake,
policy,
policySymbol,
stakeCreation,
validatorHashTN,
) where
--------------------------------------------------------------------------------
import Plutarch.Api.V1 (
mintingPolicySymbol,
mkMintingPolicy,
mkValidator,
validatorHash,
)
import Plutus.V1.Ledger.Ada (adaValueOf)
import Plutus.V1.Ledger.Api (
Address (Address),
Credential (ScriptCredential),
CurrencySymbol,
Datum (Datum),
DatumHash (DatumHash),
MintingPolicy (..),
PubKeyHash,
ScriptContext (..),
ScriptPurpose (..),
ToData (toBuiltinData),
TxInfo (..),
TxOut (txOutAddress, txOutDatumHash, txOutValue),
ValidatorHash (ValidatorHash),
)
import Plutus.V1.Ledger.Contexts (TxOut (TxOut))
import Plutus.V1.Ledger.Interval qualified as Interval
import Plutus.V1.Ledger.Scripts (Validator)
import Plutus.V1.Ledger.Value (TokenName (TokenName))
import Plutus.V1.Ledger.Value qualified as Value
--------------------------------------------------------------------------------
import Agora.SafeMoney
import Agora.Stake
--------------------------------------------------------------------------------
stake :: Stake LQ
stake = Stake
policy :: MintingPolicy
policy = mkMintingPolicy (stakePolicy stake)
policySymbol :: CurrencySymbol
policySymbol = mintingPolicySymbol policy
signer :: PubKeyHash
signer = "8a30896c4fd5e79843e4ca1bd2cdbaa36f8c0bc3be7401214142019c"
validator :: Validator
validator = mkValidator (stakeValidator stake)
validatorHashTN :: TokenName
validatorHashTN = let ValidatorHash vh = validatorHash validator in TokenName vh
stakeCreation :: ScriptContext
stakeCreation =
let st = Value.singleton policySymbol validatorHashTN 1 -- Stake ST
datum :: Datum
datum = Datum (toBuiltinData $ StakeDatum 424242424242 signer)
in ScriptContext
{ scriptContextTxInfo =
TxInfo
{ txInfoInputs = []
, txInfoOutputs =
[ TxOut
{ txOutAddress = Address (ScriptCredential $ validatorHash validator) Nothing
, txOutValue = st <> Value.singleton "da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24" "LQ" 424242424242
, txOutDatumHash = Just (DatumHash "")
}
]
, txInfoFee = adaValueOf 2
, txInfoMint = st
, txInfoDCert = []
, txInfoWdrl = []
, txInfoValidRange = Interval.always
, txInfoSignatories = [signer]
, txInfoData = [("", datum)]
, txInfoId = "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be"
}
, scriptContextPurpose = Minting policySymbol
}

39
agora-test/Spec/Stake.hs Normal file
View file

@ -0,0 +1,39 @@
module Spec.Stake (tests) where
--------------------------------------------------------------------------------
import Prelude
--------------------------------------------------------------------------------
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (assertFailure, testCase)
--------------------------------------------------------------------------------
import Plutarch (compile)
import Plutarch.Evaluate (evaluateScript)
import Plutus.V1.Ledger.Scripts (Script)
--------------------------------------------------------------------------------
import Agora.Stake (stakePolicy)
--------------------------------------------------------------------------------
import Plutarch.Builtin (pforgetData)
import Spec.Sample.Stake qualified as Stake
--------------------------------------------------------------------------------
tests :: [TestTree]
tests =
[ testGroup "policy" $
[ scriptTest "minting" (compile $ stakePolicy Stake.stake # pforgetData (pconstantData ()) # pconstant Stake.stakeCreation)
]
]
scriptTest :: String -> Script -> TestTree
scriptTest name script = testCase name $ do
case evaluateScript script of
Left e -> assertFailure (show e)
Right _v -> pure ()

View file

@ -111,6 +111,7 @@ common test-deps
, quickcheck-instances
, tasty
, tasty-hedgehog
, tasty-hunit
, apropos-tx
library
@ -147,6 +148,11 @@ test-suite agora-test
hs-source-dirs: agora-test
other-modules:
Spec.Int
Spec.Sample.Stake
Spec.Stake
build-depends:
, agora
benchmark agora-bench
import: lang, deps

View file

@ -9,6 +9,7 @@ module Agora.SafeMoney (
-- * Types
MoneyClass,
PDiscrete,
Discrete,
-- * Utility functions
paddDiscrete,
@ -60,6 +61,10 @@ newtype PDiscrete (mc :: MoneyClass) (s :: S)
= PDiscrete (Term s PInteger)
deriving (PlutusType, PIsData, PEq, POrd) via (DerivePNewtype (PDiscrete mc) PInteger)
newtype Discrete (mc :: MoneyClass)
= Discrete Integer
deriving stock (Show)
-- | Add two `PDiscrete` values of the same `MoneyClass`.
paddDiscrete :: Term s (PDiscrete mc :--> PDiscrete mc :--> PDiscrete mc)
paddDiscrete = phoistAcyclic $

View file

@ -1,3 +1,5 @@
{-# LANGUAGE TemplateHaskell #-}
{- |
Module : Agora.Stake
Maintainer : emi@haskell.fyi
@ -8,6 +10,7 @@ Vote-lockable stake UTXOs holding GT.
module Agora.Stake (
PStakeDatum (..),
PStakeAction (..),
StakeDatum (..),
Stake (..),
stakePolicy,
stakeValidator,
@ -25,12 +28,18 @@ import Prelude
--------------------------------------------------------------------------------
import Plutus.V1.Ledger.Api (PubKeyHash)
import PlutusTx qualified
--------------------------------------------------------------------------------
import Plutarch (popaque)
import Plutarch.Api.V1 (
PCredential (PPubKeyCredential, PScriptCredential),
PMintingPolicy,
PPubKeyHash,
PScriptPurpose (PMinting, PSpending),
PTokenName,
PValidator,
mintingPolicySymbol,
mkMintingPolicy,
@ -92,6 +101,15 @@ newtype PStakeDatum (gt :: MoneyClass) (s :: S) = PStakeDatum
(PlutusType, PIsData, PDataFields)
via (PIsDataReprInstances (PStakeDatum gt))
-- | Haskell-level datum for Stake scripts.
data StakeDatum = StakeDatum
{ stakedAmount :: Integer
, owner :: PubKeyHash
}
deriving stock (Show, GHC.Generic)
PlutusTx.makeIsDataIndexed ''StakeDatum [('StakeDatum, 0)]
--------------------------------------------------------------------------------
{- What this Policy does
@ -162,12 +180,16 @@ stakePolicy _stake =
PScriptCredential validatorHash' -> P.do
validatorHash <- pletFields @'["_0"] validatorHash'
stakeDatum <- pletFields @'["owner", "stakedAmount"] stakeDatum'
-- TODO: figure out why this is required :/ (specifically, why `validatorHash._0` is `PData`)
tn <- plet (pfromData (punsafeCoerce validatorHash._0 :: Term _ (PAsData PTokenName)))
let stValue =
psingletonValue
# ownSymbol
-- This coerce is safe because the structure
-- of PValidatorHash is the same as PTokenName.
# punsafeCoerce validatorHash._0
# tn
# 1
let expectedValue =
paddValue
@ -180,8 +202,8 @@ stakePolicy _stake =
-- TODO: Needs to be >=, rather than ==
let valueCorrect = pdata value #== pdata expectedValue
ownerSignsTransaction #&& valueCorrect
ptraceIfFalse "ownerSignsTransaction" ownerSignsTransaction
#&& ptraceIfFalse "valueCorrect" valueCorrect
popaque (pconstant ())
pif (0 #< mintedST) minting burning

198
flake.lock generated
View file

@ -92,31 +92,14 @@
"type": "github"
}
},
"autodocodec": {
"flake": false,
"locked": {
"lastModified": 1644358110,
"narHash": "sha256-X1TNZlmO2qDFk3OL4Z1v/gzvd3ouoACAiMweutsYek4=",
"owner": "srid",
"repo": "autodocodec",
"rev": "42b42a7407f33c6c74fa4e8c84906aebfed28daf",
"type": "github"
},
"original": {
"owner": "srid",
"ref": "ghc921",
"repo": "autodocodec",
"type": "github"
}
},
"cabal-32": {
"flake": false,
"locked": {
"lastModified": 1603716527,
"narHash": "sha256-sDbrmur9Zfp4mPKohCD8IDZfXJ0Tjxpmr2R+kg5PpSY=",
"narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=",
"owner": "haskell",
"repo": "cabal",
"rev": "94aaa8e4720081f9c75497e2735b90f6a819b08e",
"rev": "48bf10787e27364730dd37a42b603cee8d6af7ee",
"type": "github"
},
"original": {
@ -146,11 +129,11 @@
"cabal-34": {
"flake": false,
"locked": {
"lastModified": 1622475795,
"narHash": "sha256-chwTL304Cav+7p38d9mcb+egABWmxo2Aq+xgVBgEb/U=",
"lastModified": 1640353650,
"narHash": "sha256-N1t6M3/wqj90AEdRkeC8i923gQYUpzSr8b40qVOZ1Rk=",
"owner": "haskell",
"repo": "cabal",
"rev": "b086c1995cdd616fc8d91f46a21e905cc50a1049",
"rev": "942639c18c0cd8ec53e0a6f8d120091af35312cd",
"type": "github"
},
"original": {
@ -178,6 +161,23 @@
}
},
"cabal-36": {
"flake": false,
"locked": {
"lastModified": 1641652457,
"narHash": "sha256-BlFPKP4C4HRUJeAbdembX1Rms1LD380q9s0qVDeoAak=",
"owner": "haskell",
"repo": "cabal",
"rev": "f27667f8ec360c475027dcaee0138c937477b070",
"type": "github"
},
"original": {
"owner": "haskell",
"ref": "3.6",
"repo": "cabal",
"type": "github"
}
},
"cabal-36_2": {
"flake": false,
"locked": {
"lastModified": 1640163203,
@ -422,11 +422,11 @@
},
"flake-utils": {
"locked": {
"lastModified": 1623875721,
"narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=",
"lastModified": 1644229661,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "f7e004a55b120c02ecb6219596820fcd32ca8772",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
"type": "github"
},
"original": {
@ -553,11 +553,11 @@
"hackage": {
"flake": false,
"locked": {
"lastModified": 1639357972,
"narHash": "sha256-NvVn00YOYZMqDUSiBbghJk/rm/nJItBEUJulWRGTgvk=",
"lastModified": 1646270198,
"narHash": "sha256-SakG546Zr9RuNPs5mhtT7CYPpvEDMGrWisWK/VpCvr0=",
"owner": "input-output-hk",
"repo": "hackage.nix",
"rev": "54adf6e47e20831d9c49a2b62e12f7f218fd7752",
"rev": "4cf90b36955597d0151940eabfb1b61a8ec42256",
"type": "github"
},
"original": {
@ -569,11 +569,11 @@
"hackage-nix": {
"flake": false,
"locked": {
"lastModified": 1637291070,
"narHash": "sha256-hTX2Xo36i9MR6PNwA/89C8daKjxmx5ZS5lwR2Cbp8Yo=",
"lastModified": 1644369434,
"narHash": "sha256-WqU6f1OhSM0UHXFW8Mhhvhz0tcij+NQVtmb6sW4RiFw=",
"owner": "input-output-hk",
"repo": "hackage.nix",
"rev": "6ea4ad5f4a5e2303cd64974329ba90ccc410a012",
"rev": "644a0d702abf84cdec62f4e620ff1034000e6146",
"type": "github"
},
"original": {
@ -617,16 +617,16 @@
"haskell-language-server": {
"flake": false,
"locked": {
"lastModified": 1638136578,
"narHash": "sha256-Reo9BQ12O+OX7tuRfaDPZPBpJW4jnxZetm63BxYncoM=",
"lastModified": 1643835246,
"narHash": "sha256-5LQHcQmi3mUGRgJu+X/m3jeM3kdkYjLD+KwgnxBlbeU=",
"owner": "haskell",
"repo": "haskell-language-server",
"rev": "745ef26f406dbdd5e4a538585f8519af9f1ccb09",
"rev": "024ddc8b3904f8b8e8fe67ba6b9ebd8a4bd7ce76",
"type": "github"
},
"original": {
"owner": "haskell",
"ref": "1.5.1",
"ref": "1.6.1.1",
"repo": "haskell-language-server",
"type": "github"
}
@ -669,6 +669,7 @@
"HTTP": "HTTP",
"cabal-32": "cabal-32",
"cabal-34": "cabal-34",
"cabal-36": "cabal-36",
"cardano-shell": "cardano-shell",
"flake-utils": "flake-utils",
"ghc-8.6.5-iohk": "ghc-8.6.5-iohk",
@ -688,11 +689,11 @@
"stackage": "stackage"
},
"locked": {
"lastModified": 1639371915,
"narHash": "sha256-i5kW3hPptzXwzkpI2FAkfdDA/9QEDl/9mrwwoeBxDJg=",
"lastModified": 1646278384,
"narHash": "sha256-Gv1Ws3vAojjvjATcsvwAOTuOhzpxwt6tBci7EBaXxU4=",
"owner": "input-output-hk",
"repo": "haskell.nix",
"rev": "e95a1f0dacbc64603c31d11e36e4ba1af8f0eb43",
"rev": "7e06e14ae1b894445254fe41288bfa7dd4ccbc6f",
"type": "github"
},
"original": {
@ -704,11 +705,11 @@
"haskell-nix_2": {
"flake": false,
"locked": {
"lastModified": 1629380841,
"narHash": "sha256-gWOWCfX7IgVSvMMYN6rBGK6EA0pk6pmYguXzMvGte+Q=",
"lastModified": 1646278384,
"narHash": "sha256-Gv1Ws3vAojjvjATcsvwAOTuOhzpxwt6tBci7EBaXxU4=",
"owner": "input-output-hk",
"repo": "haskell.nix",
"rev": "7215f083b37741446aa325b20c8ba9f9f76015eb",
"rev": "7e06e14ae1b894445254fe41288bfa7dd4ccbc6f",
"type": "github"
},
"original": {
@ -722,7 +723,7 @@
"HTTP": "HTTP_2",
"cabal-32": "cabal-32_2",
"cabal-34": "cabal-34_2",
"cabal-36": "cabal-36",
"cabal-36": "cabal-36_2",
"cardano-shell": "cardano-shell_2",
"flake-utils": "flake-utils_2",
"ghc-8.6.5-iohk": "ghc-8.6.5-iohk_2",
@ -730,8 +731,6 @@
"hpc-coveralls": "hpc-coveralls_2",
"nix-tools": "nix-tools_2",
"nixpkgs": [
"plutarch",
"haskell-nix",
"nixpkgs-2111"
],
"nixpkgs-2003": "nixpkgs-2003_2",
@ -918,11 +917,11 @@
"nix-tools": {
"flake": false,
"locked": {
"lastModified": 1636018067,
"narHash": "sha256-ng306fkuwr6V/malWtt3979iAC4yMVDDH2ViwYB6sQE=",
"lastModified": 1644395812,
"narHash": "sha256-BVFk/BEsTLq5MMZvdy3ZYHKfaS3dHrsKh4+tb5t5b58=",
"owner": "input-output-hk",
"repo": "nix-tools",
"rev": "ed5bd7215292deba55d6ab7a4e8c21f8b1564dda",
"rev": "d847c63b99bbec78bf83be2a61dc9f09b8a9ccc1",
"type": "github"
},
"original": {
@ -982,11 +981,11 @@
"nixpkgs": {
"flake": false,
"locked": {
"lastModified": 1628785280,
"narHash": "sha256-2B5eMrEr6O8ff2aQNeVxTB+9WrGE80OB4+oM6T7fOcc=",
"lastModified": 1645493675,
"narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6525bbc06a39f26750ad8ee0d40000ddfdc24acb",
"rev": "74b10859829153d5c5d50f7c77b86763759e8654",
"type": "github"
},
"original": {
@ -1030,11 +1029,11 @@
},
"nixpkgs-2105": {
"locked": {
"lastModified": 1639202042,
"narHash": "sha256-xEMgCsIcDUQ0kw9xvqU0wObns580kpdcr1ACz83+gHs=",
"lastModified": 1642244250,
"narHash": "sha256-vWpUEqQdVP4srj+/YLJRTN9vjpTs4je0cdWKXPbDItc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "499ca2a9f6463ce119e40361f4329afa921a1d13",
"rev": "0fd9ee1aa36ce865ad273f4f07fdc093adeb5c00",
"type": "github"
},
"original": {
@ -1062,11 +1061,11 @@
},
"nixpkgs-2111": {
"locked": {
"lastModified": 1639213685,
"narHash": "sha256-Evuobw7o9uVjAZuwz06Al0fOWZ5JMKOktgXR0XgWBtg=",
"lastModified": 1644510859,
"narHash": "sha256-xjpVvL5ecbyi0vxtVl/Fh9bwGlMbw3S06zE5nUzFB8A=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "453bcb8380fd1777348245b3c44ce2a2b93b2e2d",
"rev": "0d1d5d7e3679fec9d07f2eb804d9f9fdb98378d3",
"type": "github"
},
"original": {
@ -1078,11 +1077,11 @@
},
"nixpkgs-2111_2": {
"locked": {
"lastModified": 1644793108,
"narHash": "sha256-MN/ElRTuE7pWuf99Hr1pbAxA3ApDLYuK6hIsA5sagjc=",
"lastModified": 1646416052,
"narHash": "sha256-bfV62gYQGYjb/Gvw6MdMuEvWCcC838mI1Dzi1efjqTA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b61bf7a96aa6ddd3c425fa1db8c45acfdd82e36b",
"rev": "c78fc23f108b9a3bea9bf8693d2943ee0269c804",
"type": "github"
},
"original": {
@ -1126,11 +1125,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1639239143,
"narHash": "sha256-9fFMUs6m3/4ZMflSqRgO4iEkBtFBnDyLWa3AB2tOvfs=",
"lastModified": 1644486793,
"narHash": "sha256-EeijR4guVHgVv+JpOX3cQO+1XdrkJfGmiJ9XVsVU530=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e6df26a654b7fdd59a068c57001eab5736b1363c",
"rev": "1882c6b7368fd284ad01b0a5b5601ef136321292",
"type": "github"
},
"original": {
@ -1241,7 +1240,6 @@
"inputs": {
"Shrinker": "Shrinker",
"Win32-network": "Win32-network",
"autodocodec": "autodocodec",
"cardano-base": "cardano-base",
"cardano-crypto": "cardano-crypto",
"cardano-prelude": "cardano-prelude",
@ -1261,18 +1259,15 @@
],
"plutus": "plutus_2",
"protolude": "protolude",
"safe-coloured-text": "safe-coloured-text",
"sized-functors": "sized-functors",
"sydtest": "sydtest",
"th-extras": "th-extras",
"validity": "validity"
"th-extras": "th-extras"
},
"locked": {
"lastModified": 1645200363,
"narHash": "sha256-k/ecf2uasWwBV+zq3daJVGY3xnsYkLe3zmT+k+iZ++A=",
"lastModified": 1646730784,
"narHash": "sha256-pVvSa4fBoKXCdCu/NGduoKhr1/gGESCmj/Tr9Y5l9B4=",
"owner": "Plutonomicon",
"repo": "plutarch",
"rev": "473424c89b4457e58e009e65d411ace1efc3ea9e",
"rev": "aecc2050eb63ff0041576473aa3193070fe91314",
"type": "github"
},
"original": {
@ -1295,11 +1290,11 @@
"stackage-nix": "stackage-nix"
},
"locked": {
"lastModified": 1639153959,
"narHash": "sha256-tz8wEV5oO2yu2WFl3+wAPHedJJUP/NMFYgfcsbcyji4=",
"lastModified": 1646401716,
"narHash": "sha256-Xh4m6NVgxhtJZPW+/TH0KncginXLORO6EAN/ulitlrw=",
"owner": "input-output-hk",
"repo": "plutus",
"rev": "da4f85cdd2a3a261ce540e8dc51d2a3c5fa89ed2",
"rev": "73e4bbfc32ea233ba679d3f558a95adf8513a9d7",
"type": "github"
},
"original": {
@ -1416,23 +1411,6 @@
"plutarch": "plutarch"
}
},
"safe-coloured-text": {
"flake": false,
"locked": {
"lastModified": 1644357337,
"narHash": "sha256-sXSKw8m6O9K/H2BBiYqO5e4sJIo+9UP+UvEukRn28d8=",
"owner": "srid",
"repo": "safe-coloured-text",
"rev": "034f3612525568b422e0c62b52417d77b7cf31c2",
"type": "github"
},
"original": {
"owner": "srid",
"ref": "ghc921",
"repo": "safe-coloured-text",
"type": "github"
}
},
"sized-functors": {
"flake": false,
"locked": {
@ -1485,11 +1463,11 @@
"stackage": {
"flake": false,
"locked": {
"lastModified": 1639185224,
"narHash": "sha256-ZBL0Lvqq8/Iwl8F5sT2N9J8+HTh0OY+09LkkUVtuUtY=",
"lastModified": 1646270328,
"narHash": "sha256-WFzBTbZW9zKnZtHLBLGui9F1tBDKX7ixBtaQOG5SK/M=",
"owner": "input-output-hk",
"repo": "stackage.nix",
"rev": "14819f5c85a92e5fb6e322cc809c803fa6419bd4",
"rev": "b3171527569b52b3924d8e70e0aed753d3f55cc4",
"type": "github"
},
"original": {
@ -1546,23 +1524,6 @@
"type": "github"
}
},
"sydtest": {
"flake": false,
"locked": {
"lastModified": 1644358460,
"narHash": "sha256-1ZxTLL5YVxktyHqfMywwsNGx5nxNMPXnq33QI6BcvUI=",
"owner": "srid",
"repo": "sydtest",
"rev": "5b572105c30f79c5e20637c6af4eedf39e0ac85a",
"type": "github"
},
"original": {
"owner": "srid",
"ref": "ghc921",
"repo": "sydtest",
"type": "github"
}
},
"th-extras": {
"flake": false,
"locked": {
@ -1579,23 +1540,6 @@
"rev": "787ed752c1e5d41b5903b74e171ed087de38bffa",
"type": "github"
}
},
"validity": {
"flake": false,
"locked": {
"lastModified": 1644358698,
"narHash": "sha256-dpMIu08qXMzy8Kilk/2VWpuwIsfqFtpg/3mkwt5pdjA=",
"owner": "srid",
"repo": "validity",
"rev": "f7982549b95d0ab727950dc876ca06b1862135ba",
"type": "github"
},
"original": {
"owner": "srid",
"ref": "ghc921",
"repo": "validity",
"type": "github"
}
}
},
"root": "root",

View file

@ -80,7 +80,6 @@
additional = ps: [
ps.plutarch
ps.plutarch-benchmark
ps.tasty-quickcheck
ps.apropos-tx
];
};

View file

@ -1,8 +1,8 @@
cradle:
cabal:
- path: "./src"
- path: "./agora-src"
component: "lib:agora"
- path: "./bench"
- path: "./agora-bench"
component: "benchmark:agora-bench"
- path: "./test"
- path: "./agora-test"
component: "test:agora-test"