summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--combi.c8
-rw-r--r--tests/015/comb.tl10
2 files changed, 18 insertions, 0 deletions
diff --git a/combi.c b/combi.c
index 1eaade29..2b55ee08 100644
--- a/combi.c
+++ b/combi.c
@@ -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))