ranges: Fix sum of empty range.
authorDoug Coleman <doug.coleman@gmail.com>
Sun, 14 Aug 2022 18:31:49 +0000 (13:31 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Sun, 14 Aug 2022 18:32:06 +0000 (13:32 -0500)
Fixes #2655

core/ranges/ranges-tests.factor
core/ranges/ranges.factor

index 6d4c6055aca87b77eabcd5189f1ccbe7ddc8e00c..4506d3b15e50c8b8ba7707fc80b92c0697c78a0f 100644 (file)
@@ -55,3 +55,6 @@ USING: arrays kernel math ranges sequences sets tools.test ;
 { t } [ -10 10 2 <range> [ sum ] [ >array sum ] bi = ] unit-test
 { t } [ 10 -10 -1 <range> [ sum ] [ >array sum ] bi = ] unit-test
 { t } [ 10 -10 -2 <range> [ sum ] [ >array sum ] bi = ] unit-test
+
+! Empty range
+{ 0 } [ 1 0 1 <range> sum ] unit-test
\ No newline at end of file
index 25a3b21bd7f50e32ad76b57af0687bf09140b424..4aff21ec1f1ea9d2f3f8e040bb3a264a6c6b94e2 100644 (file)
@@ -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 ;
 
 <PRIVATE