From 1643be20cb10baf3cabcab502f0013b7faebe322 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sun, 12 Jun 2022 20:05:43 -0400 Subject: Generalized macro-let. --- stdlib/source/test/lux/macro/local.lux | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'stdlib/source/test') diff --git a/stdlib/source/test/lux/macro/local.lux b/stdlib/source/test/lux/macro/local.lux index de1073f55..bb03574a1 100644 --- a/stdlib/source/test/lux/macro/local.lux +++ b/stdlib/source/test/lux/macro/local.lux @@ -27,6 +27,12 @@ [\\library ["[0]" /]]) +(/.let [!pow/2 (template (_ ) + [(n.* )])] + (def: pow/2 + (-> Nat Nat) + (|>> !pow/2))) + (def: macro_error (syntax (_ [macro .any]) (function (_ compiler) @@ -90,4 +96,35 @@ (<| ..macro_error (..with ["" "actual"] expected #1) (n.= expected (..actual))))) + (do ! + [scalar random.nat] + (_.coverage [/.let] + (let [can_use_with_statements! + (n.= (all n.* scalar scalar) + (..pow/2 scalar))] + (and can_use_with_statements! + (/.let [pow/3 (template (_ ) + [(all n.* )]) + pow/9 (template (_ ) + [(pow/3 (pow/3 ))])] + (let [can_use_with_expressions! + (n.= (all n.* scalar scalar scalar) + (pow/3 scalar)) + + can_refer! + (n.= (all n.* + scalar scalar scalar + scalar scalar scalar + scalar scalar scalar) + (pow/9 scalar)) + + can_shadow! + (let [pow/3 (function (_ scalar) + (all n.+ scalar scalar scalar))] + (n.= (all n.+ scalar scalar scalar) + (pow/3 scalar)))] + (and can_use_with_expressions! + can_refer! + can_shadow!))) + )))) )))) -- cgit v1.2.3