chore(users): grfn -> aspen
Change-Id: I6c6847fac56f0a9a1a2209792e00a3aec5e672b9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10809 Autosubmit: aspen <root@gws.fyi> Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi>
This commit is contained in:
parent
0ba476a426
commit
82ecd61f5c
478 changed files with 75 additions and 77 deletions
127
users/aspen/xanthous/test/Xanthous/Generators/Level/UtilSpec.hs
Normal file
127
users/aspen/xanthous/test/Xanthous/Generators/Level/UtilSpec.hs
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
{-# LANGUAGE PackageImports #-}
|
||||
--------------------------------------------------------------------------------
|
||||
module Xanthous.Generators.Level.UtilSpec (main, test) where
|
||||
--------------------------------------------------------------------------------
|
||||
import Test.Prelude
|
||||
import System.Random (mkStdGen)
|
||||
import Control.Monad.Random (runRandT)
|
||||
import Data.Array.ST (STUArray, runSTUArray, thaw)
|
||||
import Data.Array.IArray (bounds, array)
|
||||
import Data.Array.MArray (newArray, readArray, writeArray)
|
||||
import Data.Array (Array, range, listArray, Ix)
|
||||
import Control.Monad.ST (ST, runST)
|
||||
import "checkers" Test.QuickCheck.Instances.Array ()
|
||||
import Linear.V2
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Util
|
||||
import Xanthous.Data (width, height)
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Generators.Level.Util
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
main :: IO ()
|
||||
main = defaultMain test
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
newtype GenArray a b = GenArray (Array a b)
|
||||
deriving stock (Show, Eq)
|
||||
|
||||
instance (Ix a, Arbitrary a, CoArbitrary a, Arbitrary b)
|
||||
=> Arbitrary (GenArray a b) where
|
||||
arbitrary = GenArray <$> do
|
||||
(mkElem :: a -> b) <- arbitrary
|
||||
minDims <- arbitrary
|
||||
maxDims <- arbitrary
|
||||
let bnds = (minDims, maxDims)
|
||||
pure $ listArray bnds $ mkElem <$> range bnds
|
||||
|
||||
test :: TestTree
|
||||
test = testGroup "Xanthous.Generators.Util"
|
||||
[ testGroup "randInitialize"
|
||||
[ testProperty "returns an array of the correct dimensions"
|
||||
$ \dims seed aliveChance ->
|
||||
let gen = mkStdGen seed
|
||||
res = runSTUArray
|
||||
$ fmap fst
|
||||
$ flip runRandT gen
|
||||
$ randInitialize dims aliveChance
|
||||
in bounds res === (0, V2 (dims ^. width) (dims ^. height))
|
||||
]
|
||||
, testGroup "numAliveNeighborsM"
|
||||
[ testProperty "maxes out at 8"
|
||||
$ \(GenArray (arr :: Array (V2 Word) Bool)) loc ->
|
||||
let
|
||||
act :: forall s. ST s Word
|
||||
act = do
|
||||
mArr <- thaw @_ @_ @_ @(STUArray s) arr
|
||||
numAliveNeighborsM mArr loc
|
||||
res = runST act
|
||||
in counterexample (show res) $ between 0 8 res
|
||||
, testCase "on the outer x edge" $
|
||||
let act :: forall s. ST s Word
|
||||
act = do
|
||||
cells <- thaw @_ @_ @_ @(STUArray s) $ array @Array @Bool @(V2 Word)
|
||||
(V2 0 0, V2 2 2)
|
||||
[ (V2 0 0, True), (V2 1 0, True), (V2 2 0, True)
|
||||
, (V2 0 1, False), (V2 1 1, False), (V2 2 1, True)
|
||||
, (V2 0 2, True), (V2 1 2, True), (V2 2 2, True)
|
||||
]
|
||||
numAliveNeighborsM cells (V2 0 1)
|
||||
res = runST act
|
||||
in res @?= 7
|
||||
, testCase "on the outer y edge" $
|
||||
let act :: forall s. ST s Word
|
||||
act = do
|
||||
cells <- thaw @_ @_ @_ @(STUArray s) $ array @Array @Bool @(V2 Word)
|
||||
(V2 0 0, V2 2 2)
|
||||
[ (V2 0 0, True), (V2 1 0, True), (V2 2 0, True)
|
||||
, (V2 0 1, False), (V2 1 1, False), (V2 2 1, True)
|
||||
, (V2 0 2, True), (V2 1 2, True), (V2 2 2, True)
|
||||
]
|
||||
numAliveNeighborsM cells (V2 1 0)
|
||||
res = runST act
|
||||
in res @?= 6
|
||||
]
|
||||
, testGroup "numAliveNeighbors"
|
||||
[ testProperty "is equivalient to runST . numAliveNeighborsM . thaw" $
|
||||
\(GenArray (arr :: Array (V2 Word) Bool)) loc ->
|
||||
let
|
||||
act :: forall s. ST s Word
|
||||
act = do
|
||||
mArr <- thaw @_ @_ @_ @(STUArray s) arr
|
||||
numAliveNeighborsM mArr loc
|
||||
res = runST act
|
||||
in numAliveNeighbors arr loc === res
|
||||
, testCase "on the outer x edge" $
|
||||
let cells =
|
||||
array @Array @Bool @(V2 Word)
|
||||
(V2 0 0, V2 2 2)
|
||||
[ (V2 0 0, True), (V2 1 0, True), (V2 2 0, True)
|
||||
, (V2 0 1, False), (V2 1 1, False), (V2 2 1, True)
|
||||
, (V2 0 2, True), (V2 1 2, True), (V2 2 2, True)
|
||||
]
|
||||
in numAliveNeighbors cells (V2 0 1) @?= 7
|
||||
, testCase "on the outer y edge" $
|
||||
let cells =
|
||||
array @Array @Bool @(V2 Word)
|
||||
(V2 0 0, V2 2 2)
|
||||
[ (V2 0 0, True), (V2 1 0, True), (V2 2 0, True)
|
||||
, (V2 0 1, False), (V2 1 1, False), (V2 2 1, True)
|
||||
, (V2 0 2, True), (V2 1 2, True), (V2 2 2, True)
|
||||
]
|
||||
in numAliveNeighbors cells (V2 1 0) @?= 6
|
||||
]
|
||||
, testGroup "cloneMArray"
|
||||
[ testCase "clones the array" $ runST $
|
||||
let
|
||||
go :: forall s. ST s Assertion
|
||||
go = do
|
||||
arr <- newArray @(STUArray s) (0 :: Int, 5) (1 :: Int)
|
||||
arr' <- cloneMArray @_ @(STUArray s) arr
|
||||
writeArray arr' 0 1234
|
||||
x <- readArray arr 0
|
||||
pure $ x @?= 1
|
||||
in go
|
||||
]
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue