diff options
author | Griffin Smith <grfn@gws.fyi> | 2021-11-24T22·10-0500 |
---|---|---|
committer | grfn <grfn@gws.fyi> | 2021-11-25T17·31+0000 |
commit | 4b11859d046b470a87d73edc8447ed73a3f7a6da (patch) | |
tree | 5824920ffba3d90a87ce491055ec333af9e675c4 /users/grfn/xanthous/test/Xanthous | |
parent | bf4d8ab603a754c326d946e1a51c6ff641142e56 (diff) |
feat(gs/xanthous): Allow generating creatures with items r/3097
Add an `equippedItems` field to the CreatureType raw, which provides a chance for generating that creature with an item equipped, which goes into a new `inventory` field on the creature entity itself. Currently the creature doesn't actually *use* this equipped item, but it's a step. This commit also adds a broken-dagger equipped 90% of the time to the "husk" creature. Change-Id: I6416c0678ba7bc1b002c5ce6119f7dc97dd86437
Diffstat (limited to 'users/grfn/xanthous/test/Xanthous')
3 files changed, 46 insertions, 14 deletions
diff --git a/users/grfn/xanthous/test/Xanthous/Entities/RawTypesSpec.hs b/users/grfn/xanthous/test/Xanthous/Entities/RawTypesSpec.hs index f5feb8a506db..e23f7faba3a6 100644 --- a/users/grfn/xanthous/test/Xanthous/Entities/RawTypesSpec.hs +++ b/users/grfn/xanthous/test/Xanthous/Entities/RawTypesSpec.hs @@ -1,8 +1,11 @@ +{-# LANGUAGE RecordWildCards #-} -------------------------------------------------------------------------------- module Xanthous.Entities.RawTypesSpec (main, test) where -------------------------------------------------------------------------------- import Test.Prelude -------------------------------------------------------------------------------- +import Data.Interval (Extended(..), (<=..<=)) +-------------------------------------------------------------------------------- import Xanthous.Entities.RawTypes -------------------------------------------------------------------------------- @@ -12,17 +15,31 @@ main = defaultMain test test :: TestTree test = testGroup "Xanthous.Entities.RawTypesSpec" [ testGroup "CreatureGenerateParams" - [ testBatch $ monoid @CreatureGenerateParams mempty - , testGroup "canGenerate" - [ testProperty "no bounds" $ \level -> - let gps = CreatureGenerateParams Nothing Nothing - in canGenerate level gps - , testProperty "min bound" $ \level minB -> - let gps = CreatureGenerateParams (Just minB) Nothing - in canGenerate level gps === (level >= minB) - , testProperty "max bound" $ \level maxB -> - let gps = CreatureGenerateParams Nothing (Just maxB) - in canGenerate level gps === (level <= maxB) + [ testGroup "Ord laws" + [ testProperty "comparability" $ \(a :: CreatureGenerateParams) b -> + a <= b || b <= a + , testProperty "transitivity" $ \(a :: CreatureGenerateParams) b c -> + a <= b && b <= c ==> a <= c + , testProperty "reflexivity" $ \(a :: CreatureGenerateParams) -> + a <= a + , testProperty "antisymmetry" $ \(a :: CreatureGenerateParams) b -> + (a <= b && b <= a) == (a == b) ] + , testGroup "canGenerate" $ + let makeParams minB maxB = + let _levelRange = maybe NegInf Finite minB <=..<= maybe PosInf Finite maxB + _equippedItem = Nothing + in CreatureGenerateParams {..} + in + [ testProperty "no bounds" $ \level -> + let gps = makeParams Nothing Nothing + in canGenerate level gps + , testProperty "min bound" $ \level minB -> + let gps = makeParams (Just minB) Nothing + in canGenerate level gps === (level >= minB) + , testProperty "max bound" $ \level maxB -> + let gps = makeParams Nothing (Just maxB) + in canGenerate level gps === (level <= maxB) + ] ] ] diff --git a/users/grfn/xanthous/test/Xanthous/Entities/RawsSpec.hs b/users/grfn/xanthous/test/Xanthous/Entities/RawsSpec.hs index 2e6f35457fc7..b6c80be51be7 100644 --- a/users/grfn/xanthous/test/Xanthous/Entities/RawsSpec.hs +++ b/users/grfn/xanthous/test/Xanthous/Entities/RawsSpec.hs @@ -4,6 +4,8 @@ module Xanthous.Entities.RawsSpec (main, test) where import Test.Prelude import Xanthous.Entities.Raws +import Xanthous.Entities.RawTypes + (_Creature, entityName, generateParams, HasEquippedItem (equippedItem)) main :: IO () main = defaultMain test @@ -12,5 +14,17 @@ test :: TestTree test = testGroup "Xanthous.Entities.Raws" [ testGroup "raws" [ testCase "are all valid" $ raws `deepseq` pure () + , testCase "all CreatureEquippedItems reference existent entity names" $ + let notFound + = raws + ^.. folded + . _Creature + . generateParams + . _Just + . equippedItem + . _Just + . entityName + . filtered (isNothing . raw) + in null notFound @? ("Some entities weren't found: " <> show notFound) ] ] diff --git a/users/grfn/xanthous/test/Xanthous/Game/StateSpec.hs b/users/grfn/xanthous/test/Xanthous/Game/StateSpec.hs index b02abb04b49c..34584f73b2ad 100644 --- a/users/grfn/xanthous/test/Xanthous/Game/StateSpec.hs +++ b/users/grfn/xanthous/test/Xanthous/Game/StateSpec.hs @@ -4,9 +4,10 @@ module Xanthous.Game.StateSpec (main, test) where import Test.Prelude -------------------------------------------------------------------------------- import Xanthous.Game.State -import Xanthous.Entities.Raws (raws, entityFromRaw) -import Control.Monad.Random (evalRandT) -import System.Random (getStdGen) +import Xanthous.Entities.Raws (raws) +import Xanthous.Generators.Level.LevelContents (entityFromRaw) +import Control.Monad.Random (evalRandT) +import System.Random (getStdGen) -------------------------------------------------------------------------------- main :: IO () |