mirror of
https://github.com/janet-lang/janet
synced 2026-10-11 02:01:41 +00:00
Handle degnerate range case gracefully.
This commit is contained in:
+7
-5
@@ -456,16 +456,18 @@ JANET_CORE_FN(janet_core_range,
|
||||
}
|
||||
count = (count > 0.0) ? count : 0.0;
|
||||
int32_t int_count;
|
||||
janet_assert(count >= 0.0, "bad range code");
|
||||
janet_assert(count >= 0.0, "bad range code (count)");
|
||||
if (count > (double) INT32_MAX) {
|
||||
janet_panicf("range is too large, %f elements", count);
|
||||
} else {
|
||||
int_count = (int32_t) ceil(count);
|
||||
}
|
||||
if (step > 0.0) {
|
||||
janet_assert(start + int_count * step >= stop, "bad range code");
|
||||
} else {
|
||||
janet_assert(start + int_count * step <= stop, "bad range code");
|
||||
if (int_count) { /* e.g. (range 10 0 0) */
|
||||
if (step > 0.0) {
|
||||
janet_assert(start + int_count * step >= stop, "bad range code (+step)");
|
||||
} else {
|
||||
janet_assert(start + int_count * step <= stop, "bad range code (-step)");
|
||||
}
|
||||
}
|
||||
JanetArray *array = janet_array(int_count);
|
||||
for (int32_t i = 0; i < int_count; i++) {
|
||||
|
||||
@@ -75,6 +75,8 @@
|
||||
(assert (deep= @[0 1 2 3] (range 3.999)) "range 3")
|
||||
(assert (deep= @[0.8 1.8 2.8 3.8] (range 0.8 3.999)) "range 4")
|
||||
(assert (deep= @[0.8 1.8 2.8 3.8] (range 0.8 3.999)) "range 5")
|
||||
(assert (deep= @[] (range 10 0 0)) "range 6")
|
||||
(assert (deep= @[] (range 0 10 0)) "range 7")
|
||||
|
||||
(assert (< 1.0 nil false true
|
||||
(fiber/new (fn [] 1))
|
||||
|
||||
Reference in New Issue
Block a user