From 46a70cb9022b0b2f381a218ab2a2ae30774df277 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 14 Aug 2022 13:31:49 -0500 Subject: [PATCH] ranges: Fix sum of empty range. Fixes #2655 --- core/ranges/ranges-tests.factor | 3 +++ core/ranges/ranges.factor | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/ranges/ranges-tests.factor b/core/ranges/ranges-tests.factor index 6d4c6055ac..4506d3b15e 100644 --- a/core/ranges/ranges-tests.factor +++ b/core/ranges/ranges-tests.factor @@ -55,3 +55,6 @@ USING: arrays kernel math ranges sequences sets tools.test ; { t } [ -10 10 2 [ sum ] [ >array sum ] bi = ] unit-test { t } [ 10 -10 -1 [ sum ] [ >array sum ] bi = ] unit-test { t } [ 10 -10 -2 [ sum ] [ >array sum ] bi = ] unit-test + +! Empty range +{ 0 } [ 1 0 1 sum ] unit-test \ No newline at end of file diff --git a/core/ranges/ranges.factor b/core/ranges/ranges.factor index 25a3b21bd7..4aff21ec1f 100644 --- a/core/ranges/ranges.factor +++ b/core/ranges/ranges.factor @@ -32,7 +32,10 @@ M: range hashcode* tuple-hashcode ; INSTANCE: range immutable-sequence -M: range sum [ length ] [ first ] [ last ] tri + * 2 / ; +M: range sum + dup length + [ drop 0 ] + [ swap [ first-unsafe ] [ last-unsafe ] bi + * 2 / ] if-zero ;