77 lines
1.9 KiB
Haskell
77 lines
1.9 KiB
Haskell
package TagEngineTester(mkTagEngineTester) where
|
|
|
|
import TagEngine
|
|
import ActionSeq
|
|
import Printf
|
|
import Util
|
|
|
|
type NumTags = 5
|
|
|
|
mkTagEngineTester :: Module Empty
|
|
mkTagEngineTester = do
|
|
tagEngine :: TagEngine 5 <- mkTagEngine
|
|
runOnce :: Reg Bool <- mkReg False
|
|
|
|
s :: ActionSeq
|
|
s <-
|
|
let
|
|
requestTagAction :: Action
|
|
requestTagAction =
|
|
do
|
|
tag <- tagEngine.requestTag
|
|
-- $display $time " got tag : " (fshow tag)
|
|
action {}
|
|
|
|
retireTagAction :: UInt 3 -> Action
|
|
retireTagAction tag =
|
|
do
|
|
res <- tagEngine.retireTag tag
|
|
-- $display $time " retiring tag : " (fshow tag) " " (fshow res)
|
|
action {}
|
|
|
|
in
|
|
actionSeq $
|
|
do
|
|
$display "=== TESTING TagEngine ==="
|
|
let expectedTag = 4
|
|
tag <- tagEngine.requestTag
|
|
dynamicAssert (tag == expectedTag) ""
|
|
|> do
|
|
let expectedTag = 3
|
|
tag <- tagEngine.requestTag
|
|
dynamicAssert (tag == expectedTag) ""
|
|
|> do
|
|
let expectedTag = 2
|
|
tag <- tagEngine.requestTag
|
|
dynamicAssert (tag == expectedTag) ""
|
|
|> do
|
|
let expectedTag = 1
|
|
tag <- tagEngine.requestTag
|
|
dynamicAssert (tag == expectedTag) ""
|
|
|> do
|
|
let expectedTag = 0
|
|
tag <- tagEngine.requestTag
|
|
dynamicAssert (tag == expectedTag) ""
|
|
|> do retireTagAction 2
|
|
|> do
|
|
retireTagAction 4
|
|
let expectedTag :: MkTagType NumTags
|
|
expectedTag = 2
|
|
tag <- tagEngine.requestTag
|
|
dynamicAssert (tag == expectedTag) ""
|
|
|> do
|
|
retireTagAction 2
|
|
let expectedTag = 4
|
|
tag <- tagEngine.requestTag
|
|
dynamicAssert (tag == expectedTag) ""
|
|
|> do
|
|
$display "=== PASSED ==="
|
|
terminateSimNoError
|
|
|
|
addRules $
|
|
rules
|
|
"start unit test": when (runOnce == False) ==>
|
|
do
|
|
s.start
|
|
runOnce := True
|