{-| Module : Haskoin.Test.Block Copyright : No rights reserved License : UNLICENSE Maintainer : jprupp@protonmail.ch Stability : experimental Portability : POSIX -} module Haskoin.Util.Arbitrary.Block where import Haskoin.Block.Common import Haskoin.Block.Merkle import Haskoin.Constants import Haskoin.Util.Arbitrary.Crypto import Haskoin.Util.Arbitrary.Network import Haskoin.Util.Arbitrary.Transaction import Test.QuickCheck -- | Block full or arbitrary transactions. arbitraryBlock :: Network -> Gen Block arbitraryBlock net = do h <- arbitraryBlockHeader c <- choose (0,10) txs <- vectorOf c (arbitraryTx net) return $ Block h txs -- | Block header with random hash. arbitraryBlockHeader :: Gen BlockHeader arbitraryBlockHeader = BlockHeader <$> arbitrary <*> arbitraryBlockHash <*> arbitraryHash256 <*> arbitrary <*> arbitrary <*> arbitrary -- | Arbitrary block hash. arbitraryBlockHash :: Gen BlockHash arbitraryBlockHash = BlockHash <$> arbitraryHash256 -- | Arbitrary 'GetBlocks' object with at least one block hash. arbitraryGetBlocks :: Gen GetBlocks arbitraryGetBlocks = GetBlocks <$> arbitrary <*> listOf1 arbitraryBlockHash <*> arbitraryBlockHash -- | Arbitrary 'GetHeaders' object with at least one block header. arbitraryGetHeaders :: Gen GetHeaders arbitraryGetHeaders = GetHeaders <$> arbitrary <*> listOf1 arbitraryBlockHash <*> arbitraryBlockHash -- | Arbitrary 'Headers' object with at least one block header. arbitraryHeaders :: Gen Headers arbitraryHeaders = Headers <$> listOf1 ((,) <$> arbitraryBlockHeader <*> arbitraryVarInt) -- | Arbitrary 'MerkleBlock' with at least one hash. arbitraryMerkleBlock :: Gen MerkleBlock arbitraryMerkleBlock = do bh <- arbitraryBlockHeader ntx <- arbitrary hashes <- listOf1 arbitraryHash256 c <- choose (1,10) flags <- vectorOf (c*8) arbitrary return $ MerkleBlock bh ntx hashes flags