diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 1af4dd809d..0ee8e5242f 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -164,3 +164,8 @@ IN: sequences.extras.tests { "ab" } [ f 2 "abcdef" subseq* ] unit-test { "cdef" } [ 2 f "abcdef" subseq* ] unit-test { "cd" } [ -4 -2 "abcdef" subseq* ] unit-test + +{ "foo" "" } [ "foo" [ blank? ] cut-when ] unit-test +{ "foo" " " } [ "foo " [ blank? ] cut-when ] unit-test +{ "" " foo" } [ " foo" [ blank? ] cut-when ] unit-test +{ "foo" " bar" } [ "foo bar" [ blank? ] cut-when ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index cddaf693d3..fc6e90744a 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -482,3 +482,7 @@ PRIVATE> { 3 [ first3-unsafe f ] } [ drop first4-unsafe ] } case ; + +: cut-when ( ... seq quot: ( ... elt -- ... ? ) -- ... before after ) + [ find drop ] 2keep drop swap + [ cut ] [ f over like ] if* ; inline