atomic-fns 0.3.0 → 0.3.2
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/.esdoc.json +2 -2
- package/README.md +48 -13
- package/core/collections/BTree.d.ts +229 -0
- package/core/collections/BTree.js +1165 -0
- package/core/collections/BTree.ts +1340 -0
- package/core/collections/Heap.d.ts +69 -0
- package/core/collections/Heap.js +181 -0
- package/core/collections/Heap.ts +189 -0
- package/core/collections/LRUCache.d.ts +131 -0
- package/core/collections/LRUCache.js +388 -0
- package/core/collections/LRUCache.ts +465 -0
- package/core/collections/SortedMap.d.ts +92 -0
- package/core/collections/SortedMap.js +130 -0
- package/core/collections/SortedMap.ts +146 -0
- package/core/collections/SortedSet.d.ts +63 -0
- package/core/collections/SortedSet.js +93 -0
- package/core/collections/SortedSet.ts +104 -0
- package/core/collections/SortedTree.d.ts +103 -0
- package/core/collections/SortedTree.js +141 -0
- package/core/collections/SortedTree.ts +160 -0
- package/core/collections/SplayTree.d.ts +105 -0
- package/core/collections/SplayTree.js +338 -0
- package/core/collections/SplayTree.ts +354 -0
- package/core/collections/abc.d.ts +152 -0
- package/core/collections/abc.js +39 -0
- package/core/collections/abc.ts +176 -0
- package/core/collections/deque.d.ts +110 -0
- package/core/collections/deque.js +285 -0
- package/core/collections/deque.ts +329 -0
- package/core/collections/frozenset.d.ts +19 -0
- package/core/collections/frozenset.js +33 -0
- package/core/collections/frozenset.ts +37 -0
- package/{src → core}/collections/index.d.ts +12 -161
- package/{src → core}/collections/index.js +13 -164
- package/{src → core}/collections/index.ts +13 -224
- package/core/collections/test.html +10 -0
- package/core/collections/typedArrays.d.ts +31 -0
- package/core/collections/typedArrays.js +143 -0
- package/core/collections/typedArrays.ts +163 -0
- package/{src → core}/datetime/index.d.ts +0 -0
- package/{src → core}/datetime/index.js +0 -0
- package/{src → core}/datetime/index.ts +0 -0
- package/core/datetime/test.html +0 -0
- package/{src → core}/functools/index.d.ts +2 -2
- package/{src → core}/functools/index.js +2 -2
- package/{src → core}/functools/index.ts +2 -2
- package/{src → core}/globals/index.d.ts +2 -7
- package/{src → core}/globals/index.js +5 -2
- package/{src → core}/globals/index.ts +6 -9
- package/{src → core}/index.d.ts +0 -0
- package/{src → core}/index.js +0 -0
- package/{src → core}/index.ts +0 -0
- package/{src → core}/itertools/index.d.ts +9 -7
- package/{src → core}/itertools/index.js +25 -9
- package/{src → core}/itertools/index.ts +39 -16
- package/{src → core}/math/index.d.ts +0 -0
- package/{src → core}/math/index.js +0 -0
- package/{src → core}/math/index.ts +0 -0
- package/core/operators/index.d.ts +148 -0
- package/core/operators/index.js +271 -0
- package/core/operators/index.ts +282 -0
- package/{src → core}/random/index.d.ts +0 -0
- package/{src → core}/random/index.js +0 -0
- package/{src → core}/random/index.ts +0 -0
- package/package.json +7 -4
- package/tests/BTree.spec.ts +143 -0
- package/tests/Cache.spec.ts +161 -0
- package/tests/Heap.spec.ts +66 -0
- package/tests/SortedMap.spec.ts +144 -0
- package/tests/SortedSet.spec.ts +84 -0
- package/tests/SortedTree.spec.ts +164 -0
- package/tests/SplayTree.spec.ts +121 -0
- package/tests/collections.spec.ts +1 -1
- package/tests/deque.spec.ts +107 -0
- package/tests/globals.spec.ts +2 -2
- package/tests/itertools.spec.ts +2 -2
- package/tests/math.spec.ts +1 -1
- package/tests/operators.spec.ts +5 -5
- package/tests/random.spec.ts +10 -10
- package/tsconfig.json +10 -10
- package/tsconfig.node.json +2 -2
- package/tsconfig.xo.json +2 -2
- package/src/operators/index.d.ts +0 -31
- package/src/operators/index.js +0 -171
- package/src/operators/index.ts +0 -175
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import assert from 'assert'
|
|
2
|
+
import { SortedTree } from '../core/collections/SortedTree.js'
|
|
3
|
+
|
|
4
|
+
describe('SortedTree', () => {
|
|
5
|
+
it('empty', () => {
|
|
6
|
+
let tree = new SortedTree()
|
|
7
|
+
assert(tree.empty())
|
|
8
|
+
assert(tree.size === 0)
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('initialized', () => {
|
|
12
|
+
let entries: Array<[number, number]> = [
|
|
13
|
+
[5, 5],
|
|
14
|
+
[4, 4],
|
|
15
|
+
[3, 3],
|
|
16
|
+
[1, 1],
|
|
17
|
+
[2, 2]
|
|
18
|
+
]
|
|
19
|
+
let tree = new SortedTree(entries)
|
|
20
|
+
assert(!tree.empty())
|
|
21
|
+
assert(tree.size === 5)
|
|
22
|
+
entries.sort((x, y) => x[0] - y[0])
|
|
23
|
+
assert.deepEqual(
|
|
24
|
+
[...tree.keys()],
|
|
25
|
+
entries.map((x) => x[0])
|
|
26
|
+
)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('add', () => {
|
|
30
|
+
let tree = new SortedTree()
|
|
31
|
+
for (let i = 10; i > 0; i--) {
|
|
32
|
+
tree.add(i)
|
|
33
|
+
assert(tree.get(i) === null)
|
|
34
|
+
assert(tree.contains(i))
|
|
35
|
+
}
|
|
36
|
+
assert(tree.size === 10)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it('get', () => {
|
|
40
|
+
let tree = new SortedTree()
|
|
41
|
+
for (let i = 10; i > 0; i--) {
|
|
42
|
+
tree.set(i, i)
|
|
43
|
+
assert(tree.get(i) === i)
|
|
44
|
+
assert(tree.contains(i))
|
|
45
|
+
}
|
|
46
|
+
assert(tree.size === 10)
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
it('set', () => {
|
|
50
|
+
let tree = new SortedTree()
|
|
51
|
+
for (let i = 10; i > 0; i--) {
|
|
52
|
+
tree.set(i, i)
|
|
53
|
+
assert(tree.get(i) === i)
|
|
54
|
+
assert(tree.contains(i))
|
|
55
|
+
}
|
|
56
|
+
// update a key
|
|
57
|
+
tree.set(1, 42)
|
|
58
|
+
assert(tree.get(1) === 42)
|
|
59
|
+
// adds if not exists
|
|
60
|
+
tree.set(0, 42)
|
|
61
|
+
assert(tree.size === 11)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
it('has', () => {
|
|
65
|
+
let tree = new SortedTree()
|
|
66
|
+
for (let i = 100; i > 0; i--) {
|
|
67
|
+
tree.add(i)
|
|
68
|
+
assert(tree.has(i))
|
|
69
|
+
}
|
|
70
|
+
assert(tree.size === 100)
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
it('min', () => {
|
|
74
|
+
let tree = new SortedTree()
|
|
75
|
+
for (let i = 10; i > 0; i--) {
|
|
76
|
+
tree.add(i)
|
|
77
|
+
}
|
|
78
|
+
assert(tree.min() === 1)
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
it('max', () => {
|
|
82
|
+
let tree = new SortedTree()
|
|
83
|
+
for (let i = 10; i > 0; i--) {
|
|
84
|
+
tree.add(i)
|
|
85
|
+
}
|
|
86
|
+
assert(tree.max() === 10)
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
it('delete', () => {
|
|
90
|
+
let tree = new SortedTree()
|
|
91
|
+
tree.add(42)
|
|
92
|
+
assert(tree.contains(42))
|
|
93
|
+
assert(tree.delete(42) === true)
|
|
94
|
+
assert(!tree.contains(42))
|
|
95
|
+
assert(tree.delete(42) === false)
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
it('clear', () => {
|
|
99
|
+
let tree = new SortedTree()
|
|
100
|
+
for (let i = 1; i <= 5; i++) {
|
|
101
|
+
tree.add(i)
|
|
102
|
+
assert(tree.contains(i))
|
|
103
|
+
}
|
|
104
|
+
tree.clear()
|
|
105
|
+
assert(tree.empty())
|
|
106
|
+
assert(tree.size === 0)
|
|
107
|
+
for (let i = 1; i <= 5; i++) {
|
|
108
|
+
assert(!tree.contains(i))
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it('freeze', () => {
|
|
113
|
+
let tree = new SortedTree()
|
|
114
|
+
for (let i = 10; i > 0; i--) {
|
|
115
|
+
tree.set(i, i)
|
|
116
|
+
}
|
|
117
|
+
tree.freeze()
|
|
118
|
+
assert.throws(tree.clear)
|
|
119
|
+
assert.throws(() => tree.add(11))
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('reversed', () => {
|
|
123
|
+
let tree = new SortedTree()
|
|
124
|
+
let entries: any[] = []
|
|
125
|
+
for (let i = 100; i > 0; i--) {
|
|
126
|
+
tree.set(i, i)
|
|
127
|
+
entries.push([i, i])
|
|
128
|
+
}
|
|
129
|
+
assert.deepEqual([...tree.reversed()], entries)
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
it('keys', () => {
|
|
133
|
+
let tree = new SortedTree()
|
|
134
|
+
for (let i = 1; i <= 5; i++) {
|
|
135
|
+
tree.set(i, i * 2)
|
|
136
|
+
}
|
|
137
|
+
assert.deepEqual([...tree.keys()], [1, 2, 3, 4, 5])
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
it('values', () => {
|
|
141
|
+
let tree = new SortedTree()
|
|
142
|
+
for (let i = 1; i <= 5; i++) {
|
|
143
|
+
tree.set(i, i * 2)
|
|
144
|
+
}
|
|
145
|
+
assert.deepEqual([...tree.values()], [2, 4, 6, 8, 10])
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it('entries', () => {
|
|
149
|
+
let tree = new SortedTree()
|
|
150
|
+
for (let i = 1; i <= 5; i++) {
|
|
151
|
+
tree.set(i, i * 2)
|
|
152
|
+
}
|
|
153
|
+
assert.deepEqual(
|
|
154
|
+
[...tree.entries()],
|
|
155
|
+
[
|
|
156
|
+
[1, 2],
|
|
157
|
+
[2, 4],
|
|
158
|
+
[3, 6],
|
|
159
|
+
[4, 8],
|
|
160
|
+
[5, 10]
|
|
161
|
+
]
|
|
162
|
+
)
|
|
163
|
+
})
|
|
164
|
+
})
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import assert from 'assert'
|
|
2
|
+
import { SplayTree } from '../core/collections/SplayTree.js'
|
|
3
|
+
|
|
4
|
+
describe('SplayTree', () => {
|
|
5
|
+
it('empty', () => {
|
|
6
|
+
let tree = new SplayTree()
|
|
7
|
+
assert(tree.empty())
|
|
8
|
+
assert(tree.size === 0)
|
|
9
|
+
for (const value of tree.values()) {
|
|
10
|
+
assert(!value)
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('set', () => {
|
|
15
|
+
let tree = new SplayTree()
|
|
16
|
+
for (let i = 10; i > 0; i--) {
|
|
17
|
+
tree.set(i, i)
|
|
18
|
+
assert(tree.contains(i))
|
|
19
|
+
}
|
|
20
|
+
assert(tree.size === 10)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('get', () => {
|
|
24
|
+
let tree = new SplayTree()
|
|
25
|
+
for (let i = 100; i > 0; i--) {
|
|
26
|
+
tree.set(i, i)
|
|
27
|
+
assert(tree.get(i) === i)
|
|
28
|
+
}
|
|
29
|
+
assert(tree.size === 100)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('splay', () => {
|
|
33
|
+
let tree = new SplayTree()
|
|
34
|
+
for (let i = 100; i > 0; i--) {
|
|
35
|
+
tree.add(i)
|
|
36
|
+
assert(tree.contains(i))
|
|
37
|
+
}
|
|
38
|
+
tree.splay(42)
|
|
39
|
+
assert(tree.top() === 42)
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('lowerBound', () => {
|
|
43
|
+
let tree = new SplayTree()
|
|
44
|
+
for (let i = 20; i > 0; i -= 2) {
|
|
45
|
+
tree.set(i, i)
|
|
46
|
+
}
|
|
47
|
+
assert(tree.lowerBound(12) === 10)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it('min', () => {
|
|
51
|
+
let tree = new SplayTree()
|
|
52
|
+
for (let i = 10; i > 0; i--) {
|
|
53
|
+
tree.set(i, i)
|
|
54
|
+
}
|
|
55
|
+
assert(tree.min() === 1)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
it('max', () => {
|
|
59
|
+
let tree = new SplayTree()
|
|
60
|
+
for (let i = 10; i > 0; i--) {
|
|
61
|
+
tree.set(i, i)
|
|
62
|
+
}
|
|
63
|
+
assert(tree.max() === 10)
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
it('remove', () => {
|
|
67
|
+
let tree = new SplayTree()
|
|
68
|
+
tree.set(42, 42)
|
|
69
|
+
assert(tree.contains(42))
|
|
70
|
+
assert(tree.remove(42) === 42)
|
|
71
|
+
assert(!tree.contains(42))
|
|
72
|
+
assert(tree.remove(42) === undefined)
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('clear', () => {
|
|
76
|
+
let tree = new SplayTree()
|
|
77
|
+
for (let i = 1; i <= 5; i++) {
|
|
78
|
+
tree.add(i)
|
|
79
|
+
assert(tree.contains(i))
|
|
80
|
+
}
|
|
81
|
+
tree.clear()
|
|
82
|
+
assert(tree.empty())
|
|
83
|
+
assert(tree.size === 0)
|
|
84
|
+
for (let i = 1; i <= 5; i++) {
|
|
85
|
+
assert(!tree.contains(i))
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
it('keys', () => {
|
|
90
|
+
let tree = new SplayTree()
|
|
91
|
+
for (let i = 1; i <= 5; i++) {
|
|
92
|
+
tree.set(i, i)
|
|
93
|
+
}
|
|
94
|
+
assert.deepEqual([...tree.keys()], [1, 2, 3, 4, 5])
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('values', () => {
|
|
98
|
+
let tree = new SplayTree()
|
|
99
|
+
for (let i = 1; i <= 5; i++) {
|
|
100
|
+
tree.set(i, i * 2)
|
|
101
|
+
}
|
|
102
|
+
assert.deepEqual([...tree.values()], [2, 4, 6, 8, 10])
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('entries', () => {
|
|
106
|
+
let tree = new SplayTree()
|
|
107
|
+
for (let i = 1; i <= 5; i++) {
|
|
108
|
+
tree.set(i, i * 2)
|
|
109
|
+
}
|
|
110
|
+
assert.deepEqual(
|
|
111
|
+
[...tree.entries()],
|
|
112
|
+
[
|
|
113
|
+
[1, 2],
|
|
114
|
+
[2, 4],
|
|
115
|
+
[3, 6],
|
|
116
|
+
[4, 8],
|
|
117
|
+
[5, 10]
|
|
118
|
+
]
|
|
119
|
+
)
|
|
120
|
+
})
|
|
121
|
+
})
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import assert from 'assert'
|
|
2
|
+
import { Deque } from '../core/collections/deque.js'
|
|
3
|
+
|
|
4
|
+
describe('deque', () => {
|
|
5
|
+
const print = (x) => console.log(x.toArray())
|
|
6
|
+
|
|
7
|
+
it('empty', () => {
|
|
8
|
+
let deque = new Deque()
|
|
9
|
+
assert(deque.size === 0)
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
it('iterable', () => {
|
|
13
|
+
let values = [1, 2, 3, 4]
|
|
14
|
+
let deque = new Deque(values)
|
|
15
|
+
let elements = [] as any[]
|
|
16
|
+
for (const value of deque.values()) {
|
|
17
|
+
elements.push(value)
|
|
18
|
+
}
|
|
19
|
+
assert.deepEqual(values, elements)
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
it('append', () => {
|
|
23
|
+
let values = [1, 2, 3, 4]
|
|
24
|
+
let deque = new Deque(values)
|
|
25
|
+
assert(deque.size === values.length)
|
|
26
|
+
assert.deepEqual(deque.toArray(), values)
|
|
27
|
+
deque.append(5)
|
|
28
|
+
assert(deque.size === 5)
|
|
29
|
+
assert.deepEqual(deque.toArray(), [1, 2, 3, 4, 5])
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('appendleft', () => {
|
|
33
|
+
let values = [1, 2, 3, 4]
|
|
34
|
+
let deque = new Deque(values)
|
|
35
|
+
deque.appendleft(0)
|
|
36
|
+
deque.appendleft(1)
|
|
37
|
+
deque.appendleft(1)
|
|
38
|
+
deque.appendleft(0)
|
|
39
|
+
assert.deepEqual(deque.toArray(), [0, 1, 1, 0, 1, 2, 3, 4])
|
|
40
|
+
assert(deque.size === 8)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it('pop', () => {
|
|
44
|
+
let values = [1, 2, 3, 4]
|
|
45
|
+
let deque = new Deque(values)
|
|
46
|
+
assert(deque.pop() === 4)
|
|
47
|
+
assert(deque.pop() === 3)
|
|
48
|
+
assert(deque.pop() === 2)
|
|
49
|
+
assert(deque.pop() === 1)
|
|
50
|
+
assert(deque.size === 0)
|
|
51
|
+
assert.deepEqual(deque.toArray(), [])
|
|
52
|
+
// assert.throws(() => deque.pop())
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
it('popleft', () => {
|
|
56
|
+
let values = [1, 2, 3, 4]
|
|
57
|
+
let deque = new Deque(values)
|
|
58
|
+
assert(deque.popleft() === 1)
|
|
59
|
+
assert(deque.popleft() === 2)
|
|
60
|
+
assert(deque.popleft() === 3)
|
|
61
|
+
assert(deque.popleft() === 4)
|
|
62
|
+
assert(deque.size === 0)
|
|
63
|
+
assert.deepEqual(deque.toArray(), [])
|
|
64
|
+
// assert.throws(() => deque.popleft())
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it('contains', () => {
|
|
68
|
+
let values = [1, 2, 3, 4]
|
|
69
|
+
let deque = new Deque(values)
|
|
70
|
+
for (const val of values) {
|
|
71
|
+
assert(deque.contains(val))
|
|
72
|
+
}
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('get', () => {
|
|
76
|
+
let values = [1, 2, 3, 4]
|
|
77
|
+
let deque = new Deque(values)
|
|
78
|
+
for (let i = 0; i < values.length; i++) {
|
|
79
|
+
assert(deque.get(i) === values[i])
|
|
80
|
+
}
|
|
81
|
+
assert(deque.get(-1) === 4)
|
|
82
|
+
assert(deque.get(-2) === 3)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it('clear', () => {
|
|
86
|
+
let values = [1, 2, 3, 4]
|
|
87
|
+
let deque = new Deque(values)
|
|
88
|
+
deque.clear()
|
|
89
|
+
assert(deque.size === 0)
|
|
90
|
+
assert.deepEqual(deque.toArray(), [])
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
it('reversed', () => {
|
|
94
|
+
let values = [4, 3, 2, 0, 1]
|
|
95
|
+
let deque = new Deque(values)
|
|
96
|
+
values.reverse()
|
|
97
|
+
let arr = deque.reversed()
|
|
98
|
+
assert.deepEqual(arr, values)
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
it('toArray', () => {
|
|
102
|
+
let values = [1, 2, 3, 4]
|
|
103
|
+
let deque = new Deque(values)
|
|
104
|
+
assert(deque.size === values.length)
|
|
105
|
+
assert.deepEqual(deque.toArray(), values)
|
|
106
|
+
})
|
|
107
|
+
})
|
package/tests/globals.spec.ts
CHANGED
|
@@ -35,8 +35,8 @@ import {
|
|
|
35
35
|
uniqueId,
|
|
36
36
|
values,
|
|
37
37
|
_
|
|
38
|
-
} from '../
|
|
39
|
-
import { enumerate } from '../
|
|
38
|
+
} from '../core/globals/index.js'
|
|
39
|
+
import { enumerate } from '../core/itertools/index.js'
|
|
40
40
|
|
|
41
41
|
describe('globals', () => {
|
|
42
42
|
it('CustomError', () => {
|
package/tests/itertools.spec.ts
CHANGED
package/tests/math.spec.ts
CHANGED
package/tests/operators.spec.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import assert from 'assert'
|
|
2
|
-
import { bool, id, isinstance, not,
|
|
2
|
+
import { bool, id, isinstance, not, compare, shallowEqual } from '../core/operators/index.js'
|
|
3
3
|
|
|
4
4
|
describe('operators', () => {
|
|
5
5
|
it('id', () => {
|
|
@@ -18,10 +18,10 @@ describe('operators', () => {
|
|
|
18
18
|
assert(not(''))
|
|
19
19
|
})
|
|
20
20
|
|
|
21
|
-
it('
|
|
22
|
-
assert(
|
|
23
|
-
assert(
|
|
24
|
-
assert(
|
|
21
|
+
it('compare', () => {
|
|
22
|
+
assert(compare(1, 1) === 0)
|
|
23
|
+
assert(compare(2, 3) === -1)
|
|
24
|
+
assert(compare(4, 3) === 1)
|
|
25
25
|
})
|
|
26
26
|
|
|
27
27
|
it('isinstance', () => {
|
package/tests/random.spec.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import assert from 'assert'
|
|
2
|
-
import { any, times } from '../
|
|
3
|
-
import { choice, random, randomInt, sample, shuffle } from '../
|
|
2
|
+
import { any, times } from '../core/itertools/index.js'
|
|
3
|
+
import { choice, random, randomInt, sample, shuffle } from '../core/random/index.js'
|
|
4
4
|
|
|
5
|
-
const randomArr = () => [...times(
|
|
5
|
+
const randomArr = () => [...times(100, (i) => randomInt(i, 100))]
|
|
6
6
|
|
|
7
7
|
describe('random', () => {
|
|
8
8
|
it('choice', () => {
|
|
9
9
|
let arr = randomArr()
|
|
10
|
-
for (let i = 0; i <
|
|
10
|
+
for (let i = 0; i < 100; i++) {
|
|
11
11
|
assert(arr.includes(choice(arr)))
|
|
12
12
|
}
|
|
13
13
|
})
|
|
14
14
|
|
|
15
15
|
it('random', () => {
|
|
16
|
-
for (let i = 1; i <=
|
|
16
|
+
for (let i = 1; i <= 100; i++) {
|
|
17
17
|
let r = random(0, i)
|
|
18
18
|
assert(0 <= r && r < i)
|
|
19
19
|
}
|
|
20
20
|
})
|
|
21
21
|
|
|
22
22
|
it('randomInt', () => {
|
|
23
|
-
for (let i = 1; i <=
|
|
23
|
+
for (let i = 1; i <= 100; i++) {
|
|
24
24
|
let r = randomInt(0, i)
|
|
25
25
|
assert(0 <= r && r <= i)
|
|
26
26
|
}
|
|
@@ -29,7 +29,7 @@ describe('random', () => {
|
|
|
29
29
|
it('shuffle', () => {
|
|
30
30
|
let arr = randomArr()
|
|
31
31
|
let copy = arr.slice()
|
|
32
|
-
for (let i = 0; i <
|
|
32
|
+
for (let i = 0; i < 100; i++) {
|
|
33
33
|
assert(shuffle(copy) === copy)
|
|
34
34
|
assert(copy.some((x, i) => x !== arr[i]))
|
|
35
35
|
}
|
|
@@ -37,9 +37,9 @@ describe('random', () => {
|
|
|
37
37
|
|
|
38
38
|
it('sample', () => {
|
|
39
39
|
let arr = randomArr()
|
|
40
|
-
for (let i = 0; i <
|
|
41
|
-
let s = sample(arr,
|
|
42
|
-
assert(s.length ===
|
|
40
|
+
for (let i = 0; i < 100; i++) {
|
|
41
|
+
let s = sample(arr, 30)
|
|
42
|
+
assert(s.length === 30)
|
|
43
43
|
assert(s.some((x, i) => x !== arr[i]))
|
|
44
44
|
}
|
|
45
45
|
})
|
package/tsconfig.json
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
|
28
28
|
/* Modules */
|
|
29
29
|
"module": "ESNext", /* Specify what module code is generated. */
|
|
30
|
-
"rootDir": "
|
|
30
|
+
"rootDir": "core", /* Specify the root folder within your source files. */
|
|
31
31
|
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
|
32
32
|
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
|
33
33
|
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
|
@@ -106,14 +106,14 @@
|
|
|
106
106
|
],
|
|
107
107
|
"typedocOptions": {
|
|
108
108
|
"entryPoints": [
|
|
109
|
-
"./
|
|
110
|
-
"./
|
|
111
|
-
"./
|
|
112
|
-
"./
|
|
113
|
-
"./
|
|
114
|
-
"./
|
|
115
|
-
"./
|
|
116
|
-
"./
|
|
109
|
+
"./core/globals/index.ts",
|
|
110
|
+
"./core/collections/index.ts",
|
|
111
|
+
"./core/datetime/index.ts",
|
|
112
|
+
"./core/functools/index.ts",
|
|
113
|
+
"./core/itertools/index.ts",
|
|
114
|
+
"./core/math/index.ts",
|
|
115
|
+
"./core/operators/index.ts",
|
|
116
|
+
"./core/random/index.ts",
|
|
117
117
|
],
|
|
118
118
|
"out": "docs",
|
|
119
119
|
"exclude": [
|
|
@@ -122,4 +122,4 @@
|
|
|
122
122
|
"excludeExternals": true,
|
|
123
123
|
"excludePrivate": true,
|
|
124
124
|
}
|
|
125
|
-
}
|
|
125
|
+
}
|
package/tsconfig.node.json
CHANGED
package/tsconfig.xo.json
CHANGED
package/src/operators/index.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generic operations for both values and objects.
|
|
3
|
-
*
|
|
4
|
-
* @module Operators
|
|
5
|
-
*/
|
|
6
|
-
export declare const id: (x: any) => any;
|
|
7
|
-
export declare const bool: (x: any) => boolean;
|
|
8
|
-
export declare const not: (x: any) => boolean;
|
|
9
|
-
export declare const isinstance: (x: any, y: any) => boolean;
|
|
10
|
-
export declare function comp(x: any, y: any): 0 | 1 | -1;
|
|
11
|
-
export declare function eq(x: any, y: any): any;
|
|
12
|
-
export declare function lt(x: any, y: any): any;
|
|
13
|
-
export declare function lte(x: any, y: any): any;
|
|
14
|
-
export declare function gt(x: any, y: any): any;
|
|
15
|
-
export declare function gte(x: any, y: any): any;
|
|
16
|
-
export declare function add(x: any, y: any): any;
|
|
17
|
-
export declare function sub(x: any, y: any): any;
|
|
18
|
-
export declare function mul(x: any, y: any): any;
|
|
19
|
-
export declare function div(x: any, y: any): any;
|
|
20
|
-
export declare function mod(x: any, y: any): any;
|
|
21
|
-
/**
|
|
22
|
-
* Calculates `x` to the power of `y`. If `x` implements a custom `pow` operator
|
|
23
|
-
* it will return `x.pow(y)`.
|
|
24
|
-
*
|
|
25
|
-
* @param {*} x
|
|
26
|
-
* @param {*} y
|
|
27
|
-
* @return `x` raised to the power `y`
|
|
28
|
-
*/
|
|
29
|
-
export declare function pow(x: any, y: any): any;
|
|
30
|
-
export declare function shallowEqual(obj: any, other: any): boolean;
|
|
31
|
-
export declare function deepEqual(obj: any, other: any, checker?: typeof eq): boolean;
|