diff options
-rw-r--r-- | combi.c | 8 | ||||
-rw-r--r-- | tests/015/comb.tl | 10 |
2 files changed, 18 insertions, 0 deletions
@@ -471,6 +471,8 @@ val rperm(val seq, val k) return cons(string(L""), nil); return rperm_str(seq, k); default: + if (zerop(k)) + return cons(make_like(nil, seq), nil); return rperm_seq(seq, k); } } @@ -748,6 +750,10 @@ val comb(val seq, val k) return nil; return comb_hash(seq, k); } + if (k == zero) + return cons(make_like(nil, seq), nil); + if (gt(k, length(seq))) + return nil; return comb_seq(seq, k); } } @@ -879,6 +885,8 @@ val rcomb(val seq, val k) return cons(string(L""), nil); return rcomb_str(seq, k); default: + if (k == zero) + return cons(make_like(nil, seq), nil); return rcomb_seq(seq, k); } } diff --git a/tests/015/comb.tl b/tests/015/comb.tl index 9973e94d..70aa9dd3 100644 --- a/tests/015/comb.tl +++ b/tests/015/comb.tl @@ -441,3 +441,13 @@ (rperm "a".."c" 2) (("a" "a") ("a" "b") ("a" "c") ("b" "a") ("b" "b") ("b" "c") ("c" "a") ("c" "b") ("c" "c"))) + +(mtest + (perm '(1 2 3) 0) (nil) + (rperm '(1 2 3) 0) (nil) + (comb '(1 2 3) 0) (nil) + (rcomb '(1 2 3) 0) (nil) + (perm 1..4 0) (nil) + (rperm 1..4 0) (nil) + (comb 1..4 0) (nil) + (rcomb 1..4 0) (nil)) |