-USING: sequences.repeating tools.test ;
+USING: literals sequences sequences.repeating tools.test ;
+{ { 1 } } [ { 1 2 3 } 1 cycle ] unit-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 } minimum ] } [ { 1 2 3 } 2 <cycles> minimum ] unit-test
+{ $[ { 1 2 3 1 2 } minimum ] } [ { 1 2 3 } 5 <cycles> minimum ] unit-test
+{ $[ { 1 2 3 1 2 3 1 2 3 } minimum ] } [ { 1 2 3 } 9 <cycles> minimum ] unit-test
+{ $[ { 1 2 } maximum ] } [ { 1 2 3 } 2 <cycles> maximum ] unit-test
+{ $[ { 1 2 3 1 2 } maximum ] } [ { 1 2 3 } 5 <cycles> maximum ] unit-test
+{ $[ { 1 2 3 1 2 3 1 2 3 } maximum ] } [ { 1 2 3 } 9 <cycles> maximum ] 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 1 1 2 2 2 3 3 3 } minimum ] } [ { 1 2 3 } 3 <element-repeats> minimum ] unit-test
+{ $[ { 1 1 1 1 2 2 2 2 3 3 3 3 } minimum ] } [ { 1 2 3 } 4 <element-repeats> minimum ] unit-test
+{ $[ { 1 1 1 2 2 2 3 3 3 } maximum ] } [ { 1 2 3 } 3 <element-repeats> maximum ] unit-test
+{ $[ { 1 1 1 1 2 2 2 2 3 3 3 3 } maximum ] } [ { 1 2 3 } 4 <element-repeats> maximum ] unit-test
+
{ { } } [ { 1 2 3 } 0 repeat ] unit-test
{ { 1 2 3 } } [ { 1 2 3 } 1 repeat ] unit-test
{ { 1 2 3 1 2 3 } } [ { 1 2 3 } 2 repeat ] unit-test
! Copyright (C) 2008 Alex Chapman
! Copyright (C) 2012 John Benediktsson
+! Copyright (C) 2023 nomennescio
! See https://factorcode.org/license.txt for BSD license
USING: accessors circular kernel math sequences ;
IN: sequences.repeating
INSTANCE: cycles virtual-sequence
+<PRIVATE
+
+: full-cycle? ( cycle -- ? ) [ length>> ] [ circular>> length ] bi >= ; inline
+
+PRIVATE>
+
+M: cycles minimum dup full-cycle? [ circular>> minimum ] [ (minimum) ] if ; inline
+M: cycles maximum dup full-cycle? [ circular>> maximum ] [ (maximum) ] if ; inline
+
TUPLE: element-repeats < sequence-view
{ times integer read-only } ;