From 19456350b81fcc95d09468989c34a20fb1ad9bc9 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 20 Jun 2024 00:11:27 -0700 Subject: combi: fix broken k 0 edge cases for sequences. * combi.c (rperm, comb, rcomb): In the default case for generic sequences, check k, like in the other cases and return the special case result. * tests/015/comb.tl: New tests. --- combi.c | 8 ++++++++ tests/015/comb.tl | 10 ++++++++++ 2 files changed, 18 insertions(+) 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)) -- cgit v1.2.3