]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: adding join-with-as, test with strings.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 16 Feb 2018 00:56:37 +0000 (16:56 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 16 Feb 2018 00:56:37 +0000 (16:56 -0800)
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor

index 15664c64b32990eb877ebdc931ec6804050f4587..a88c58512c5ad710944187cfa1dd1e770a669728 100644 (file)
@@ -266,3 +266,8 @@ tools.test vectors vocabs ;
 { { } } [ { } ", " join-with ] unit-test
 { { 1 } } [ { 1 } ", " join-with ] unit-test
 { { 1 ", " 2 } } [ { 1 2 } ", " join-with ] unit-test
+{ "" } [ "" CHAR: _ join-with ] unit-test
+{ "a" } [ "a" CHAR: _ join-with ] unit-test
+{ "a_b" } [ "ab" CHAR: _ join-with ] unit-test
+{ "a_b_c" } [ "abc" CHAR: _ join-with ] unit-test
+{ "a_b_c_d" } [ "abcd" CHAR: _ join-with ] unit-test
index c1f2b232b0947fc70608c73444b807237f8a72bf..d1fbe0e8532f09f4ec9bd11268b6732e9c0cdefd 100644 (file)
@@ -626,6 +626,11 @@ PRIVATE>
     [ '[ @ not ] find drop ] 2keep drop swap
     [ dup length ] unless* tail-slice ; inline
 
+:: join-with-as ( seq glue exemplar -- newseq )
+    seq length dup 1 - + 0 max exemplar new-sequence :> newseq
+    seq [ 2 * newseq set-nth-unsafe ] each-index
+    seq length 1 - [ 2 * 1 + glue swap newseq set-nth-unsafe ] each-integer
+    newseq ;
+
 : join-with ( seq glue -- newseq )
-    [ dup length dup 1 - + 0 max ] dip <array>
-    [ '[ 2 * _ set-nth-unsafe ] each-index ] keep ;
+    over join-with-as ;