File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ const ids = function * ( ) {
4+ const free = [ '0' ] ;
5+ const prepared = { has : false , value : '' } ;
6+
7+ while ( true ) {
8+ if ( prepared . has ) {
9+ prepared . has = false ;
10+ yield prepared . value ;
11+ }
12+ const nextFree = free . shift ( ) ;
13+ free . push ( '01' + nextFree ) ;
14+ free . push ( '00' + nextFree ) ;
15+ prepared . value = '11' + nextFree ;
16+ prepared . has = true ;
17+ yield '10' + nextFree ;
18+ }
19+ } ;
20+
21+ module . exports = { ids } ;
Original file line number Diff line number Diff line change 1+ ({
2+ name: 'ids',
3+ length: [100, 1000],
4+ test: ids => {
5+ {
6+ const array = [];
7+ for (const id of ids()) {
8+ if (id.length > 10) break;
9+ array.push(id);
10+ }
11+ array.sort((a, b) => parseInt(a, 2) - parseInt(b, 2));
12+ const expected = [
13+ '100',
14+ '110',
15+ '10000',
16+ '10010',
17+ '11000',
18+ '11010',
19+ '1000000',
20+ '1000010',
21+ '1001000',
22+ '1001010',
23+ '1100000',
24+ '1100010',
25+ '1101000',
26+ '1101010',
27+ '100000000',
28+ '100000010',
29+ '100001000',
30+ '100001010',
31+ '100100000',
32+ '100100010',
33+ '100101000',
34+ '100101010',
35+ '110000000',
36+ '110000010',
37+ '110001000',
38+ '110001010',
39+ '110100000',
40+ '110100010',
41+ '110101000',
42+ '110101010',
43+ ];
44+ al = array.length;
45+ el = expected.length;
46+ if (al !== el) {
47+ const msg = `Result length is ${al} instead of expected ${el}`;
48+ throw new Error(msg);
49+ }
50+ for (let i = 0; i < al; i++) {
51+ const x = array[i];
52+ const y = expected[i];
53+ if (array[i] !== expected[i]) {
54+ const msg = `Element result[${i}] === ${x} instead of expected ${y}`;
55+ throw new Error(msg);
56+ }
57+ }
58+ }
59+ }
60+ })
You can’t perform that action at this time.
0 commit comments