11import expect from 'expect' ;
2- import { argumentsToList } from '../src/utils' ;
2+ import {
3+ argumentsToList ,
4+ constantIterator ,
5+ combinedIterator ,
6+ arrayIterator ,
7+ } from '../src/utils' ;
38import { vec2 , vec4 } from '../src/vector' ;
49
510describe ( 'Utils functions' , ( ) => {
@@ -10,4 +15,105 @@ describe('Utils functions', () => {
1015 expect ( argumentsToList ( [ 1 , vec2 ( 2 , 3 ) ] ) ) . toEqual ( [ 1 , 2 , 3 ] ) ;
1116 expect ( argumentsToList ( vec4 ( 1 , 2 , 3 , 4 ) ) ) . toEqual ( [ 1 , 2 , 3 , 4 ] ) ;
1217 } ) ;
18+
19+ it ( 'Can create iterator out of constants' , ( ) => {
20+ const a = 5 ;
21+ const itr = constantIterator ( a , 5 ) ;
22+
23+ let current = itr . next ( ) ;
24+ expect ( current . value ) . toBe ( a ) ;
25+ expect ( current . done ) . toBeFalsy ( ) ;
26+ current = itr . next ( ) ;
27+ expect ( current . value ) . toBe ( a ) ;
28+ expect ( current . done ) . toBeFalsy ( ) ;
29+ current = itr . next ( ) ;
30+ expect ( current . value ) . toBe ( a ) ;
31+ expect ( current . done ) . toBeFalsy ( ) ;
32+ current = itr . next ( ) ;
33+ expect ( current . value ) . toBe ( a ) ;
34+ expect ( current . done ) . toBeFalsy ( ) ;
35+ current = itr . next ( ) ;
36+ expect ( current . value ) . toBe ( a ) ;
37+ expect ( current . done ) . toBeFalsy ( ) ;
38+ current = itr . next ( ) ;
39+ expect ( current . done ) . toBeTruthy ( ) ;
40+ expect ( current . value ) . toBeUndefined ;
41+ current = itr . next ( ) ;
42+ expect ( current . done ) . toBeTruthy ( ) ;
43+ expect ( current . value ) . toBeUndefined ;
44+ } ) ;
45+
46+ it ( 'Can create iterator out of arrays' , ( ) => {
47+ const arr = [ 1 , 2 , 3 , 4 , 5 ] ;
48+ const itr = arrayIterator ( arr ) ;
49+
50+ let current = itr . next ( ) ;
51+ expect ( current . value ) . toBe ( 1 ) ;
52+ expect ( current . done ) . toBeFalsy ( ) ;
53+ current = itr . next ( ) ;
54+ expect ( current . value ) . toBe ( 2 ) ;
55+ expect ( current . done ) . toBeFalsy ( ) ;
56+ current = itr . next ( ) ;
57+ expect ( current . value ) . toBe ( 3 ) ;
58+ expect ( current . done ) . toBeFalsy ( ) ;
59+ current = itr . next ( ) ;
60+ expect ( current . value ) . toBe ( 4 ) ;
61+ expect ( current . done ) . toBeFalsy ( ) ;
62+ current = itr . next ( ) ;
63+ expect ( current . value ) . toBe ( 5 ) ;
64+ expect ( current . done ) . toBeFalsy ( ) ;
65+ current = itr . next ( ) ;
66+ expect ( current . done ) . toBeTruthy ( ) ;
67+ expect ( current . value ) . toBeUndefined ;
68+ current = itr . next ( ) ;
69+ expect ( current . done ) . toBeTruthy ( ) ;
70+ expect ( current . value ) . toBeUndefined ;
71+ } ) ;
72+
73+ it ( 'Can create iterator out of 2d arrays' , ( ) => {
74+ const arr = [ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 ] ] ;
75+ const itr = arrayIterator ( arr ) ;
76+
77+ let current = itr . next ( ) ;
78+ expect ( current . value ) . toBe ( 1 ) ;
79+ expect ( current . done ) . toBeFalsy ( ) ;
80+ current = itr . next ( ) ;
81+ expect ( current . value ) . toBe ( 2 ) ;
82+ expect ( current . done ) . toBeFalsy ( ) ;
83+ current = itr . next ( ) ;
84+ expect ( current . value ) . toBe ( 3 ) ;
85+ expect ( current . done ) . toBeFalsy ( ) ;
86+ current = itr . next ( ) ;
87+ expect ( current . value ) . toBe ( 4 ) ;
88+ expect ( current . done ) . toBeFalsy ( ) ;
89+ current = itr . next ( ) ;
90+ expect ( current . value ) . toBe ( 5 ) ;
91+ expect ( current . done ) . toBeFalsy ( ) ;
92+ current = itr . next ( ) ;
93+ expect ( current . done ) . toBeTruthy ( ) ;
94+ expect ( current . value ) . toBeUndefined ;
95+ current = itr . next ( ) ;
96+ expect ( current . done ) . toBeTruthy ( ) ;
97+ expect ( current . value ) . toBeUndefined ;
98+ } ) ;
99+
100+ it ( 'Can combine and traverse multiple iterators' , ( ) => {
101+ const a = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ;
102+ const b = [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] ;
103+ const t = 3 ;
104+
105+ const itr = combinedIterator (
106+ arrayIterator ( a ) ,
107+ arrayIterator ( b ) ,
108+ constantIterator ( t ) ,
109+ ) ;
110+ let i = 1 ;
111+ let current = itr . next ( ) ;
112+ while ( ! current . done ) {
113+ expect ( current . value ) . toEqual ( [ i , i , 3 ] ) ;
114+ current = itr . next ( ) ;
115+ i ++ ;
116+ }
117+ expect ( i ) . toBe ( 10 ) ;
118+ } ) ;
13119} ) ;
0 commit comments