| Copyright | (C) 2024 QBayLogic B.V. |
|---|---|
| License | BSD2 (see the file LICENSE) |
| Maintainer | QBayLogic B.V. <devops@qbaylogic.com> |
| Safe Haskell | None |
| Language | GHC2021 |
Protocols.PacketStream.Hedgehog
Description
Provides Hedgehog generators, models and utility functions for testing
PacketStream circuits.
Synopsis
- chopBy :: Int -> [a] -> [[a]]
- chopPacket :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => PacketStreamM2S dataWidth meta -> [PacketStreamM2S 1 meta]
- chunkByPacket :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [[PacketStreamM2S dataWidth meta]]
- chunkToPacket :: forall (dataWidth :: Nat) meta. KnownNat dataWidth => [PacketStreamM2S 1 meta] -> PacketStreamM2S dataWidth meta
- fullPackets :: forall (dataWidth :: Nat) meta. KnownNat dataWidth => [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta]
- smearAbort :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta]
- dropAbortedPackets :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta]
- downConvert :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S 1 meta]
- upConvert :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => [PacketStreamM2S 1 meta] -> [PacketStreamM2S dataWidth meta]
- depacketizerModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) metaIn header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, NFDataX metaIn, BitPack header, BitSize header ~ (headerBytes * 8)) => (header -> metaIn -> metaOut) -> [PacketStreamM2S dataWidth metaIn] -> [PacketStreamM2S dataWidth metaOut]
- depacketizeToDfModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) a header metaIn. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (header -> metaIn -> a) -> [PacketStreamM2S dataWidth metaIn] -> [a]
- dropTailModel :: forall (dataWidth :: Nat) meta (n :: Natural). (KnownNat dataWidth, 1 <= dataWidth, 1 <= n) => SNat n -> [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta]
- packetizerModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) metaIn header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (metaIn -> metaOut) -> (metaIn -> header) -> [PacketStreamM2S dataWidth metaIn] -> [PacketStreamM2S dataWidth metaOut]
- packetizeFromDfModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) a header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (a -> metaOut) -> (a -> header) -> [a] -> [PacketStreamM2S dataWidth metaOut]
- data AbortMode
- = Abort {
- amPacketGen :: Gen Bool
- amTransferGen :: Gen Bool
- | NoAbort
- = Abort {
- data PacketOptions = PacketOptions {}
- defPacketOptions :: PacketOptions
- genValidPacket :: forall (dataWidth :: Nat) meta. (1 <= dataWidth, KnownNat dataWidth) => PacketOptions -> Gen meta -> Range Int -> Gen [PacketStreamM2S dataWidth meta]
- genPackets :: forall (dataWidth :: Nat) meta. (1 <= dataWidth, KnownNat dataWidth) => Int -> Int -> Gen [PacketStreamM2S dataWidth meta] -> Gen [PacketStreamM2S dataWidth meta]
Utility functions
chopPacket :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => PacketStreamM2S dataWidth meta -> [PacketStreamM2S 1 meta] Source #
Split a single PacketStream transfer with data width dataWidth to
a list of PacketStream transfers with data width 1.
chunkByPacket :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [[PacketStreamM2S dataWidth meta]] Source #
Partition a list of PacketStream transfers into complete packets.
chunkToPacket :: forall (dataWidth :: Nat) meta. KnownNat dataWidth => [PacketStreamM2S 1 meta] -> PacketStreamM2S dataWidth meta Source #
Merge a list of PacketStream transfers with data width 1 to
a single PacketStream transfer with data width dataWidth.
fullPackets :: forall (dataWidth :: Nat) meta. KnownNat dataWidth => [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta] Source #
Set _last of the last transfer in the list to Just 1
smearAbort :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta] Source #
Models
dropAbortedPackets :: forall (dataWidth :: Nat) meta. [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta] Source #
Drops packets if one of the transfers in the packet has _abort set.
downConvert :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S 1 meta] Source #
Splits a list of PacketStream transfers with data width 1 into
a list of PacketStream transfers with data width dataWidth
upConvert :: forall (dataWidth :: Natural) meta. (1 <= dataWidth, KnownNat dataWidth) => [PacketStreamM2S 1 meta] -> [PacketStreamM2S dataWidth meta] Source #
Merges a list of PacketStream transfers with data width dataWidth into
a list of PacketStream transfers with data width 1
depacketizerModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) metaIn header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, NFDataX metaIn, BitPack header, BitSize header ~ (headerBytes * 8)) => (header -> metaIn -> metaOut) -> [PacketStreamM2S dataWidth metaIn] -> [PacketStreamM2S dataWidth metaOut] Source #
Model of the generic depacketizerC.
depacketizeToDfModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) a header metaIn. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (header -> metaIn -> a) -> [PacketStreamM2S dataWidth metaIn] -> [a] Source #
Model of the generic depacketizeToDfC.
dropTailModel :: forall (dataWidth :: Nat) meta (n :: Natural). (KnownNat dataWidth, 1 <= dataWidth, 1 <= n) => SNat n -> [PacketStreamM2S dataWidth meta] -> [PacketStreamM2S dataWidth meta] Source #
Model of dropTailC.
packetizerModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) metaIn header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (metaIn -> metaOut) -> (metaIn -> header) -> [PacketStreamM2S dataWidth metaIn] -> [PacketStreamM2S dataWidth metaOut] Source #
Model of the generic packetizerC.
packetizeFromDfModel :: forall (dataWidth :: Nat) (headerBytes :: Nat) a header metaOut. (KnownNat dataWidth, KnownNat headerBytes, 1 <= dataWidth, 1 <= headerBytes, BitPack header, BitSize header ~ (headerBytes * 8)) => (a -> metaOut) -> (a -> header) -> [a] -> [PacketStreamM2S dataWidth metaOut] Source #
Model of the generic packetizeFromDfC.
Hedgehog generators
Abort generation options for packet generation.
Constructors
| Abort | |
Fields
| |
| NoAbort | |
data PacketOptions Source #
Various configuration options for packet generation.
Constructors
| PacketOptions | |
Fields
| |
defPacketOptions :: PacketOptions Source #
Default packet generation options:
- Allow the generation of a zero-byte packet;
- Allow the generation of a trailing zero-byte transfer;
- 50% chance to generate aborted transfers. If aborts are generated, 10% of transfers will be aborted.
Arguments
| :: forall (dataWidth :: Nat) meta. (1 <= dataWidth, KnownNat dataWidth) | |
| => PacketOptions | Configuration options for packet generation. |
| -> Gen meta | Generator for the metadata. |
| -> Range Int | The amount of transfers with |
| -> Gen [PacketStreamM2S dataWidth meta] |
Arguments
| :: forall (dataWidth :: Nat) meta. (1 <= dataWidth, KnownNat dataWidth) | |
| => Int | Minimum amount of packets to generate. |
| -> Int | Maximum amount of packets to generate. |
| -> Gen [PacketStreamM2S dataWidth meta] | Packet generator. |
| -> Gen [PacketStreamM2S dataWidth meta] |
Generate packets with a user-supplied generator and a linear range.