]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences: faster last2 and some tests
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 25 Feb 2024 21:58:14 +0000 (13:58 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 25 Feb 2024 21:58:14 +0000 (13:58 -0800)
core/sequences/sequences-tests.factor
core/sequences/sequences.factor

index 500feeb3ddd3b1051521525a47cc1fa1daee8718..7de6984cd85c3deb549228b51a50540604dff695 100644 (file)
@@ -290,6 +290,17 @@ unit-test
 { f } [ { } ?last ] unit-test
 { 9 } [ 10 <iota> ?last ] unit-test
 
+[ f last ] [ bounds-error? ] must-fail-with
+{ 1 } [ { 1 } last ] unit-test
+{ 2 } [ { 1 2 } last ] unit-test
+{ 3 } [ { 1 2 3 } last ] unit-test
+
+[ f last2 ] [ bounds-error? ] must-fail-with
+[ { 1 } last2 ] [ bounds-error? ] must-fail-with
+{ 1 2 } [ { 1 2 } last2 ] unit-test
+{ 2 3 } [ { 1 2 3 } last2 ] unit-test
+{ 3 4 } [ { 1 2 3 4 } last2 ] unit-test
+
 [ -1/0. 0 remove-nth! ] must-fail
 { "" } [ "" [ CHAR: \s = ] trim ] unit-test
 { "" } [ "" [ CHAR: \s = ] trim-head ] unit-test
index 7b3478b3724494810a11a87c9081d3df6fff848e..63d4fa309217b024bfe38b7e6e87e481f688cfde 100644 (file)
@@ -840,11 +840,11 @@ PRIVATE>
 : append! ( seq1 seq2 -- seq1 ) over push-all ; inline
 
 : last ( seq -- elt )
-    index-of-last
-    over 0 < [ bounds-error ] [ nth-unsafe ] if ; inline
+    index-of-last bounds-check-head nth-unsafe ; inline
 
 : last2 ( seq -- penultimate ultimate )
-    2 tail* first2 ; inline
+    index-of-last [ [ 1 - ] keep ] dip pick 0 <
+    [ nip bounds-error ] [ '[ _ nth-unsafe ] bi@ ] if ; inline
 
 <PRIVATE