packages feed

clash-prelude-1.10.1: tests/Clash/Tests/CheckedLiterals/Signals.hs

{-|
Copyright  :  (C) 2026, QBayLogic B.V.
License    :  BSD2 (see the file LICENSE)
Maintainer :  QBayLogic B.V. <devops@qbaylogic.com>

Smoke tests for the passthrough @CheckedLiteral@ instances on 'Signal' and
'DSignal': they forward the check to the signal's element type.

The @toTestCases@ helper only injects one module import, so we rely on
'System' being re-exported from 'Clash.Signal' and 'Clash.Signal.Delayed'.
-}

module Clash.Tests.CheckedLiterals.Signals (tests) where

import Prelude

import Test.Tasty (TestTree, testGroup)
import Clash.Tests.CheckedLiterals.Common (toTestCases)

pMod :: String
pMod = "Clash.Prelude"

signalTests :: TestTree
signalTests = testGroup "Signal" $ toTestCases
  [ (pMod, "Signal System (Unsigned 2)", "3",  [])
  , (pMod, "Signal System (Unsigned 2)", "4",  ["Literal 4 is (potentially) out of bounds.", "Unsigned 2 has bounds: [0 .. 3]."])
  , (pMod, "Signal System (Signed 2)",   "-2", [])
  , (pMod, "Signal System (Signed 2)",   "2",  ["Signed 2 has bounds: [-2 .. 1]"])
  , (pMod, "Signal System (UFixed 1 2)", "0.75", [])
  , (pMod, "Signal System (UFixed 1 2)", "-1.0", ["Literal -1.0 is out of bounds, because UFixed cannot represent negative numbers."])
  ]

dsignalTests :: TestTree
dsignalTests = testGroup "DSignal" $ toTestCases
  [ (pMod, "DSignal System 0 (Unsigned 2)", "3", [])
  , (pMod, "DSignal System 0 (Unsigned 2)", "4", ["Literal 4 is (potentially) out of bounds.", "Unsigned 2 has bounds: [0 .. 3]."])
  , (pMod, "DSignal System 0 (Signed 2)", "-2",  [])
  , (pMod, "DSignal System 0 (Signed 2)", "2",   ["Signed 2 has bounds: [-2 .. 1]"])
  ]

tests :: TestTree
tests = testGroup "Signals" [signalTests, dsignalTests]