packages feed

language-kort-0.1.0.0: test/Input.hs

{- This file is part of language-kort.
 -
 - Written in 2015 by fr33domlover <fr33domlover@rel4tion.org>.
 -
 - ♡ Copying is an act of love. Please copy, reuse and share.
 -
 - The author(s) have dedicated all copyright and related and neighboring
 - rights to this software to the public domain worldwide. This software is
 - distributed without any warranty.
 -
 - You should have received a copy of the CC0 Public Domain Dedication along
 - with this software. If not, see
 - <http://creativecommons.org/publicdomain/zero/1.0/>.
 -}

module Input where

import qualified Data.ByteString.Char8 as BSC
import qualified Data.Smaoin as S
import qualified Data.Smaoin.Vocabulary.Smaoin as VS
import Language.Kort

-- Possible judgements of parser about a Kort line
data Status = Clean | NotTwo | HasGen | NotRes | InvVal | Drop
    deriving (Eq, Show)

-- Kort lines, expected parser judgements and whether they have no generators
type Record = (Line, Status, Bool)

input :: [Record]
input =
    [ (cmnt "Top comment",                                       Drop,   True)

{-    -- 0 elements - invalid in Kort, must have at least 1
      -- clean
    , (stmt (u "i0.1") (u "r0.1") [],                            NotTwo, True)
      -- hasgen
    , (stmt (lg "l1")  (u "r0.2") [],                            NotTwo, False)
    , (stmt (u "i0.3") ug         [],                            NotTwo, False)
    , (stmt ug         (lg "l2")  [],                            NotTwo, False)
-}
      -- 1 element
      -- clean
    , (stmt (u "i1.1") (u "r1.1") [ru "a1.1"],                   NotTwo, True)
      -- hasgen
    , (stmt (u "i1.2") (lg "l2")  [rug],                         NotTwo, False)
    , (stmt ug         (u "r1.3") [rlg "l1"],                    NotTwo, False)
    , (stmt (lg "l3")  ug         [rug],                         NotTwo, False)
    , (stmt ug         (lg "l4")  [ru "a1.5"],                   NotTwo, False)
      -- notres
    , (stmt (u "i1.6") (u "r1.6") [vu "v" "t1.6"],               NotTwo, True)
      -- hasgen, notres
    , (stmt (u "i1.7") (lg "l2")  [vu "v" "t1.7"],               NotTwo, False)
    , (stmt ug         (u "r1.8") [vlg "v" "l1"],                NotTwo, False)
    , (stmt (lg "l3")  ug         [vug "v"],                     NotTwo, False)
    , (stmt ug         (lg "l4")  [vu "v" "t1.A"],               NotTwo, False)
      -- notres, invval
    , (stmt (u "i1.B") (u "r1.B") [vbool "c"],                   NotTwo, True)
    , (stmt (u "i1.C") (u "r1.C") [vchar "xy"],                  NotTwo, True)
    , (stmt (u "i1.D") (u "r1.D") [vstr "\\x"],                  NotTwo, True)
    , (stmt (u "i1.E") (u "r1.E") [vnum "A/+"],                  NotTwo, True)
    , (stmt (u "i1.F") (u "r1.F") [vdata "[x]"],                 NotTwo, True)
      -- hasgen, notres, invval
    , (stmt (u "i1.G") (lg "l2")  [vbool "A/+"],                 NotTwo, False)
    , (stmt ug         (u "r1.H") [vchar "[+]"],                 NotTwo, False)
    , (stmt (lg "l3")  ug         [vstr "\\x"],                  NotTwo, False)
    , (stmt ug         (lg "l4")  [vnum "xyz"],                  NotTwo, False)
    , (stmt ug         ug         [vdata "-5/7"],                NotTwo, False)

    , (cmnt "Middle\ncomment",                                   Drop,   True)

      -- 2 elements
      -- clean
    , (stmt (u "i2.1") (u "r2.1") [ru "a2.1",  ru "b2.1"],       Clean,  True)
    , (stmt (u "i2.2") (u "r2.2") [ru "a2.2",  vbool "[_]"],     Clean,  True)
    , (stmt (u "i2.3") (u "r2.3") [ru "a2.3",  vchar "\\xa"],    Clean,  True)
    , (stmt (u "i2.4") (u "r2.4") [ru "a2.4",  vstr "x\\xaz"],   Clean,  True)
    , (stmt (u "i2.5") (u "r2.5") [ru "a2.5",  vnum "4$-6"],     Clean,  True)
    , (stmt (u "i2.6") (u "r2.6") [ru "a2.6",  vdata "Ab+5"],    Clean,  True)
    , (stmt (u "i2.7") (u "r2.7") [ru "a2.7",  vu "v" "s2.2"],   Clean,  True)
      -- hasgen
    , (stmt (u "i2.8") (lg "l4")  [ru "a2.8",  ru "b2.8"],       HasGen, False)
    , (stmt ug         (u "r2.9") [ru "a2.9",  vbool "[_]"],     HasGen, False)
    , (stmt (u "i2.A") ug         [ru "a2.A",  vchar "\\xA"],    HasGen, False)
    , (stmt ug         (lg "l2")  [ru "a2.B",  vstr "x\\xAz"],   HasGen, False)
    , (stmt (lg "l3")  ug         [ru "a2.C",  vnum "4$-6"],     HasGen, False)
    , (stmt ug         (u "r2.D") [ru "a2.D",  vdata "Ab+5"],    HasGen, False)
    , (stmt (u "i2.E") (u "r2.E") [rug,        vu "v" "s2.E"],   HasGen, False)
    , (stmt (u "i2.F") (lg "l2")  [rug,        vu "v" "s2.F"],   HasGen, False)
    , (stmt ug         (u "r2.G") [rlg "l1",   ru "b2.G"],       HasGen, False)
    , (stmt (lg "l3")  ug         [ru "a2.H",  rug],             HasGen, False)
    , (stmt ug         (lg "l4")  [rlg "l5",   ru "a2.I"],       HasGen, False)
    , (stmt (u "i2.J") (lg "l2")  [ru "a2.J",  rug],             HasGen, False)
    , (stmt ug         (u "r2.K") [ru "a2.J",  rlg "l1"],        HasGen, False)
    , (stmt (lg "l3")  ug         [rlg "a2.L", rug],             HasGen, False)
    , (stmt ug         (lg "l4")  [ru "a2.M",  rlg "l4"],        HasGen, False)
    , (stmt (u "i2.N") (lg "l2")  [ru "a2.N",  vug "l5"],        HasGen, False)
    , (stmt ug         (u "r2.O") [ru "a2.O",  vlg "v" "l1"],    HasGen, False)
    , (stmt (lg "l3")  ug         [rlg "a2.P", vug "l2"],        HasGen, False)
    , (stmt ug         (lg "l4")  [ru "a2.Q",  vlg "v" "l4"],    HasGen, False)
      -- notres
    , (stmt (u "i2.R") (u "r2.R") [vu "v" "t2.R", ru "b2.R"],    NotRes, True)
    , (stmt (u "i2.S") (u "r2.S") [vu "v" "t2.S", vbool "?"],    NotRes, True)
    , (stmt (u "i2.T") (u "r2.T") [vnum "x",      vdata "A"],    NotRes, True)
    , (stmt (u "i2.U") (u "r2.U") [vchar "v",     ru "b2.U"],    NotRes, True)
      -- invval
    , (stmt (u "i2.V") (u "r2.V") [ru "a2.V", vbool "x\\xAz"],   InvVal, True)
    , (stmt (u "i2.W") (u "r2.W") [ru "a2.W", vchar "4$-6"],     InvVal, True)
    , (stmt (u "i2.X") (u "r2.X") [ru "a2.X", vstr "x\\x"],      InvVal, True)
    , (stmt (u "i2.Y") (u "r2.Y") [ru "a2.Y", vnum "[_]"],       InvVal, True)
    , (stmt (u "i2.Z") (u "r2.Z") [ru "a2.Z", vdata "%"],        InvVal, True)
      -- hasgen, notres
    , (stmt (u "i2.a") (lg "l2")  [vu "v" "t2.a", rug],          HasGen, False)
    , (stmt ug         (u "r2.b") [vlg "v" "l1",  ru "b2.b"],    HasGen, False)
    , (stmt (lg "l3")  ug         [vug "v",       vchar "a"],    HasGen, False)
    , (stmt ug         (lg "l4")  [vu "v" "t2.d", rlg "l1"],     HasGen, False)
      -- notres, invval
    , (stmt (u "i2.e") (u "r2.e") [vbool "c",    ru "a2.e"],     NotRes, True)
    , (stmt (u "i2.f") (u "r2.f") [vchar "xy",   vu "v" "s2.e"], NotRes, True)
    , (stmt (u "i2.g") (u "r2.g") [vstr "\\x",   vu "v" "s2.g"], NotRes, True)
    , (stmt (u "i2.h") (u "r2.h") [vnum "A/+",   ru "a2.h"],     NotRes, True)
    , (stmt (u "i2.i") (u "r2.i") [vdata "[x]",  vu "v" "s2.i"], NotRes, True)
    , (stmt (u "i2.j") (u "r2.j") [vbool "[x]",  vchar "xy"],    NotRes, True)
    , (stmt (u "i2.k") (u "r2.k") [vchar "x",    vstr "\\x"],    NotRes, True)
    , (stmt (u "i2.l") (u "r2.l") [vstr "xy",    vnum "A/+"],    NotRes, True)
    , (stmt (u "i2.m") (u "r2.m") [vnum "0xA",   vdata "[x]"],   NotRes, True)
    , (stmt (u "i2.n") (u "r2.n") [vdata "/4z",  vbool "c"],     NotRes, True)
      -- hasgen, notres, invval
    , (stmt (u "i2.o") (lg "l2")  [vbool "A/+",  rug],           HasGen, False)
    , (stmt ug         (u "r.p")  [vchar "[+]",  vlg "v" "l6"],  HasGen, False)
    , (stmt (lg "l3")  ug         [vstr "\\x",   vu "v" "s2.q"], HasGen, False)
    , (stmt ug         (lg "l4")  [vnum "xyz",   vug "v"],       HasGen, False)
    , (stmt ug         ug         [vdata "-5/7", rlg "l6"],      HasGen, False)
    , (stmt (u "i2.t") (u "r2.t") [vbool "A/+",  rug],           HasGen, False)
    , (stmt (u "i2.u") (u "r2.u") [vchar "[+]",  vlg "v" "l6"],  HasGen, False)
    , (stmt (lg "l3")  ug         [vstr "\\x",   vu "v" "s2.v"], HasGen, False)
    , (stmt (u "i2.w") (u "r2.w") [vnum "xyz",   vug "v"],       HasGen, False)
    , (stmt (u "i2.x") (u "r2.x") [vdata "-5/7", rlg "l6"],      HasGen, False)

      -- 3+ elements
    , (stmt (u "i3.1") (u "r3.1") [ru"a3.1",ru"b3.1",ru"c3.1"],  NotTwo, True)
    , (stmt (u "i3.2") (u "r3.2") [ru"a3.2",ru"b3.2",rlg"l4"],   NotTwo, False)
    , (stmt (u "i3.3") (lg "l6")  [ru"a3.3",ru"b3.3",ru"c3.3"],  NotTwo, False)
    , (stmt (u "i3.4") (u "r3.4") [vbool"5",ru"b3.4",ru"c3.4"],  NotTwo, True)
    , (stmt (u "i3.5") (u "r3.5") [ru"a3.5",vnum"a",ru"c3.5"],   NotTwo, True)
    , (stmt (u "i3.6") (u "r3.6") [vdata"$",ru"b3.6",vchar"xy"], NotTwo, True)
    , (stmt (u "i3.7") (u "r3.7") (replicate 10 (ru "x3.7")),    NotTwo, True)
    , (stmt (u "i3.8") (u "r3.8") (replicate 10 (vug "v")),      NotTwo, False)
    , (stmt (u "i3.9") (u "r3.9") (replicate 10 (vchar "v")),    NotTwo, True)
    , (stmt (u "i3.A") ug         (replicate 10 (vchar "vw")),   NotTwo, False)

    , (cmnt "Bottom\rcomment",                                   Drop,   True)
    ]
    where
    cmnt                = Left
    stmt i r e          = Right $ Statement i r e
    ru                  = Resource . Uid
    lg                  = LGenerator
    ug                  = UGenerator
    u                   = Uid
    rlg                 = Resource . LGenerator
    rug                 = Resource UGenerator
    vu v t              = Value v (Uid t)
    vlg v l             = Value v (LGenerator l)
    vug v               = Value v UGenerator
    from (S.Resource r) = Uid $ BSC.unpack r
    vbool v             = Value v $ from VS._Boolean
    vchar v             = Value v $ from VS._Character
    vstr v              = Value v $ from VS._String
    vnum v              = Value v $ from VS._Number
    vdata v             = Value v $ from VS._Data