aboutsummaryrefslogtreecommitdiff
path: root/stdlib/test
diff options
context:
space:
mode:
authorEduardo Julian2018-05-16 01:06:28 -0400
committerEduardo Julian2018-05-16 01:06:28 -0400
commit273c2d517dbafbe6df4d9b9ac65ffd4749e63642 (patch)
tree03cd1d8db4fa575f557bea6d82167399c6e04752 /stdlib/test
parent8ba6ac8952e3457b1a09e30ac5312168d48006d1 (diff)
- Migrated reference analysis to stdlib.
Diffstat (limited to 'stdlib/test')
-rw-r--r--stdlib/test/test/lux/lang/analysis/reference.lux57
-rw-r--r--stdlib/test/test/lux/lang/analysis/structure.lux4
2 files changed, 59 insertions, 2 deletions
diff --git a/stdlib/test/test/lux/lang/analysis/reference.lux b/stdlib/test/test/lux/lang/analysis/reference.lux
new file mode 100644
index 000000000..00689f3e0
--- /dev/null
+++ b/stdlib/test/test/lux/lang/analysis/reference.lux
@@ -0,0 +1,57 @@
+(.module:
+ lux
+ (lux [io]
+ (control [monad #+ do]
+ pipe)
+ (data ["e" error]
+ [ident "ident/" Eq<Ident>])
+ ["r" math/random]
+ [macro #+ Monad<Meta>]
+ (macro [code])
+ [lang]
+ (lang [type "type/" Eq<Type>]
+ [".L" scope]
+ [".L" module]
+ [".L" init]
+ [".L" analysis]
+ (analysis [".A" type]
+ [".A" expression]))
+ test)
+ (// ["_." primitive]))
+
+(def: analyse (expressionA.analyser (:! lang.Eval [])))
+
+(context: "References"
+ (<| (times +100)
+ (do @
+ [[expectedT _] _primitive.primitive
+ module-name (r.unicode +5)
+ scope-name (r.unicode +5)
+ var-name (r.unicode +5)
+ #let [def-name [module-name var-name]]]
+ ($_ seq
+ (test "Can analyse variable."
+ (|> (scopeL.with-scope scope-name
+ (scopeL.with-local [var-name expectedT]
+ (typeA.with-inference
+ (..analyse (code.symbol ["" var-name])))))
+ (macro.run (initL.compiler []))
+ (case> (^ (#e.Success [inferredT (#analysisL.Variable (#analysisL.Local var))]))
+ (and (type/= expectedT inferredT)
+ (n/= +0 var))
+
+ _
+ false)))
+ (test "Can analyse definition."
+ (|> (do Monad<Meta>
+ [_ (moduleL.define var-name [expectedT (' {}) []])]
+ (typeA.with-inference
+ (..analyse (code.symbol def-name))))
+ (moduleL.with-module +0 module-name)
+ (macro.run (initL.compiler []))
+ (case> (#e.Success [_ inferredT (#analysisL.Constant constant-name)])
+ (and (type/= expectedT inferredT)
+ (ident/= def-name constant-name))
+
+ _
+ false)))))))
diff --git a/stdlib/test/test/lux/lang/analysis/structure.lux b/stdlib/test/test/lux/lang/analysis/structure.lux
index 110717a0a..5bebe5325 100644
--- a/stdlib/test/test/lux/lang/analysis/structure.lux
+++ b/stdlib/test/test/lux/lang/analysis/structure.lux
@@ -26,6 +26,8 @@
test)
(// ["_." primitive]))
+(def: analyse (expressionA.analyser (:! lang.Eval [])))
+
(do-template [<name> <on-success> <on-error>]
[(def: <name>
(All [a] (-> (Meta a) Bool))
@@ -40,8 +42,6 @@
[check-fails false true]
)
-(def: analyse (expressionA.analyser (:! lang.Eval [])))
-
(def: (check-sum' size tag variant)
(-> Nat analysisL.Tag analysisL.Variant Bool)
(let [variant-tag (if (get@ #analysisL.right? variant)