diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index f8e7944460..52aff0a307 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -77,3 +77,6 @@ IN: sequences.extras.tests { { } } [ "ABC" [ ] { } trim-as ] unit-test { "ABC" } [ { 32 65 66 67 32 } [ blank? ] "" trim-as ] unit-test + +{ t } [ "ABC" dup [ blank? ] ?trim [ identity-hashcode ] bi@ = ] unit-test +{ "ABC" } [ " ABC " [ blank? ] ?trim ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 7d80437e2c..2ac859bd10 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -201,3 +201,15 @@ PRIVATE> : trim-as ( ... seq quot: ( ... elt -- ... ? ) exemplar -- ... newseq ) [ trim-slice ] [ like ] bi* ; inline + + + +: ?trim ( ... seq quot: ( ... elt -- ... ? ) -- ... seq/newseq ) + over empty? [ drop ] [ + over [ first-unsafe ] [ last-unsafe ] bi pick bi@ or + [ trim ] [ drop ] if + ] if ; inline