diff --git a/src/core/corelib.c b/src/core/corelib.c index c5e2119d..3f3ea57b 100644 --- a/src/core/corelib.c +++ b/src/core/corelib.c @@ -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++) { diff --git a/test/suite-corelib.janet b/test/suite-corelib.janet index 357a721e..5c470c33 100644 --- a/test/suite-corelib.janet +++ b/test/suite-corelib.janet @@ -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))