@@ -14,3 +14,97 @@ test('smoke test', () => {
1414 tree . forEach ( ( node ) => keys . push ( node . k ) ) ;
1515 expect ( keys ) . toEqual ( [ 1 , 3 , 4 , 4.1 , 44 ] ) ;
1616} ) ;
17+
18+ describe ( '.first()/next() iteration' , ( ) => {
19+ test ( 'for empty map, returns finished iterator' , ( ) => {
20+ const tree = new AvlMap < string , number > ( ) ;
21+ const entry = tree . first ( ) ;
22+ expect ( entry ) . toEqual ( undefined ) ;
23+ } ) ;
24+
25+ test ( 'can iterate through map entries' , ( ) => {
26+ const tree = new AvlMap < string , number > ( ) ;
27+ tree . set ( 'a' , 1 ) ;
28+ tree . set ( 'b' , 2 ) ;
29+ tree . set ( 'c' , 3 ) ;
30+ const list : [ string , number ] [ ] = [ ] ;
31+ for ( let entry = tree . first ( ) ; entry ; entry = tree . next ( entry ) ) {
32+ list . push ( [ entry . k , entry . v ] ) ;
33+ }
34+ expect ( list ) . toEqual ( [
35+ [ 'a' , 1 ] ,
36+ [ 'b' , 2 ] ,
37+ [ 'c' , 3 ] ,
38+ ] ) ;
39+ } ) ;
40+ } ) ;
41+
42+ describe ( '.iterator0()' , ( ) => {
43+ test ( 'for empty map, returns finished iterator' , ( ) => {
44+ const tree = new AvlMap < string , number > ( ) ;
45+ const iterator = tree . iterator0 ( ) ;
46+ const entry = iterator ( ) ;
47+ expect ( entry ) . toEqual ( undefined ) ;
48+ } ) ;
49+
50+ test ( 'can iterate through map entries' , ( ) => {
51+ const tree = new AvlMap < string , number > ( ) ;
52+ tree . set ( 'a' , 1 ) ;
53+ tree . set ( 'b' , 2 ) ;
54+ tree . set ( 'c' , 3 ) ;
55+ const list : [ string , number ] [ ] = [ ] ;
56+ const iterator = tree . iterator0 ( ) ;
57+ for ( let entry = iterator ( ) ; entry ; entry = iterator ( ) ) {
58+ list . push ( [ entry . k , entry . v ] ) ;
59+ }
60+ expect ( list ) . toEqual ( [
61+ [ 'a' , 1 ] ,
62+ [ 'b' , 2 ] ,
63+ [ 'c' , 3 ] ,
64+ ] ) ;
65+ } ) ;
66+ } ) ;
67+
68+ describe ( '.iterator()' , ( ) => {
69+ test ( 'for empty map, returns finished iterator' , ( ) => {
70+ const tree = new AvlMap < string , number > ( ) ;
71+ const iterator = tree . iterator ( ) ;
72+ const entry = iterator . next ( ) ;
73+ expect ( entry ) . toEqual ( { done : true , value : undefined } ) ;
74+ } ) ;
75+
76+ test ( 'can iterate through map entries' , ( ) => {
77+ const tree = new AvlMap < string , number > ( ) ;
78+ tree . set ( 'a' , 1 ) ;
79+ tree . set ( 'b' , 2 ) ;
80+ tree . set ( 'c' , 3 ) ;
81+ const iterator = tree . iterator ( ) ;
82+ const list : [ string , number ] [ ] = [ ] ;
83+ for ( let entry = iterator . next ( ) ; ! entry . done ; entry = iterator . next ( ) ) {
84+ list . push ( [ entry . value ! . k , entry . value ! . v ] ) ;
85+ }
86+ expect ( list ) . toEqual ( [
87+ [ 'a' , 1 ] ,
88+ [ 'b' , 2 ] ,
89+ [ 'c' , 3 ] ,
90+ ] ) ;
91+ } ) ;
92+ } ) ;
93+
94+ describe ( 'for...of iteration' , ( ) => {
95+ test ( 'can iterate through map entries' , ( ) => {
96+ const tree = new AvlMap < string , number > ( ) ;
97+ tree . set ( 'a' , 1 ) ;
98+ tree . set ( 'b' , 2 ) ;
99+ tree . set ( 'c' , 3 ) ;
100+ const list : [ string , number ] [ ] = [ ] ;
101+ for ( const entry of tree . entries ( ) ) {
102+ list . push ( [ entry . k , entry . v ] ) ;
103+ }
104+ expect ( list ) . toEqual ( [
105+ [ 'a' , 1 ] ,
106+ [ 'b' , 2 ] ,
107+ [ 'c' , 3 ] ,
108+ ] ) ;
109+ } ) ;
110+ } ) ;
0 commit comments