blob: 9202bcfffb203e6db54261e65f2b96dcddd9363b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnboxedTuples #-}
import Control.Monad (unless)
import GHC.Exts
import GHC.Types
-- This test is nearly a copy of T11296. In T11296, it is
-- shrinkMutableByteArray# that is tested. Here, it is
-- shrinkSmallMutableArray# that is tested.
data SmallArray = SA (SmallMutableArray# RealWorld Integer)
main :: IO ()
main = do
let element = 42 :: Integer
ba# <- IO (\s0 -> case newSmallArray# 256# element s0 of
(# s1, ba# #) -> (# s1, SA ba# #))
let go n = do
shrink ba# n
sz <- getSize ba#
unless (sz == n) $ print (sz, n)
mapM go [128, 64, 63, 32, 2, 1]
return ()
shrink :: SmallArray -> Int -> IO ()
shrink (SA ba#) (I# n#) = IO (\s ->
case shrinkSmallMutableArray# ba# n# s of
s' -> (# s', () #))
getSize :: SmallArray -> IO Int
getSize (SA ba#) = IO (\s ->
case getSizeofSmallMutableArray# ba# s of
(# s', n# #) -> (# s', I# n# #))
|