@atlaspack/graph 3.4.6 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/lib/BitSet.js +25 -0
- package/package.json +2 -2
- package/src/BitSet.js +31 -0
- package/test/BitSet.test.js +42 -0
- package/test/Graph.test.js +26 -16
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaspack/graph
|
|
2
2
|
|
|
3
|
+
## 3.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#600](https://github.com/atlassian-labs/atlaspack/pull/600) [`1b52b99`](https://github.com/atlassian-labs/atlaspack/commit/1b52b99db4298b04c1a6eb0f97994d75a2d436f9) Thanks [@mattcompiles](https://github.com/mattcompiles)! - Add static intersect, size and equals methods to BitSet
|
|
8
|
+
|
|
9
|
+
## 3.4.7
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [[`209692f`](https://github.com/atlassian-labs/atlaspack/commit/209692ffb11eae103a0d65c5e1118a5aa1625818), [`f4da1e1`](https://github.com/atlassian-labs/atlaspack/commit/f4da1e120e73eeb5e8b8927f05e88f04d6148c7b)]:
|
|
14
|
+
- @atlaspack/feature-flags@2.16.0
|
|
15
|
+
|
|
3
16
|
## 3.4.6
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/lib/BitSet.js
CHANGED
|
@@ -25,6 +25,11 @@ class BitSet {
|
|
|
25
25
|
res.union(b);
|
|
26
26
|
return res;
|
|
27
27
|
}
|
|
28
|
+
static intersect(a, b) {
|
|
29
|
+
let res = a.clone();
|
|
30
|
+
res.intersect(b);
|
|
31
|
+
return res;
|
|
32
|
+
}
|
|
28
33
|
get capacity() {
|
|
29
34
|
return this.bits.length * 32;
|
|
30
35
|
}
|
|
@@ -63,6 +68,26 @@ class BitSet {
|
|
|
63
68
|
this.bits[i] &= ~other.bits[i];
|
|
64
69
|
}
|
|
65
70
|
}
|
|
71
|
+
size() {
|
|
72
|
+
let bits = this.bits;
|
|
73
|
+
let setBitsCount = 0;
|
|
74
|
+
for (let k = 0; k < bits.length; k++) {
|
|
75
|
+
let chunk = bits[k];
|
|
76
|
+
while (chunk !== 0) {
|
|
77
|
+
chunk &= chunk - 1; // Clear the least significant bit set
|
|
78
|
+
setBitsCount++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return setBitsCount;
|
|
82
|
+
}
|
|
83
|
+
equals(other) {
|
|
84
|
+
for (let i = 0; i < this.bits.length; i++) {
|
|
85
|
+
if (this.bits[i] !== other.bits[i]) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
66
91
|
forEach(fn) {
|
|
67
92
|
// https://lemire.me/blog/2018/02/21/iterating-over-set-bits-quickly/
|
|
68
93
|
let bits = this.bits;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaspack/graph",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "Blazing fast, zero configuration web application bundler",
|
|
5
5
|
"license": "(MIT OR Apache-2.0)",
|
|
6
6
|
"publishConfig": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"node": ">= 16.0.0"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@atlaspack/feature-flags": "2.
|
|
19
|
+
"@atlaspack/feature-flags": "2.16.0",
|
|
20
20
|
"nullthrows": "^1.1.1"
|
|
21
21
|
},
|
|
22
22
|
"type": "commonjs"
|
package/src/BitSet.js
CHANGED
|
@@ -28,6 +28,12 @@ export class BitSet {
|
|
|
28
28
|
return res;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
static intersect(a: BitSet, b: BitSet): BitSet {
|
|
32
|
+
let res = a.clone();
|
|
33
|
+
res.intersect(b);
|
|
34
|
+
return res;
|
|
35
|
+
}
|
|
36
|
+
|
|
31
37
|
get capacity(): number {
|
|
32
38
|
return this.bits.length * 32;
|
|
33
39
|
}
|
|
@@ -82,6 +88,31 @@ export class BitSet {
|
|
|
82
88
|
}
|
|
83
89
|
}
|
|
84
90
|
|
|
91
|
+
size(): number {
|
|
92
|
+
let bits = this.bits;
|
|
93
|
+
let setBitsCount = 0;
|
|
94
|
+
|
|
95
|
+
for (let k = 0; k < bits.length; k++) {
|
|
96
|
+
let chunk = bits[k];
|
|
97
|
+
|
|
98
|
+
while (chunk !== 0) {
|
|
99
|
+
chunk &= chunk - 1; // Clear the least significant bit set
|
|
100
|
+
setBitsCount++;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return setBitsCount;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
equals(other: BitSet): boolean {
|
|
108
|
+
for (let i = 0; i < this.bits.length; i++) {
|
|
109
|
+
if (this.bits[i] !== other.bits[i]) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
|
|
85
116
|
forEach(fn: (bit: number) => void) {
|
|
86
117
|
// https://lemire.me/blog/2018/02/21/iterating-over-set-bits-quickly/
|
|
87
118
|
let bits = this.bits;
|
package/test/BitSet.test.js
CHANGED
|
@@ -107,4 +107,46 @@ describe('BitSet', () => {
|
|
|
107
107
|
assertValues(set2, [3, 5]);
|
|
108
108
|
assertValues(set3, [1, 3, 5]);
|
|
109
109
|
});
|
|
110
|
+
|
|
111
|
+
it('BitSet.intersect should create a new BitSet with the intersect', () => {
|
|
112
|
+
let set1 = new BitSet(5);
|
|
113
|
+
set1.add(1);
|
|
114
|
+
set1.add(3);
|
|
115
|
+
|
|
116
|
+
let set2 = new BitSet(5);
|
|
117
|
+
set2.add(3);
|
|
118
|
+
set2.add(5);
|
|
119
|
+
|
|
120
|
+
let set3 = BitSet.intersect(set1, set2);
|
|
121
|
+
assertValues(set1, [1, 3]);
|
|
122
|
+
assertValues(set2, [3, 5]);
|
|
123
|
+
assertValues(set3, [3]);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('should identify equality with another BitSet', () => {
|
|
127
|
+
let set1 = new BitSet(5);
|
|
128
|
+
set1.add(1);
|
|
129
|
+
set1.add(3);
|
|
130
|
+
|
|
131
|
+
let set2 = new BitSet(5);
|
|
132
|
+
set2.add(3);
|
|
133
|
+
set2.add(5);
|
|
134
|
+
|
|
135
|
+
let set3 = set1.clone();
|
|
136
|
+
|
|
137
|
+
assert(set1.equals(set3));
|
|
138
|
+
assert(!set1.equals(set2));
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it('should calculate size of BitSet', () => {
|
|
142
|
+
let set1 = new BitSet(5);
|
|
143
|
+
set1.add(1);
|
|
144
|
+
set1.add(3);
|
|
145
|
+
|
|
146
|
+
assert.equal(set1.size(), 2);
|
|
147
|
+
|
|
148
|
+
set1.add(3);
|
|
149
|
+
set1.add(4);
|
|
150
|
+
assert.equal(set1.size(), 3);
|
|
151
|
+
});
|
|
110
152
|
});
|
package/test/Graph.test.js
CHANGED
|
@@ -528,12 +528,17 @@ describe('Graph', () => {
|
|
|
528
528
|
getChildren,
|
|
529
529
|
});
|
|
530
530
|
|
|
531
|
-
assert.deepEqual(
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
[
|
|
536
|
-
|
|
531
|
+
assert.deepEqual(
|
|
532
|
+
contexts.map((values) =>
|
|
533
|
+
values.map((v) => (v != null ? v : undefined)),
|
|
534
|
+
),
|
|
535
|
+
[
|
|
536
|
+
[0, undefined],
|
|
537
|
+
[1, 'node-0-created-context'],
|
|
538
|
+
[2, 'node-1-created-context'],
|
|
539
|
+
[3, 'node-2-created-context'],
|
|
540
|
+
],
|
|
541
|
+
);
|
|
537
542
|
assert.equal(result, undefined);
|
|
538
543
|
});
|
|
539
544
|
});
|
|
@@ -572,16 +577,21 @@ describe('Graph', () => {
|
|
|
572
577
|
getChildren,
|
|
573
578
|
});
|
|
574
579
|
|
|
575
|
-
assert.deepEqual(
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
[
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
580
|
+
assert.deepEqual(
|
|
581
|
+
contexts.map((values) =>
|
|
582
|
+
values.map((v) => (v != null ? v : undefined)),
|
|
583
|
+
),
|
|
584
|
+
[
|
|
585
|
+
[0, undefined],
|
|
586
|
+
[1, 'node-0-created-context'],
|
|
587
|
+
[2, 'node-1-created-context'],
|
|
588
|
+
['exit', 2, 'node-2-created-context'],
|
|
589
|
+
[3, 'node-1-created-context'],
|
|
590
|
+
['exit', 3, 'node-3-created-context'],
|
|
591
|
+
['exit', 1, 'node-1-created-context'],
|
|
592
|
+
['exit', 0, 'node-0-created-context'],
|
|
593
|
+
],
|
|
594
|
+
);
|
|
585
595
|
assert.equal(result, undefined);
|
|
586
596
|
});
|
|
587
597
|
});
|