qute-0.1.0: test/Memory.hs
-- SPDX-FileCopyrightText: 2025 Sören Tempel <soeren+git@soeren-tempel.net>
--
-- SPDX-License-Identifier: GPL-3.0-only
module Memory (memTests) where
import Data.Array.IO (IOUArray)
import Data.Word (Word8)
import Language.QBE.Simulator.Memory
import Test.Tasty
import Test.Tasty.HUnit
memTests :: TestTree
memTests =
testGroup
"Memory tests"
[ testCase "Create memory and extract its size" $ do
mem <- mkMemory 0x0 512 :: IO (Memory IOUArray Word8)
memSize mem >>= assertEqual "" 512,
testCase "Store and read byte" $ do
m <- mkMemory 0 64 :: IO (Memory IOUArray Word8)
storeBytes m 0x0 [0xff]
loadBytes m 0x0 1 >>= assertEqual "" [0xff],
testCase "Store and read bytes" $ do
m <- mkMemory 0 32 :: IO (Memory IOUArray Word8)
storeBytes m 0x0 [0xde, 0xad, 0xbe, 0xef]
loadBytes m 0x0 4 >>= assertEqual "" [0xde, 0xad, 0xbe, 0xef],
testCase "Store and read multiple bytes" $ do
m <- mkMemory 0 4 :: IO (Memory IOUArray Word8)
storeBytes m 0x0 [0xde, 0xad]
storeBytes m 0x2 [0xbe, 0xef]
loadBytes m 0x0 2 >>= assertEqual "" [0xde, 0xad]
loadBytes m 0x2 2 >>= assertEqual "" [0xbe, 0xef]
loadBytes m 0x0 4 >>= assertEqual "" [0xde, 0xad, 0xbe, 0xef],
testCase "Overlapping memory address" $ do
addrOverlap 0x100 0x100 1 @?= True
addrOverlap 100 200 50 @?= False
addrOverlap 116 120 4 @?= False
addrOverlap 100 100 0 @?= False
]