From d7b201eb72fa28ed0a3c42b3c9be1f6856ae8b93 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 9 Nov 2021 20:33:44 -0700 Subject: [PATCH] fix GenerativeTestCase --- kiss/src/kiss/Helpers.hx | 4 ++ kiss/src/kiss/KissInterp.hx | 6 ++- kiss/src/test/cases/GenerativeTestCase.kiss | 43 ++++++++++++--------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/kiss/src/kiss/Helpers.hx b/kiss/src/kiss/Helpers.hx index 9047616e..a2ee2037 100644 --- a/kiss/src/kiss/Helpers.hx +++ b/kiss/src/kiss/Helpers.hx @@ -412,7 +412,10 @@ class Helpers { for (name => value in k.macroVars) { interp.variables.set(name, value); } + var locals = interp.getLocals(); + interp.setLocals(new Cloner().clone(locals)); var value = interp.publicExprReturn(compileTimeHScript(innerExp, k)); + interp.setLocals(locals); if (value == null) { throw CompileError.fromExp(exp, "compile-time evaluation returned null"); } @@ -452,6 +455,7 @@ class Helpers { // but it needs to be a ReaderExp for evalUnquotes() static function compileTimeValueToReaderExp(e:Dynamic, source:ReaderExp):ReaderExp { // TODO if it's a string, return a StrExp. That way, symbolNameValue() won't be required + // TODO if it's a number, return a Symbol(number.toString()). return if (Std.isOfType(e, Array)) { var arr:Array = e; var listExps = arr.map(compileTimeValueToReaderExp.bind(_, source)); diff --git a/kiss/src/kiss/KissInterp.hx b/kiss/src/kiss/KissInterp.hx index c8b91c3f..ab022687 100644 --- a/kiss/src/kiss/KissInterp.hx +++ b/kiss/src/kiss/KissInterp.hx @@ -118,8 +118,12 @@ class KissInterp extends Interp { return exprReturn(e); } - // For debugging: public function getLocals() { return locals; } + + public function setLocals(l) { + locals = l; + } + } diff --git a/kiss/src/test/cases/GenerativeTestCase.kiss b/kiss/src/test/cases/GenerativeTestCase.kiss index 7cb08df5..ff020379 100644 --- a/kiss/src/test/cases/GenerativeTestCase.kiss +++ b/kiss/src/test/cases/GenerativeTestCase.kiss @@ -1,7 +1,9 @@ (defMacroVar maxInt 1000000000) (defMacroVar maxStringLength 20) (defMacroVar maxExps 4) -(defMacroVar maxDepth 15) +(defMacroVar maxDepth 14) + +(defAlias &ident nd (+ 1 macroDepth)) (defMacroFunction _macroList [func length] (for _ (range length) (func))) @@ -13,7 +15,10 @@ (_macroList func (+ 2 (random (- maxExps 2))))) (defMacroFunction _randomLetterString [] - (ReaderExp.StrExp (apply + (for _ (range (+ 1 (random (- maxStringLength 1)))) (chooseRandom (.split "abcdefghijklmnopqrstuvwxyz" "")))))) + (ReaderExp.StrExp + (apply + + (for _ (range (+ 1 (random (- maxStringLength 1)))) + (chooseRandom (.split "abcdefghijklmnopqrstuvwxyz" "")))))) (defMacroFunction _randomInt [] (symbol (Std.string (random maxInt)))) @@ -21,7 +26,7 @@ (defMacroFunction _randomFloat [] (symbol (Std.string (+ (random maxInt) (/ 1 (random maxInt)))))) -(defMacroFunction _randomFalsyExp [] +(defMacroFunction _randomFalsyExp [macroDepth] ((chooseRandom (concat [ @@ -30,19 +35,19 @@ ->{`""} ->{`[]} ] - (if (< (macroDepth) maxDepth) + (if (< macroDepth maxDepth) [ - ->{`(or ,@(_randomLengthMacroList _randomFalsyExp))} + ->{`(or ,@(_randomLengthMacroList ->(_randomFalsyExp nd)))} ->{`(and - ,@(_randomLengthMacroList _randomUncertainExp) - ,(_randomFalsyExp) - ,@(_randomLengthMacroList _randomUncertainExp))} + ,@(_randomLengthMacroList ->(_randomUncertainExp nd)) + ,(_randomFalsyExp nd) + ,@(_randomLengthMacroList ->(_randomUncertainExp nd)))} ] []))))) (defMacro randomFalsyExp [] - (printExp (_randomFalsyExp) "Falsy")) + (printExp (_randomFalsyExp 0) "Falsy")) -(defMacroFunction _randomTruthyExp [] +(defMacroFunction _randomTruthyExp [macroDepth] ((chooseRandom (concat [ @@ -51,26 +56,26 @@ ->(_randomInt) ->(_randomFloat) ] - (if (< (macroDepth) maxDepth) + (if (< macroDepth maxDepth) [ ->{`[,@(_randomLengthMacroList _randomLetterString)]} ->{`[,@(_randomLengthMacroList _randomInt)]} ->{`[,@(_randomLengthMacroList _randomFloat)]} - ->{`(and ,@(_randomLengthMacroList _randomTruthyExp))} + ->{`(and ,@(_randomLengthMacroList ->(_randomTruthyExp nd)))} ->{`(or - ,@(_randomLengthMacroList _randomUncertainExp) - ,(_randomTruthyExp) - ,@(_randomLengthMacroList _randomUncertainExp))} + ,@(_randomLengthMacroList ->(_randomUncertainExp nd)) + ,(_randomTruthyExp nd) + ,@(_randomLengthMacroList ->(_randomUncertainExp nd)))} ] []))))) (defMacro randomTruthyExp [] - (printExp (_randomTruthyExp) "Truthy")) + (printExp (_randomTruthyExp 0) "Truthy")) -(defMacroFunction _randomUncertainExp [] +(defMacroFunction _randomUncertainExp [macroDepth] ((chooseRandom [ - ->(_randomFalsyExp) - ->(_randomTruthyExp) + ->(_randomFalsyExp macroDepth) + ->(_randomTruthyExp macroDepth) ]))) (function _testTruthy []