{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Consensus.Ledger.Mock.LedgerTables (tests) where

import Ouroboros.Consensus.Mock.Ledger
import Ouroboros.Consensus.Protocol.PBFT
import Test.Consensus.Ledger.Mock.Generators ()
import Test.LedgerTables
import Test.Tasty
import Test.Tasty.QuickCheck

type Block = SimpleBlock SimpleMockCrypto (SimplePBftExt SimpleMockCrypto PBftMockCrypto)

tests :: TestTree
tests :: TestTree
tests =
  TestName -> [TestTree] -> TestTree
testGroup
    TestName
"LedgerTables"
    [ TestName
-> (LedgerState Block EmptyMK
    -> LedgerState Block ValuesMK -> Property)
-> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"Stowable laws" (forall blk.
(HasLedgerTables LedgerState blk,
 CanStowLedgerTables (LedgerState blk), Show (TxIn blk),
 Show (TxOut blk)) =>
LedgerState blk EmptyMK -> LedgerState blk ValuesMK -> Property
prop_stowable_laws @Block)
    , TestName
-> (LedgerState Block EmptyMK
    -> LedgerTables Block ValuesMK -> Property)
-> TestTree
forall a. Testable a => TestName -> a -> TestTree
testProperty TestName
"HasLedgerTables laws" (forall blk.
(HasLedgerTables LedgerState blk, Show (TxIn blk),
 Show (TxOut blk)) =>
LedgerState blk EmptyMK -> LedgerTables blk ValuesMK -> Property
prop_hasledgertables_laws @Block)
    ]