packages feed

ca-patterns-0.2.0.0: test/TestPatterns.hs

{-# LANGUAGE OverloadedStrings, PatternSynonyms #-}

module TestPatterns where

import Data.String (IsString)

import qualified Data.Vector as Vec
import Data.Vector (Vector)

import qualified Data.CA.Pattern as Pat
import Data.CA.Pattern (Pattern, Cell)

o :: Cell
o = False

pattern O :: Cell
pattern O = True

empty :: Pattern
empty = Pat.fromList []

singleton :: Pattern
singleton = Pat.fromList [ [ O ] ]

allDead :: Pattern
allDead = Pat.fromList
  [ [ o, o, o ]
  , [ o, o, o ]
  ]

glider :: Pattern
glider = Pat.fromList
  [ [ o, O, o ]
  , [ o, o, O ]
  , [ O, O, O ]
  ]

largeGlider :: Pattern
largeGlider = Pat.fromList
  [ [ o, O, o, o, o ]
  , [ o, o, O, o, o ]
  , [ O, O, O, o, o ]
  , [ o, o, o, o, o ]
  ]

cutGlider :: Pattern
cutGlider = Pat.fromList
  [ [ o, O, o, o ]
  , [ o, o, O, o ]
  ]

twoGliders1 :: Pattern
twoGliders1 = Pat.fromList
  [ [ o, O, o, o, o ]
  , [ o, o, O, o, o ]
  , [ O, O, O, o, o ]
  , [ o, o, o, O, o ]
  , [ o, o, o, o, O ]
  , [ o, o, O, O, O ]
  ]

twoGliders2 :: Pattern
twoGliders2 = Pat.fromList
  [ [ o, o, o, O, o ]
  , [ o, o, o, o, O ]
  , [ o, o, O, O, O ]
  , [ o, O, o, o, o ]
  , [ o, o, O, o, o ]
  , [ O, O, O, o, o ]
  ]

gliderStr1, gliderStr2 :: (IsString s) => s
gliderStr1 = ".O.\n..O\nOOO\n"
gliderStr2 = "_*_\n__*\n***\n"

diagonal :: Pattern
diagonal = Pat.fromList
  [ [ O, o, o, o ]
  , [ o, O, o, o ]
  , [ o, o, O, o ]
  ]

reflectedX :: Pattern
reflectedX = Pat.fromList
  [ [ o, o, o, O ]
  , [ o, o, O, o ]
  , [ o, O, o, o ]
  ]

reflectedY :: Pattern
reflectedY = Pat.fromList
  [ [ o, o, O, o ]
  , [ o, O, o, o ]
  , [ O, o, o, o ]
  ]

rotatedL :: Pattern
rotatedL = Pat.fromList
  [ [ o, o, o ]
  , [ o, o, O ]
  , [ o, O, o ]
  , [ O, o, o ]
  ]

rotatedR :: Pattern
rotatedR = Pat.fromList
  [ [ o, o, O ]
  , [ o, O, o ]
  , [ O, o, o ]
  , [ o, o, o ]
  ]

horizontal :: Pattern
horizontal = Pat.fromList
  [ [ O, O, O ]
  , [ o, o, o ]
  , [ O, O, O ]
  , [ o, o, o ]
  , [ O, O, O ]
  ]

list1 :: [[Cell]]
list1 =
  [ [ o, O, o, O ]
  , [ O, o, o ]
  , [ o, O, o ]
  ]

list2 :: [[Cell]]
list2 =
  [ [ o, o, O ]
  , [ o, O, o ]
  , []
  ]

vector1, vector2 :: Vector (Vector Cell)
vector1 = Vec.fromList (map Vec.fromList list1)
vector2 = Vec.fromList (map Vec.fromList list2)

fromRectList1, fromRectList2 :: Pattern
fromRectList1 = Pat.fromRectList list1
fromRectList2 = Pat.fromRectList list2

fromList1, fromList2 :: Pattern
fromList1 = Pat.fromList list1
fromList2 = Pat.fromList list2

fromRectVector1, fromRectVector2 :: Pattern
fromRectVector1 = Pat.fromRectVector vector1
fromRectVector2 = Pat.fromRectVector vector2

fromVector1, fromVector2 :: Pattern
fromVector1 = Pat.fromVector vector1
fromVector2 = Pat.fromVector vector2

paddedList1 :: [[Cell]]
paddedList1 =
  [ [ o, O, o, O ]
  , [ O, o, o, o ]
  , [ o, O, o, o ]
  ]

paddedList2 :: [[Cell]]
paddedList2 =
  [ [ o, o, O ]
  , [ o, O, o ]
  , [ o, o, o ]
  ]

paddedVector1, paddedVector2 :: Vector (Vector Cell)
paddedVector1 = Vec.fromList (map Vec.fromList paddedList1)
paddedVector2 = Vec.fromList (map Vec.fromList paddedList2)

untrimmed :: Pattern
untrimmed = Pat.fromList
  [ [ o, o, o, o, o ]
  , [ o, o, o, o, o ]
  , [ o, o, O, o, o ]
  , [ o, o, o, o, o ]
  , [ o, o, o, o, o ]
  ]

trimmedTop :: Pattern
trimmedTop = Pat.fromList
  [ [ o, o, O, o, o ]
  , [ o, o, o, o, o ]
  , [ o, o, o, o, o ]
  ]

trimmedBottom :: Pattern
trimmedBottom = Pat.fromList
  [ [ o, o, o, o, o ]
  , [ o, o, o, o, o ]
  , [ o, o, O, o, o ]
  ]

trimmedLeft :: Pattern
trimmedLeft = Pat.fromList
  [ [ o, o, o ]
  , [ o, o, o ]
  , [ O, o, o ]
  , [ o, o, o ]
  , [ o, o, o ]
  ]

trimmedRight :: Pattern
trimmedRight = Pat.fromList
  [ [ o, o, o ]
  , [ o, o, o ]
  , [ o, o, O ]
  , [ o, o, o ]
  , [ o, o, o ]
  ]

oneByTwo :: [Pattern]
oneByTwo = map Pat.fromList
  [ [ [ o, o ] ]
  , [ [ o, O ] ]
  , [ [ O, o ] ]
  , [ [ O, O ] ]
  ]

twoByTwo :: [Pattern]
twoByTwo = map Pat.fromList
  [ [ [ o, o ], [ o, o ] ]
  , [ [ o, o ], [ o, O ] ]
  , [ [ o, o ], [ O, o ] ]
  , [ [ o, o ], [ O, O ] ]
  , [ [ o, O ], [ o, o ] ]
  , [ [ o, O ], [ o, O ] ]
  , [ [ o, O ], [ O, o ] ]
  , [ [ o, O ], [ O, O ] ]
  , [ [ O, o ], [ o, o ] ]
  , [ [ O, o ], [ o, O ] ]
  , [ [ O, o ], [ O, o ] ]
  , [ [ O, o ], [ O, O ] ]
  , [ [ O, O ], [ o, o ] ]
  , [ [ O, O ], [ o, O ] ]
  , [ [ O, O ], [ O, o ] ]
  , [ [ O, O ], [ O, O ] ]
  ]

singletonCombos :: [Pattern]
singletonCombos = map Pat.fromList
  [ [ [ O, o ]
    , [ o, o ]
    , [ o, O ]
    ]
  , [ [ O, o, o ]
    , [ o, o, o ]
    , [ o, o, O ]
    ]
  , [ [ O, o ]
    , [ o, o ]
    , [ o, o ]
    , [ o, O ]
    ]
  , [ [ O, o, o ]
    , [ o, o, o ]
    , [ o, o, o ]
    , [ o, o, O ]
    ]
  ]