]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.repeating: Fix repeat behavior (#2660)
authorGiftpflanze <80504430+gifti258@users.noreply.github.com>
Mon, 9 Jan 2023 17:23:04 +0000 (18:23 +0100)
committerGitHub <noreply@github.com>
Mon, 9 Jan 2023 17:23:04 +0000 (18:23 +0100)
extra/sequences/repeating/repeating-tests.factor
extra/sequences/repeating/repeating.factor

index 6fba79cc563abefa88301c367134cd548e96775d..1a31125d9dcc1eb061a0307a0ceb48cf6ea2d332 100644 (file)
@@ -3,8 +3,15 @@ USING: sequences.repeating tools.test ;
 { { 1 2 3 1 2 } } [ { 1 2 3 } 5 cycle ] unit-test
 { { 1 2 3 1 2 3 1 2 3 } } [ { 1 2 3 } 9 cycle ] unit-test
 
+{ { } } [ { 1 2 3 } 0 repeat-elements ] unit-test
+{ { 1 2 3 } } [ { 1 2 3 } 1 repeat-elements ] unit-test
+{ { 1 1 2 2 3 3 } } [ { 1 2 3 } 2 repeat-elements ] unit-test
+{ { 1 1 1 2 2 2 3 3 3 } } [ { 1 2 3 } 3 repeat-elements ] unit-test
+{ { 1 1 1 1 2 2 2 2 3 3 3 3 } } [ { 1 2 3 } 4 repeat-elements ] unit-test
+
 { { } } [ { 1 2 3 } 0 repeat ] unit-test
 { { 1 2 3 } } [ { 1 2 3 } 1 repeat ] unit-test
-{ { 1 1 2 2 3 3 } } [ { 1 2 3 } 2 repeat ] unit-test
-{ { 1 1 1 2 2 2 3 3 3 } } [ { 1 2 3 } 3 repeat ] unit-test
-{ { 1 1 1 1 2 2 2 2 3 3 3 3 } } [ { 1 2 3 } 4 repeat ] unit-test
+{ { 1 2 3 1 2 3 } } [ { 1 2 3 } 2 repeat ] unit-test
+{ { 1 2 3 1 2 3 1 2 3 } } [ { 1 2 3 } 3 repeat ] unit-test
+{ { 1 2 3 1 2 3 1 2 3 1 2 3 } } [ { 1 2 3 } 4 repeat ] unit-test
+
index 9c624e700e055b10fb1d98d8ad83ca882cea3d54..e6cfb7e6c1690cf0f07a77ce844e23907055efee 100644 (file)
@@ -14,6 +14,9 @@ TUPLE: cycles
 : cycle ( seq length -- new-seq )
     dupd <cycles> swap like ;
 
+: repeat ( seq times -- new-seq )
+    over length * cycle ;
+
 M: cycles length length>> ;
 
 M: cycles set-length length<< ;
@@ -24,21 +27,21 @@ M: cycles virtual-exemplar circular>> ;
 
 INSTANCE: cycles virtual-sequence
 
-TUPLE: repeats
+TUPLE: element-repeats
 { seq sequence read-only }
 { times integer read-only } ;
 
-C: <repeats> repeats
+C: <element-repeats> element-repeats
 
-M: repeats length [ seq>> length ] [ times>> ] bi * ;
+M: element-repeats length [ seq>> length ] [ times>> ] bi * ;
 
-M: repeats virtual@ [ times>> /i ] [ seq>> ] bi ;
+M: element-repeats virtual@ [ times>> /i ] [ seq>> ] bi ;
 
-M: repeats virtual-exemplar seq>> ;
+M: element-repeats virtual-exemplar seq>> ;
 
-INSTANCE: repeats immutable-sequence
+INSTANCE: element-repeats immutable-sequence
 
-INSTANCE: repeats virtual-sequence
+INSTANCE: element-repeats virtual-sequence
 
-: repeat ( seq times -- new-seq )
-    dupd <repeats> swap like ;
+: repeat-elements ( seq times -- new-seq )
+    dupd <element-repeats> swap like ;