recursion UTs

This commit is contained in:
John Kerl 2016-09-18 17:39:40 -07:00
parent 2812e81051
commit fdbc71e977
2 changed files with 132 additions and 0 deletions

View file

@ -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

View file

@ -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