Skip to content

Commit 1a8aaff

Browse files
committed
Agumented the compiler tests to test for opaques
1 parent 4b18dd3 commit 1a8aaff

File tree

5 files changed

+173
-175
lines changed

5 files changed

+173
-175
lines changed

lambda-buffers-compiler/lambda-buffers-compiler.cabal

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ test-suite tests
153153
, containers >=0.6
154154
, lambda-buffers-compiler
155155
, lambda-buffers-compiler-pb >=0.1
156-
, mtl >=2.2
157156
, proto-lens >=0.7
158157
, QuickCheck >=2.14
159158
, tasty >=1.4

lambda-buffers-compiler/test/Test/LambdaBuffers/Compiler/Gen.hs

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
module Test.LambdaBuffers.Compiler.Gen (genCompilerInput) where
22

33
import Control.Lens ((&), (.~), (^.))
4-
import Control.Monad.Reader (replicateM)
4+
import Data.Foldable (Foldable (toList))
55
import Data.List qualified as List
6+
import Data.List.NonEmpty (NonEmpty ((:|)))
67
import Data.ProtoLens (Message (defMessage))
78
import Data.Text (Text)
89
import Data.Text qualified as Text
910
import Data.Traversable (for)
10-
import Proto.Compiler (ClassName, CompilerInput, ConstrName, Kind'KindRef (Kind'KIND_REF_TYPE), Module, ModuleName, ModuleNamePart, Sum, Sum'Constructor, Ty, TyAbs, TyArg, TyBody, TyDef, TyName, VarName)
11-
import Proto.Compiler_Fields (argKind, argName, constrName, constructors, fields, kindRef, moduleName, modules, name, ntuple, parts, tyAbs, tyArgs, tyBody, tyName, tyVar, typeDefs, varName)
11+
import Proto.Compiler (ClassName, CompilerInput, ConstrName, Kind'KindRef (Kind'KIND_REF_TYPE), Module, ModuleName, ModuleNamePart, Sum, Sum'Constructor, Ty, TyAbs, TyArg, TyBody, TyDef, TyName, TyRef, VarName)
12+
import Proto.Compiler_Fields (argKind, argName, constrName, constructors, fields, kindRef, moduleName, modules, name, ntuple, parts, tyAbs, tyArgs, tyBody, tyName, tyRef, tyVar, typeDefs, varName)
1213
import Proto.Compiler_Fields qualified as P
1314
import Test.QuickCheck qualified as QC (Gen, chooseEnum, chooseInt, elements, oneof, vectorOf)
1415

1516
vecOf :: forall {a}. QC.Gen a -> Int -> QC.Gen [a]
16-
vecOf g n = replicateM n g
17+
vecOf = flip QC.vectorOf
1718

1819
limit :: Int
19-
limit = 10
20+
limit = 4
2021

2122
-- | Names
2223
genAlphaNum :: QC.Gen Char
@@ -73,28 +74,44 @@ genSum args = do
7374
return $ defMessage & constructors .~ ctors
7475

7576
-- TODO(bladyjoker): Add TyRef, TyApp etc.
76-
genTy :: [TyArg] -> QC.Gen Ty
77-
genTy args = do
78-
ar <- QC.elements args
77+
genTy :: [TyRef] -> [TyArg] -> QC.Gen Ty
78+
genTy (r : refs) (a : args) = QC.oneof [genTyVar (a :| args), genTyRef (r :| refs)]
79+
genTy [] (a : args) = QC.oneof [genTyVar (a :| args)]
80+
genTy (r : refs) [] = QC.oneof [genTyRef (r :| refs)]
81+
genTy _ _ = error "TODO(bladyjoker): Not yet implemented"
82+
83+
genTyRef :: NonEmpty TyRef -> QC.Gen Ty
84+
genTyRef refs = do
85+
r <- QC.elements (toList refs)
86+
return $ defMessage & tyRef .~ r
87+
88+
genTyVar :: NonEmpty TyArg -> QC.Gen Ty
89+
genTyVar args = do
90+
ar <- QC.elements (toList args)
7991
return $ defMessage & tyVar . varName .~ (ar ^. argName)
8092

8193
genConstructor :: [TyArg] -> ConstrName -> QC.Gen Sum'Constructor
8294
genConstructor args cn = do
83-
tys <- QC.chooseInt (1, limit) >>= vecOf (genTy args)
95+
tys <- QC.chooseInt (1, limit) >>= vecOf (genTy [] args)
8496
return $
8597
defMessage
8698
& constrName .~ cn
8799
& P.product . ntuple . fields .~ tys
88100

89-
-- TODO(bladyjoker): Add Opaque.
90101
genTyBody :: [TyArg] -> QC.Gen TyBody
91-
genTyBody args = do
102+
genTyBody args = QC.oneof [genTyBodyOpaque, genTyBodySum args]
103+
104+
genTyBodySum :: [TyArg] -> QC.Gen TyBody
105+
genTyBodySum args = do
92106
b <- genSum args
93107
return $ defMessage & P.sum .~ b
94108

109+
genTyBodyOpaque :: QC.Gen TyBody
110+
genTyBodyOpaque = return $ defMessage & P.opaque .~ defMessage
111+
95112
genTyAbs :: QC.Gen TyAbs
96113
genTyAbs = do
97-
vns <- QC.chooseInt (1, limit) >>= vecOf genVarName
114+
vns <- QC.chooseInt (0, limit) >>= vecOf genVarName
98115
args <- for (List.nub vns) genTyArg
99116
body <- genTyBody args
100117
return $

lambda-buffers-frontend/resources/good/Test.lbf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ sum Either a b = Left a | Right b
1717

1818
sum List a = Nil | List a (List a)
1919

20-
opaque Int a
20+
opaque Int
21+
2122
opaque Bytes
2223

2324
sum Foo a = MkFoo

0 commit comments

Comments
 (0)