summaryrefslogtreecommitdiffstats
path: root/combi.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2024-06-20 00:11:27 -0700
committerKaz Kylheku <kaz@kylheku.com>2024-06-20 00:11:27 -0700
commit19456350b81fcc95d09468989c34a20fb1ad9bc9 (patch)
treebe03c80bbd89efe58589c78d96dc93a2e935935e /combi.c
parent6bd0f5494990a18352de716987460914858d2f82 (diff)
downloadtxr-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.c8
1 files changed, 8 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);
}
}