packages feed

copilot-2.0.4: Examples/RegExpExamples.hs

-- | Regular expression library tests for the
-- copilotRegexp and copilotRegexpB functions

module RegExpExamples ( regExpExamples ) where

import qualified Prelude as P
import Language.Copilot

reset :: Stream Bool
reset = [ False ] ++ cycle [ False, False, False, True ]


-- | Regular expression matching on integral streams
s :: Stream Int8
s = extern "e" (Just $ P.cycle [ 0, 1 ])

test1 :: Stream Bool
test1 = copilotRegexp s "(<0>?<0>?<1>)+|<2>?<3>+" reset


-- | Regular expressions over boolean streams

s0, s1, s2, s3, s4, s5 :: Stream Bool
s0    = [ True,  False, False, False, False, False ] ++ s1
s1    = [ False, True,  False, False, False, False ] ++ s2
s2    = [ False, False, True,  False, False, False ] ++ s3
s3    = [ False, False, False, True,  False, False ] ++ s4
s4    = [ False, False, False, False, True,  False ] ++ s5
s5    = [ False, False, False, False, False, True  ] ++ s0


test2 :: Stream Bool
test2 = copilotRegexpB
       "<s0><s1><s2><s3><s4><s5>(<s0>|<s1>|<s2>|<s3>|<s4>|<s5>)+"
       [ ( "s0", s0 )
       , ( "s1", s1 )
       , ( "s2", s2 )
       , ( "s3", s3 )
       , ( "s4", s4 )
       , ( "s5", s5 ) ] false

spec :: Spec
spec = do
  observer "test1" test1
  observer "test2" test2
  observer "reset" reset

regExpExamples :: IO ()
regExpExamples = interpret 15 spec