diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 4016696298..eef8d01888 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -21,6 +21,21 @@ IN: sequences.extras.tests { "abc" " " } [ "abc" "" CHAR: \s pad-longest ] unit-test { "abc..." "foobar" } [ "abc" "foobar" CHAR: . pad-longest ] unit-test +{ + { + "ABC" + "ABC" + "ABC" + "ABC" + "ABC-" + "-ABC-" + "-ABC--" + "--ABC--" + } +} [ + "ABC" 8 iota [ CHAR: - pad-center ] with map +] unit-test + { { 0 1 0 1 } } [ { 0 0 0 0 } { 1 3 } over [ 1 + ] change-nths ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index e23c9725d1..cc459ebead 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -82,6 +82,13 @@ IN: sequences.extras : pad-longest ( seq1 seq2 elt -- seq1 seq2 ) [ 2dup max-length ] dip [ pad-tail ] 2curry bi@ ; +:: pad-center ( seq n elt -- padded ) + n seq length [-] :> extra + extra 2/ :> left + extra left - :> right + left elt seq right elt + seq 3append-as ; + : change-nths ( ... indices seq quot: ( ... elt -- ... elt' ) -- ... ) [ change-nth ] 2curry each ; inline