|
1 | 1 | /** |
2 | 2 | * @license Apache-2.0 |
3 | 3 | * |
4 | | -* Copyright (c) 2020 The Stdlib Authors. |
| 4 | +* Copyright (c) 2023 The Stdlib Authors. |
5 | 5 | * |
6 | 6 | * Licensed under the Apache License, Version 2.0 (the "License"); |
7 | 7 | * you may not use this file except in compliance with the License. |
|
21 | 21 | // MODULES // |
22 | 22 |
|
23 | 23 | var tape = require( 'tape' ); |
24 | | -var proxyquire = require( 'proxyquire' ); |
25 | | -var iteratorSymbol = require( '@stdlib/symbol-iterator' ); |
26 | | -var isNonNegativeInteger = require( '@stdlib/assert-is-nonnegative-integer' ).isPrimitive; |
27 | | -var iterNonNegativeIntegersSeq = require( './../../dist' ); // eslint-disable-line id-length |
| 24 | +var main = require( './../../dist' ); |
28 | 25 |
|
29 | 26 |
|
30 | 27 | // TESTS // |
31 | 28 |
|
32 | | -tape( 'main export is a function', function test( t ) { |
| 29 | +tape( 'main export is defined', function test( t ) { |
33 | 30 | t.ok( true, __filename ); |
34 | | - t.strictEqual( typeof iterNonNegativeIntegersSeq, 'function', 'main export is a function' ); |
35 | | - t.end(); |
36 | | -}); |
37 | | - |
38 | | -tape( 'the function throws an error if provided a first argument which is not an object', function test( t ) { |
39 | | - var values; |
40 | | - var i; |
41 | | - |
42 | | - values = [ |
43 | | - '5', |
44 | | - 5, |
45 | | - NaN, |
46 | | - true, |
47 | | - false, |
48 | | - null, |
49 | | - void 0, |
50 | | - [], |
51 | | - function noop() {} |
52 | | - ]; |
53 | | - |
54 | | - for ( i = 0; i < values.length; i++ ) { |
55 | | - t.throws( badValue( values[i] ), TypeError, 'throws an error when provided '+values[i] ); |
56 | | - } |
57 | | - t.end(); |
58 | | - |
59 | | - function badValue( value ) { |
60 | | - return function badValue() { |
61 | | - iterNonNegativeIntegersSeq( value ); |
62 | | - }; |
63 | | - } |
64 | | -}); |
65 | | - |
66 | | -tape( 'the function throws an error if provided an invalid option', function test( t ) { |
67 | | - var values; |
68 | | - var i; |
69 | | - |
70 | | - values = [ |
71 | | - '5', |
72 | | - -5, |
73 | | - 3.14, |
74 | | - NaN, |
75 | | - true, |
76 | | - false, |
77 | | - null, |
78 | | - void 0, |
79 | | - [], |
80 | | - {}, |
81 | | - function noop() {} |
82 | | - ]; |
83 | | - |
84 | | - for ( i = 0; i < values.length; i++ ) { |
85 | | - t.throws( badValue( values[i] ), TypeError, 'throws an error when provided '+values[i] ); |
86 | | - } |
87 | | - t.end(); |
88 | | - |
89 | | - function badValue( value ) { |
90 | | - return function badValue() { |
91 | | - iterNonNegativeIntegersSeq({ |
92 | | - 'iter': value |
93 | | - }); |
94 | | - }; |
95 | | - } |
96 | | -}); |
97 | | - |
98 | | -tape( 'the function returns an iterator protocol-compliant object which generates a nonnegative integer sequence', function test( t ) { |
99 | | - var expected; |
100 | | - var actual; |
101 | | - var it; |
102 | | - var i; |
103 | | - |
104 | | - it = iterNonNegativeIntegersSeq(); |
105 | | - t.equal( it.next.length, 0, 'has zero arity' ); |
106 | | - |
107 | | - for ( i = 0; i < 1000; i++ ) { |
108 | | - actual = it.next(); |
109 | | - expected = i; |
110 | | - t.equal( actual.value, expected, 'returns expected value' ); |
111 | | - t.equal( isNonNegativeInteger( actual.value ), true, 'returns a nonnegative integer' ); |
112 | | - t.equal( actual.done, false, 'returns expected value' ); |
113 | | - } |
114 | | - t.end(); |
115 | | -}); |
116 | | - |
117 | | -tape( 'the function supports limiting the number of iterations', function test( t ) { |
118 | | - var expected; |
119 | | - var actual; |
120 | | - var opts; |
121 | | - var it; |
122 | | - var i; |
123 | | - |
124 | | - expected = [ |
125 | | - { |
126 | | - 'value': 0, |
127 | | - 'done': false |
128 | | - }, |
129 | | - { |
130 | | - 'value': 1, |
131 | | - 'done': false |
132 | | - }, |
133 | | - { |
134 | | - 'value': 2, |
135 | | - 'done': false |
136 | | - }, |
137 | | - { |
138 | | - 'value': 3, |
139 | | - 'done': false |
140 | | - }, |
141 | | - { |
142 | | - 'done': true |
143 | | - } |
144 | | - ]; |
145 | | - |
146 | | - opts = { |
147 | | - 'iter': 4 |
148 | | - }; |
149 | | - it = iterNonNegativeIntegersSeq( opts ); |
150 | | - t.equal( it.next.length, 0, 'has zero arity' ); |
151 | | - |
152 | | - actual = []; |
153 | | - for ( i = 0; i < opts.iter; i++ ) { |
154 | | - actual.push( it.next() ); |
155 | | - } |
156 | | - actual.push( it.next() ); |
157 | | - |
158 | | - t.deepEqual( actual, expected, 'returns expected values' ); |
159 | | - t.end(); |
160 | | -}); |
161 | | - |
162 | | -tape( 'the returned iterator has a `return` method for closing an iterator (no argument)', function test( t ) { |
163 | | - var it; |
164 | | - var r; |
165 | | - |
166 | | - it = iterNonNegativeIntegersSeq(); |
167 | | - |
168 | | - r = it.next(); |
169 | | - t.equal( typeof r.value, 'number', 'returns a number' ); |
170 | | - t.equal( r.done, false, 'returns expected value' ); |
171 | | - |
172 | | - r = it.next(); |
173 | | - t.equal( typeof r.value, 'number', 'returns a number' ); |
174 | | - t.equal( r.done, false, 'returns expected value' ); |
175 | | - |
176 | | - r = it.return(); |
177 | | - t.equal( r.value, void 0, 'returns expected value' ); |
178 | | - t.equal( r.done, true, 'returns expected value' ); |
179 | | - |
180 | | - r = it.next(); |
181 | | - t.equal( r.value, void 0, 'returns expected value' ); |
182 | | - t.equal( r.done, true, 'returns expected value' ); |
183 | | - |
184 | | - t.end(); |
185 | | -}); |
186 | | - |
187 | | -tape( 'the returned iterator has a `return` method for closing an iterator (argument)', function test( t ) { |
188 | | - var it; |
189 | | - var r; |
190 | | - |
191 | | - it = iterNonNegativeIntegersSeq(); |
192 | | - |
193 | | - r = it.next(); |
194 | | - t.equal( typeof r.value, 'number', 'returns a number' ); |
195 | | - t.equal( r.done, false, 'returns expected value' ); |
196 | | - |
197 | | - r = it.next(); |
198 | | - t.equal( typeof r.value, 'number', 'returns a number' ); |
199 | | - t.equal( r.done, false, 'returns expected value' ); |
200 | | - |
201 | | - r = it.return( 'finished' ); |
202 | | - t.equal( r.value, 'finished', 'returns expected value' ); |
203 | | - t.equal( r.done, true, 'returns expected value' ); |
204 | | - |
205 | | - r = it.next(); |
206 | | - t.equal( r.value, void 0, 'returns expected value' ); |
207 | | - t.equal( r.done, true, 'returns expected value' ); |
208 | | - |
209 | | - t.end(); |
210 | | -}); |
211 | | - |
212 | | -tape( 'if an environment supports `Symbol.iterator`, the returned iterator is iterable', function test( t ) { |
213 | | - var iterNonNegativeIntegersSeq; // eslint-disable-line id-length |
214 | | - var it1; |
215 | | - var it2; |
216 | | - var i; |
217 | | - |
218 | | - iterNonNegativeIntegersSeq = proxyquire( './../dist/main.js', { |
219 | | - '@stdlib/symbol-iterator': '__ITERATOR_SYMBOL__' |
220 | | - }); |
221 | | - |
222 | | - it1 = iterNonNegativeIntegersSeq(); |
223 | | - t.equal( typeof it1[ '__ITERATOR_SYMBOL__' ], 'function', 'has method' ); |
224 | | - t.equal( it1[ '__ITERATOR_SYMBOL__' ].length, 0, 'has zero arity' ); |
225 | | - |
226 | | - it2 = it1[ '__ITERATOR_SYMBOL__' ](); |
227 | | - t.equal( typeof it2, 'object', 'returns an object' ); |
228 | | - t.equal( typeof it2.next, 'function', 'has method' ); |
229 | | - t.equal( typeof it2.return, 'function', 'has method' ); |
230 | | - |
231 | | - for ( i = 0; i < 10; i++ ) { |
232 | | - t.equal( it2.next().value, it1.next().value, 'returns expected value' ); |
233 | | - } |
234 | | - t.end(); |
235 | | -}); |
236 | | - |
237 | | -tape( 'if an environment does not support `Symbol.iterator`, the returned iterator is not "iterable"', function test( t ) { |
238 | | - var iterNonNegativeIntegersSeq; // eslint-disable-line id-length |
239 | | - var it; |
240 | | - |
241 | | - iterNonNegativeIntegersSeq = proxyquire( './../dist/main.js', { |
242 | | - '@stdlib/symbol-iterator': false |
243 | | - }); |
244 | | - |
245 | | - it = iterNonNegativeIntegersSeq(); |
246 | | - t.equal( it[ iteratorSymbol ], void 0, 'does not have property' ); |
247 | | - |
| 31 | + t.strictEqual( main !== void 0, true, 'main export is defined' ); |
248 | 32 | t.end(); |
249 | 33 | }); |
0 commit comments