From 9e147991813c011460f25ab41ef540c2f7f666e0 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Thu, 9 Aug 2012 15:07:45 -0700 Subject: [PATCH] sequences.repeating: fix repeat bug. --- extra/sequences/repeating/repeating-tests.factor | 3 +++ extra/sequences/repeating/repeating.factor | 12 +++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/extra/sequences/repeating/repeating-tests.factor b/extra/sequences/repeating/repeating-tests.factor index 56139666f5..8437ea215d 100644 --- a/extra/sequences/repeating/repeating-tests.factor +++ b/extra/sequences/repeating/repeating-tests.factor @@ -5,4 +5,7 @@ IN: sequences.repeating.tests [ { 1 2 3 1 2 3 1 2 3 } ] [ { 1 2 3 } 9 cycle ] 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 diff --git a/extra/sequences/repeating/repeating.factor b/extra/sequences/repeating/repeating.factor index ee64bb86d2..c1c73eae0c 100644 --- a/extra/sequences/repeating/repeating.factor +++ b/extra/sequences/repeating/repeating.factor @@ -4,7 +4,9 @@ USING: accessors circular kernel math sequences sequences.private ; IN: sequences.repeating -TUPLE: cycles circular length ; +TUPLE: cycles +{ circular circular read-only } +{ length integer read-only } ; : ( seq length -- cycles ) [ ] dip cycles boa ; @@ -13,6 +15,7 @@ TUPLE: cycles circular length ; dupd swap like ; M: cycles length length>> ; + M: cycles set-length length<< ; M: cycles virtual@ ( n seq -- n' seq' ) circular>> ; @@ -21,7 +24,9 @@ M: cycles virtual-exemplar circular>> ; INSTANCE: cycles virtual-sequence -TUPLE: repeats seq length ; +TUPLE: repeats +{ seq sequence read-only } +{ length integer read-only } ; : ( seq times -- repeats ) over length * repeats boa ; @@ -31,6 +36,7 @@ TUPLE: repeats seq length ; M: repeats length length>> ; -M: repeats nth-unsafe seq>> [ length /i ] keep nth ; +M: repeats nth-unsafe + [ length>> / ] [ seq>> [ length * >integer ] keep nth ] bi ; INSTANCE: repeats immutable-sequence