diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2024-06-20 00:11:27 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2024-06-20 00:11:27 -0700 |
commit | 19456350b81fcc95d09468989c34a20fb1ad9bc9 (patch) | |
tree | be03c80bbd89efe58589c78d96dc93a2e935935e /combi.c | |
parent | 6bd0f5494990a18352de716987460914858d2f82 (diff) | |
download | txr-19456350b81fcc95d09468989c34a20fb1ad9bc9.tar.gz txr-19456350b81fcc95d09468989c34a20fb1ad9bc9.tar.bz2 txr-19456350b81fcc95d09468989c34a20fb1ad9bc9.zip |
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.
Diffstat (limited to 'combi.c')
-rw-r--r-- | combi.c | 8 |
1 files changed, 8 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); } } |