diff options
author | Daniel Gröber <dxld@darkboxed.org> | 2017-12-03 01:08:37 +0100 |
---|---|---|
committer | Daniel Gröber <dxld@darkboxed.org> | 2018-01-18 14:10:26 +0100 |
commit | 412148ce5f7911e818c6fe1e50981c2cd94858b1 (patch) | |
tree | 750ed1a5aaf56e3e5475ab9b6a7d9435e1617e14 | |
parent | 49dca6e8963a8fcd4e30d76d65068e9fa76a4a8d (diff) |
ghc-session: Add backpack test project
-rw-r--r-- | cabal-helper.cabal | 8 | ||||
-rw-r--r-- | tests/GhcSession.hs | 1 | ||||
-rw-r--r-- | tests/bkpregex/Setup.hs | 2 | ||||
-rw-r--r-- | tests/bkpregex/bkpregex.cabal | 29 | ||||
-rw-r--r-- | tests/bkpregex/regex-example/Main.hs | 12 | ||||
-rw-r--r-- | tests/bkpregex/regex-indef/Regex.hs | 14 | ||||
-rw-r--r-- | tests/bkpregex/regex-indef/Str.hsig | 9 | ||||
-rw-r--r-- | tests/bkpregex/regex-types/Regex/Types.hs | 7 | ||||
-rw-r--r-- | tests/bkpregex/str-impls/Str/ByteString.hs | 17 | ||||
-rw-r--r-- | tests/bkpregex/str-impls/Str/String.hs | 21 |
10 files changed, 120 insertions, 0 deletions
diff --git a/cabal-helper.cabal b/cabal-helper.cabal index fd0cb4e..ece81c1 100644 --- a/cabal-helper.cabal +++ b/cabal-helper.cabal @@ -46,6 +46,14 @@ extra-source-files: README.md tests/exeintlib/lib/*.hs tests/exeintlib/intlib/*.hs + tests/bkpregex/*.cabal + tests/bkpregex/*.hs + tests/bkpregex/regex-example/*.hs + tests/bkpregex/regex-indef/*.hs + tests/bkpregex/regex-indef/*.hsig + tests/bkpregex/regex-types/Regex/*.hs + tests/bkpregex/str-impls/Str/*.hs + source-repository head type: git location: https://github.com/DanielG/cabal-helper.git diff --git a/tests/GhcSession.hs b/tests/GhcSession.hs index 0deefca..9e967a1 100644 --- a/tests/GhcSession.hs +++ b/tests/GhcSession.hs @@ -33,6 +33,7 @@ main = do [] -> [ ("tests/exelib" , parseVer "1.10") , ("tests/exeintlib", parseVer "2.0") , ("tests/flib" , parseVer "2.0") + , ("tests/bkpregex" , parseVer "2.0") ] xs -> map (,parseVer "0") xs diff --git a/tests/bkpregex/Setup.hs b/tests/bkpregex/Setup.hs new file mode 100644 index 0000000..9a994af --- /dev/null +++ b/tests/bkpregex/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/tests/bkpregex/bkpregex.cabal b/tests/bkpregex/bkpregex.cabal new file mode 100644 index 0000000..678ddbb --- /dev/null +++ b/tests/bkpregex/bkpregex.cabal @@ -0,0 +1,29 @@ +name: bkpregex +version: 0.1.0.0 +build-type: Simple +cabal-version: >=2.0 + +library str-impls + build-depends: base, bytestring + exposed-modules: Str.String, Str.ByteString + hs-source-dirs: str-impls + +library regex-types + build-depends: base + exposed-modules: Regex.Types + hs-source-dirs: regex-types + +library regex-indef + build-depends: base, regex-types + signatures: Str + exposed-modules: Regex + hs-source-dirs: regex-indef + +executable regex-example + main-is: Main.hs + build-depends: base, regex-indef, regex-types, str-impls + mixins: regex-indef (Regex as Regex.String) + requires (Str as Str.String), + regex-indef (Regex as Regex.ByteString) + requires (Str as Str.ByteString) + hs-source-dirs: regex-example diff --git a/tests/bkpregex/regex-example/Main.hs b/tests/bkpregex/regex-example/Main.hs new file mode 100644 index 0000000..76d2974 --- /dev/null +++ b/tests/bkpregex/regex-example/Main.hs @@ -0,0 +1,12 @@ +{-# LANGUAGE OverloadedStrings #-} +module Main where + +import Regex.Types +import qualified Regex.String +import qualified Regex.ByteString + +nocs = Rep (Alt (Sym 'a') (Sym 'b')) +onec = Seq nocs (Sym 'c') +evencs = Seq (Rep (Seq onec onec)) nocs +main = print (Regex.String.accept evencs "acc") >> + print (Regex.ByteString.accept evencs "acc") diff --git a/tests/bkpregex/regex-indef/Regex.hs b/tests/bkpregex/regex-indef/Regex.hs new file mode 100644 index 0000000..506566b --- /dev/null +++ b/tests/bkpregex/regex-indef/Regex.hs @@ -0,0 +1,14 @@ +module Regex where + +import Prelude hiding (null) +import Str +import Regex.Types + +accept :: Reg -> Str -> Bool +accept Eps u = null u +accept (Sym c) u = u == singleton c +accept (Alt p q) u = accept p u || accept q u +accept (Seq p q) u = + or [accept p u1 && accept q u2 | (u1, u2) <- splits u] +accept (Rep r) u = + or [and [accept r ui | ui <- ps] | ps <- parts u] diff --git a/tests/bkpregex/regex-indef/Str.hsig b/tests/bkpregex/regex-indef/Str.hsig new file mode 100644 index 0000000..23bfb8c --- /dev/null +++ b/tests/bkpregex/regex-indef/Str.hsig @@ -0,0 +1,9 @@ +signature Str where + +data Str +instance Eq Str + +null :: Str -> Bool +singleton :: Char -> Str +splits :: Str -> [(Str, Str)] +parts :: Str -> [[Str]] diff --git a/tests/bkpregex/regex-types/Regex/Types.hs b/tests/bkpregex/regex-types/Regex/Types.hs new file mode 100644 index 0000000..2900749 --- /dev/null +++ b/tests/bkpregex/regex-types/Regex/Types.hs @@ -0,0 +1,7 @@ +module Regex.Types where + +data Reg = Eps + | Sym Char + | Alt Reg Reg + | Seq Reg Reg + | Rep Reg diff --git a/tests/bkpregex/str-impls/Str/ByteString.hs b/tests/bkpregex/str-impls/Str/ByteString.hs new file mode 100644 index 0000000..cd49fed --- /dev/null +++ b/tests/bkpregex/str-impls/Str/ByteString.hs @@ -0,0 +1,17 @@ +module Str.ByteString(module Data.ByteString.Char8, module Str.ByteString) where + +import Prelude hiding (length, null, splitAt) +import Data.ByteString.Char8 +import Data.ByteString + +type Str = ByteString + +splits :: Str -> [(Str, Str)] +splits s = fmap (\n -> splitAt n s) [0..length s] + +parts :: Str -> [[Str]] +parts s | null s = [[]] + | otherwise = do + n <- [1..length s] + let (l, r) = splitAt n s + fmap (l:) (parts r) diff --git a/tests/bkpregex/str-impls/Str/String.hs b/tests/bkpregex/str-impls/Str/String.hs new file mode 100644 index 0000000..bba89de --- /dev/null +++ b/tests/bkpregex/str-impls/Str/String.hs @@ -0,0 +1,21 @@ +module Str.String where + +import Prelude hiding (null) +import qualified Prelude as P + +type Str = String + +null :: Str -> Bool +null = P.null + +singleton :: Char -> Str +singleton c = [c] + +splits :: Str -> [(Str, Str)] +splits [] = [([], [])] +splits (c:cs) = ([], c:cs):[(c:s1,s2) | (s1,s2) <- splits cs] + +parts :: Str -> [[Str]] +parts [] = [[]] +parts [c] = [[[c]]] +parts (c:cs) = concat [[(c:p):ps, [c]:p:ps] | p:ps <- parts cs] |