implemented posSearch

This commit is contained in:
Jonathan Lamothe 2020-02-11 23:58:47 -05:00
parent 457298e565
commit 25e4929f0b
2 changed files with 33 additions and 9 deletions

View File

@ -26,6 +26,8 @@ module Mtlstats.Helpers.Position
, getPositions
) where
import Data.Char (toUpper)
import Data.List (isInfixOf)
import qualified Data.Set as S
import Lens.Micro ((^.))
@ -39,7 +41,10 @@ posSearch
-- ^ The database
-> [(Int, String)]
-- ^ A list of result indices and their values
posSearch = undefined
posSearch sStr db = filter sFunc $ zip [0..] ps
where
sFunc (_, pos) = map toUpper sStr `isInfixOf` map toUpper pos
ps = getPositions db
-- | Searches the 'Database' for an exact position
posSearchExact

View File

@ -22,23 +22,42 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
module Helpers.PositionSpec (spec) where
import Lens.Micro ((&), (.~))
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec (Spec, context, describe, it, shouldBe)
import Mtlstats.Helpers.Position
import Mtlstats.Types
spec :: Spec
spec = describe "Position"
spec = describe "Position" $ do
posSearchSpec
getPositionsSpec
posSearchSpec :: Spec
posSearchSpec = describe "posSearch" $ mapM_
(\(sStr, expected) -> context ("search string: " ++ show sStr) $
it ("should be " ++ show expected) $
posSearch sStr db `shouldBe` expected)
[ ( "fOo"
, [ ( 2, "foo" )
]
)
, ( "A"
, [ ( 0, "bar" )
, ( 1, "baz" )
]
)
]
getPositionsSpec :: Spec
getPositionsSpec = describe "getPositions" $ let
db = newDatabase & dbPlayers .~
[ newPlayer 2 "Joe" "foo"
, newPlayer 3 "Bob" "bar"
, newPlayer 5 "Bill" "foo"
, newPlayer 8 "Ed" "baz"
]
expected = ["bar", "baz", "foo"]
in it ("should be " ++ show expected) $
getPositions db `shouldBe` expected
db :: Database
db = newDatabase & dbPlayers .~
[ newPlayer 2 "Joe" "foo"
, newPlayer 3 "Bob" "bar"
, newPlayer 5 "Bill" "foo"
, newPlayer 8 "Ed" "baz"
]