aboutsummaryrefslogtreecommitdiff
path: root/lux-jvm/test/test/luxc/lang/synthesis/procedure.lux
diff options
context:
space:
mode:
Diffstat (limited to 'lux-jvm/test/test/luxc/lang/synthesis/procedure.lux')
-rw-r--r--lux-jvm/test/test/luxc/lang/synthesis/procedure.lux34
1 files changed, 34 insertions, 0 deletions
diff --git a/lux-jvm/test/test/luxc/lang/synthesis/procedure.lux b/lux-jvm/test/test/luxc/lang/synthesis/procedure.lux
new file mode 100644
index 000000000..ab6c9de6f
--- /dev/null
+++ b/lux-jvm/test/test/luxc/lang/synthesis/procedure.lux
@@ -0,0 +1,34 @@
+(.module:
+ lux
+ (lux [io]
+ (control [monad #+ do]
+ pipe)
+ (data [text "text/" Eq<Text>]
+ [product]
+ (coll [list]))
+ ["r" math/random "r/" Monad<Random>]
+ test)
+ (luxc (lang ["la" analysis]
+ ["ls" synthesis]
+ (synthesis [".S" expression])
+ [".L" extension]))
+ (// common))
+
+(context: "Procedures"
+ (<| (times +100)
+ (do @
+ [num-args (|> r.nat (:: @ map (n/% +10)))
+ nameA (r.text +5)
+ argsA (r.list num-args gen-primitive)]
+ ($_ seq
+ (test "Can synthesize procedure calls."
+ (|> (expressionS.synthesize extensionL.no-syntheses
+ (la.procedure nameA argsA))
+ (case> (^ [_ (#.Form (list& [_ (#.Text procedure)] argsS))])
+ (and (text/= nameA procedure)
+ (list.every? (product.uncurry corresponds?)
+ (list.zip2 argsA argsS)))
+
+ _
+ #0)))
+ ))))