packages feed

pathfindingcore-1.3.0: test/InterpreterTests.hs

module InterpreterTests(tests) where

import Test.Tasty(testGroup, TestTree)
import Test.Tasty.HUnit((@?=), testCase)

import Data.Array.IArray(listArray)

import PathFindingCore.PathingMap.Coordinate(Coordinate(Coord))
import PathFindingCore.PathingMap.Interpreter(fromMapString, PathingMapData(PathingMapData), PathingMapString(PathingMapString))
import PathFindingCore.PathingMap.Terrain(Terrain(Empty, Goal, Mound, Self, Wall, Water))

tests = testGroup "Test interpreter" [
   testInterpreter "Simple grid"          "*G"        (0, 0) (1, 0) (1, 0) [Self,  Goal]
 , testInterpreter "One-line grid 1"      "*      G"  (0, 0) (7, 0) (7, 0) [Self,  Empty, Empty, Empty, Empty, Empty, Empty, Goal]
 , testInterpreter "One-line grid 2"      "G      *"  (7, 0) (0, 0) (7, 0) [Goal,  Empty, Empty, Empty, Empty, Empty, Empty, Self]
 , testInterpreter "One-line grid 3"      "G %D%  *"  (7, 0) (0, 0) (7, 0) [Goal,  Empty, Water, Wall,  Water, Empty, Empty, Self]
 , testInterpreter "Simple vertical grid" "*|G"       (0, 1) (0, 0) (0, 1) [Goal,  Self]
 , testInterpreter "One-line vert grid 1" "*| | | |G" (0, 4) (0, 0) (0, 4) [Goal,  Empty, Empty, Empty, Self]
 , testInterpreter "One-line vert grid 2" "G| | | |*" (0, 0) (0, 4) (0, 4) [Self,  Empty, Empty, Empty, Goal]
 , testInterpreter "One-line vert grid 3" "G| |%|D|*" (0, 0) (0, 4) (0, 4) [Self,  Wall,  Water, Empty, Goal]
 , testInterpreter "2x2 grid 1"           "G | *"     (1, 0) (0, 1) (1, 1) [Empty, Goal,  Self,  Empty]
 , testInterpreter "2x2 grid 2"           "G*|  "     (1, 1) (0, 1) (1, 1) [Empty, Goal,  Empty, Self]
 , testInterpreter "2x2 grid 3"           "G*|DD"     (1, 1) (0, 1) (1, 1) [Wall,  Goal,  Wall,  Self]
 , testInterpreter "2x2 grid 4"           "DD|*G"     (0, 0) (1, 0) (1, 1) [Self,  Wall,  Goal,  Wall]
 , testInterpreter "5x5 grid 1"           m5x5p1      (3, 1) (1, 3) (4, 4) [Wall,  Wall,  Wall,  Wall,  Wall,  Wall,  Empty, Empty, Goal,  Wall,  Wall,  Empty, Empty, Empty, Wall, Wall,  Self,  Empty, Empty, Wall, Wall,  Wall,  Wall,  Wall,  Wall]
 , testInterpreter "5x5 grid 2"           m5x5p2      (0, 0) (2, 4) (4, 4) [Self,  Wall,  Water, Empty, Empty, Wall,  Wall,  Water, Wall,  Wall,  Empty, Empty, Water, Wall,  Goal, Empty, Water, Water, Wall,  Wall, Water, Water, Empty, Empty, Empty]
 , testInterpreter "Past troublemaker"    trblmkr     (4, 2) (1, 1) (4, 2) [Water, Mound, Empty, Empty, Goal,  Water, Empty, Water, Empty, Empty, Empty, Empty, Empty, Water, Self]
 ]
 where
   m5x5p1  = "DDDDD|DG  D|D   D|D  *D|DDDDD"
   m5x5p2  = " DGD | DDD |%%%% |DD %%|*D  %"
   trblmkr = " %  *|\
             \OG% %|\
             \%    |"

testInterpreter :: Text -> Text -> (Int, Int) -> (Int, Int) -> (Int, Int) -> [Terrain] -> TestTree
testInterpreter desc strGrid (x1, y1) (x2, y2) (ux, uy) arr = testCase (asString desc) assertion
  where
    pmStr     = PathingMapString strGrid "|"
    grid      = listArray (Coord 0 0, Coord ux uy) arr
    pmData    = PathingMapData (Coord x1 y1) (Coord x2 y2) grid
    assertion = (fromMapString pmStr) @?= pmData