]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: make rotate wrap.
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 4 Apr 2016 18:17:24 +0000 (11:17 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 4 Apr 2016 18:17:24 +0000 (11:17 -0700)
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor

index c1de93f07610694af626e703270aa7db6112e2ac..4016696298d7e5af0d3f60fd5f31ce3f3e23bbfb 100644 (file)
@@ -75,11 +75,15 @@ IN: sequences.extras.tests
 
 { "hello" "hello" } [ "hello" dup 0 rotate ] unit-test
 { "hello" "llohe" } [ "hello" dup 2 rotate ] unit-test
+{ "hello" "lohel" } [ "hello" dup 13 rotate ] unit-test
 { "hello" "ohell" } [ "hello" dup -1 rotate ] unit-test
+{ "hello" "lohel" } [ "hello" dup -12 rotate ] unit-test
 
 { "hello" } [ "hello" dup 0 rotate! ] unit-test
-{ "lohel" } [ "hello" dup 3 rotate! ] unit-test
+{ "llohe" } [ "hello" dup 2 rotate! ] unit-test
+{ "lohel" } [ "hello" dup 13 rotate! ] unit-test
 { "ohell" } [ "hello" dup -1 rotate! ] unit-test
+{ "lohel" } [ "hello" dup -12 rotate! ] unit-test
 
 { { } } [ { } [ ] map-concat ] unit-test
 { V{ 0 0 1 0 1 2 } } [ 4 iota [ iota ] map-concat ] unit-test
index ec9b5c0bb53e2d7cf12b025b11ff5ce718fd90fe..7c3caa7b4a91e44c6fd23e986b1922992e23944b 100644 (file)
@@ -196,11 +196,11 @@ ERROR: slices-don't-touch slice1 slice2 ;
     ] if ;
 
 : rotate ( seq n -- seq' )
-    dup 0 >= [ cut ] [ abs cut* ] if prepend ;
+    over length mod dup 0 >= [ cut ] [ abs cut* ] if prepend ;
 
 :: rotate! ( seq n -- )
     seq length :> len
-    n dup 0 < [ len + ] when seq bounds-check drop 0 over
+    n len mod dup 0 < [ len + ] when seq bounds-check drop 0 over
     [ 2dup = ] [
         [ seq exchange-unsafe ] [ [ 1 + ] bi@ ] 2bi
         dup len = [ drop over ] when