From 412148ce5f7911e818c6fe1e50981c2cd94858b1 Mon Sep 17 00:00:00 2001 From: Daniel Gröber Date: Sun, 3 Dec 2017 01:08:37 +0100 Subject: ghc-session: Add backpack test project --- tests/GhcSession.hs | 1 + tests/bkpregex/Setup.hs | 2 ++ tests/bkpregex/bkpregex.cabal | 29 +++++++++++++++++++++++++++++ tests/bkpregex/regex-example/Main.hs | 12 ++++++++++++ tests/bkpregex/regex-indef/Regex.hs | 14 ++++++++++++++ tests/bkpregex/regex-indef/Str.hsig | 9 +++++++++ tests/bkpregex/regex-types/Regex/Types.hs | 7 +++++++ tests/bkpregex/str-impls/Str/ByteString.hs | 17 +++++++++++++++++ tests/bkpregex/str-impls/Str/String.hs | 21 +++++++++++++++++++++ 9 files changed, 112 insertions(+) create mode 100644 tests/bkpregex/Setup.hs create mode 100644 tests/bkpregex/bkpregex.cabal create mode 100644 tests/bkpregex/regex-example/Main.hs create mode 100644 tests/bkpregex/regex-indef/Regex.hs create mode 100644 tests/bkpregex/regex-indef/Str.hsig create mode 100644 tests/bkpregex/regex-types/Regex/Types.hs create mode 100644 tests/bkpregex/str-impls/Str/ByteString.hs create mode 100644 tests/bkpregex/str-impls/Str/String.hs (limited to 'tests') 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] -- cgit v1.2.3