From fdbc71e9773701a9d41e66a8d81a298ce7ccbfc4 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sun, 18 Sep 2016 17:39:40 -0700 Subject: [PATCH] recursion UTs --- c/reg_test/expected/out | 92 +++++++++++++++++++++++++++++++++++++++++ c/reg_test/run | 40 ++++++++++++++++++ 2 files changed, 132 insertions(+) diff --git a/c/reg_test/expected/out b/c/reg_test/expected/out index d3dfdf11d..c7e884a81 100644 --- a/c/reg_test/expected/out +++ b/c/reg_test/expected/out @@ -33376,6 +33376,98 @@ zee wye 8 0.5985540091064224 0.976181385699006 1008 2008 hat wye 9 0.03144187646093577 0.7495507603507059 1009 2009 pan wye 10 0.5026260055412137 0.9526183602969864 1010 2010 +mlr --opprint --from ./reg_test/input/abixy put + func f(n) { + if (isnumeric(n)) { + if (n > 0) { + return n * f(n-1) + } else { + return 1 + } + } + # implicitly return absent + } + $o = f(NR) + +a b i x y o +pan pan 1 0.3467901443380824 0.7268028627434533 1 +eks pan 2 0.7586799647899636 0.5221511083334797 2 +wye wye 3 0.20460330576630303 0.33831852551664776 6 +eks wye 4 0.38139939387114097 0.13418874328430463 24 +wye pan 5 0.5732889198020006 0.8636244699032729 120 +zee pan 6 0.5271261600918548 0.49322128674835697 720 +eks zee 7 0.6117840605678454 0.1878849191181694 5040 +zee wye 8 0.5985540091064224 0.976181385699006 40320 +hat wye 9 0.03144187646093577 0.7495507603507059 362880 +pan wye 10 0.5026260055412137 0.9526183602969864 3628800 + +mlr --opprint --from ./reg_test/input/abixy head -n 5 then put + subr s(n) { + print "n = " . n; + if (isnumeric(n)) { + if (n > 0) { + call s(n-1) + } + } + } + print ""; + call s(NR) + + +n = 1 +n = 0 + +n = 2 +n = 1 +n = 0 + +n = 3 +n = 2 +n = 1 +n = 0 + +n = 4 +n = 3 +n = 2 +n = 1 +n = 0 + +n = 5 +n = 4 +n = 3 +n = 2 +n = 1 +n = 0 +a b i x y +pan pan 1 0.3467901443380824 0.7268028627434533 +eks pan 2 0.7586799647899636 0.5221511083334797 +wye wye 3 0.20460330576630303 0.33831852551664776 +eks wye 4 0.38139939387114097 0.13418874328430463 +wye pan 5 0.5732889198020006 0.8636244699032729 + +mlr --from ./reg_test/input/abixy --opprint put + func f(n) { + return n+1; + } + $o1 = f(NR); + $o2 = f(f(NR)); + $o3 = f(f(f(NR))); + $o4 = f(f(f(f(NR)))); + $o5 = f(f(f(f(f(NR))))); + $o6 = f(f(f(f(f(f(NR)))))); + +a b i x y o1 o2 o3 o4 o5 o6 +pan pan 1 0.3467901443380824 0.7268028627434533 2 3 4 5 6 7 +eks pan 2 0.7586799647899636 0.5221511083334797 3 4 5 6 7 8 +wye wye 3 0.20460330576630303 0.33831852551664776 4 5 6 7 8 9 +eks wye 4 0.38139939387114097 0.13418874328430463 5 6 7 8 9 10 +wye pan 5 0.5732889198020006 0.8636244699032729 6 7 8 9 10 11 +zee pan 6 0.5271261600918548 0.49322128674835697 7 8 9 10 11 12 +eks zee 7 0.6117840605678454 0.1878849191181694 8 9 10 11 12 13 +zee wye 8 0.5985540091064224 0.976181385699006 9 10 11 12 13 14 +hat wye 9 0.03144187646093577 0.7495507603507059 10 11 12 13 14 15 +pan wye 10 0.5026260055412137 0.9526183602969864 11 12 13 14 15 16 + ================================================================ MULTI-PART SCRIPTS diff --git a/c/reg_test/run b/c/reg_test/run index db2371e94..16176b954 100755 --- a/c/reg_test/run +++ b/c/reg_test/run @@ -4666,6 +4666,46 @@ run_mlr --from $indir/abixy put 'subr log() { print "hello record ". NR } call # Test variable-clear at scope exit; test read of unset locals. run_mlr --opprint --from $indir/abixy put '$o1 = a; local a=1000+NR; $o2 = a; a=2000+NR; $o3 = a' +# Test recursion +run_mlr --opprint --from $indir/abixy put ' + func f(n) { + if (isnumeric(n)) { + if (n > 0) { + return n * f(n-1) + } else { + return 1 + } + } + # implicitly return absent + } + $o = f(NR) +' + +run_mlr --opprint --from $indir/abixy head -n 5 then put ' + subr s(n) { + print "n = " . n; + if (isnumeric(n)) { + if (n > 0) { + call s(n-1) + } + } + } + print ""; + call s(NR) +' + +run_mlr --from $indir/abixy --opprint put ' + func f(n) { + return n+1; + } + $o1 = f(NR); + $o2 = f(f(NR)); + $o3 = f(f(f(NR))); + $o4 = f(f(f(f(NR)))); + $o5 = f(f(f(f(f(NR))))); + $o6 = f(f(f(f(f(f(NR)))))); +' + # ---------------------------------------------------------------- announce MULTI-PART SCRIPTS