ts-data-forge 6.13.0 → 7.0.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/README.md +2 -2
- package/dist/array/impl/array-utils-iterators.mjs +6 -0
- package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
- package/dist/array/impl/array-utils-modification.mjs +6 -0
- package/dist/array/impl/array-utils-modification.mjs.map +1 -1
- package/dist/array/impl/array-utils-reducing-value.mjs +6 -0
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
- package/dist/array/impl/array-utils-search.mjs +6 -0
- package/dist/array/impl/array-utils-search.mjs.map +1 -1
- package/dist/array/impl/array-utils-slice-clamped.mjs +6 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
- package/dist/array/impl/array-utils-slicing.mjs +6 -0
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
- package/dist/array/impl/array-utils-transformation.mjs +6 -0
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
- package/dist/array/impl/array-utils-validation.mjs +6 -0
- package/dist/array/impl/array-utils-validation.mjs.map +1 -1
- package/dist/collections/imap-mapped.mjs +6 -0
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.mjs +6 -0
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/iset-mapped.mjs +6 -0
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.mjs +6 -0
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.mjs +6 -0
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.mjs +6 -0
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.mjs +6 -0
- package/dist/entry-point.mjs.map +1 -1
- package/dist/functional/pipe.d.mts +6 -18
- package/dist/functional/pipe.d.mts.map +1 -1
- package/dist/functional/pipe.mjs +35 -15
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/index.mjs +6 -0
- package/dist/index.mjs.map +1 -1
- package/dist/iterator/range.mjs +6 -0
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/json.mjs +6 -0
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.d.mts +1 -1
- package/dist/number/branded-types/index.d.mts +6 -0
- package/dist/number/branded-types/index.d.mts.map +1 -1
- package/dist/number/branded-types/index.mjs +6 -0
- package/dist/number/branded-types/index.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +1 -2
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int16.d.mts +2 -3
- package/dist/number/branded-types/int16.d.mts.map +1 -1
- package/dist/number/branded-types/int32.d.mts +2 -3
- package/dist/number/branded-types/int32.d.mts.map +1 -1
- package/dist/number/branded-types/negative-finite-number.d.mts +143 -0
- package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -0
- package/dist/number/branded-types/negative-finite-number.mjs +156 -0
- package/dist/number/branded-types/negative-finite-number.mjs.map +1 -0
- package/dist/number/branded-types/negative-int.d.mts +120 -0
- package/dist/number/branded-types/negative-int.d.mts.map +1 -0
- package/dist/number/branded-types/negative-int.mjs +125 -0
- package/dist/number/branded-types/negative-int.mjs.map +1 -0
- package/dist/number/branded-types/negative-safe-int.d.mts +132 -0
- package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -0
- package/dist/number/branded-types/negative-safe-int.mjs +136 -0
- package/dist/number/branded-types/negative-safe-int.mjs.map +1 -0
- package/dist/number/branded-types/non-negative-finite-number.d.mts +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +1 -1
- package/dist/number/branded-types/non-positive-finite-number.d.mts +130 -0
- package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -0
- package/dist/number/branded-types/non-positive-finite-number.mjs +134 -0
- package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -0
- package/dist/number/branded-types/non-positive-int.d.mts +224 -0
- package/dist/number/branded-types/non-positive-int.d.mts.map +1 -0
- package/dist/number/branded-types/non-positive-int.mjs +222 -0
- package/dist/number/branded-types/non-positive-int.mjs.map +1 -0
- package/dist/number/branded-types/non-positive-safe-int.d.mts +119 -0
- package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -0
- package/dist/number/branded-types/non-positive-safe-int.mjs +116 -0
- package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -0
- package/dist/number/branded-types/non-zero-finite-number.d.mts +5 -17
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +5 -17
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +5 -33
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +5 -25
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +6 -43
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +5 -25
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +6 -39
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +5 -25
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +5 -37
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +5 -28
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +6 -33
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +5 -17
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +6 -31
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +5 -17
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +4 -2
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +4 -2
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +4 -2
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +4 -2
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +4 -2
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +4 -2
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +4 -2
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +1 -2
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +1 -1
- package/dist/number/branded-types/uint.d.mts +1 -1
- package/dist/number/branded-types/uint16.d.mts +1 -1
- package/dist/number/branded-types/uint32.d.mts +1 -1
- package/dist/number/index.d.mts +1 -0
- package/dist/number/index.d.mts.map +1 -1
- package/dist/number/index.mjs +6 -0
- package/dist/number/index.mjs.map +1 -1
- package/dist/number/num-arithmetic-types.d.mts +74 -0
- package/dist/number/num-arithmetic-types.d.mts.map +1 -0
- package/dist/number/num-arithmetic-types.mjs +2 -0
- package/dist/number/num-arithmetic-types.mjs.map +1 -0
- package/dist/number/num.d.mts +53 -9
- package/dist/number/num.d.mts.map +1 -1
- package/dist/number/num.mjs +64 -12
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +12 -9
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/object.mjs +6 -0
- package/dist/object/object.mjs.map +1 -1
- package/package.json +5 -2
- package/src/functional/pipe.mts +104 -78
- package/src/functional/pipe.test.mts +57 -1
- package/src/number/branded-types/index.mts +6 -0
- package/src/number/branded-types/negative-finite-number.mts +210 -0
- package/src/number/branded-types/negative-finite-number.test.mts +172 -0
- package/src/number/branded-types/negative-int.mts +160 -0
- package/src/number/branded-types/negative-int.test.mts +146 -0
- package/src/number/branded-types/negative-safe-int.mts +173 -0
- package/src/number/branded-types/negative-safe-int.test.mts +120 -0
- package/src/number/branded-types/non-positive-finite-number.mts +191 -0
- package/src/number/branded-types/non-positive-finite-number.test.mts +286 -0
- package/src/number/branded-types/non-positive-int.mts +251 -0
- package/src/number/branded-types/non-positive-int.test.mts +197 -0
- package/src/number/branded-types/non-positive-safe-int.mts +147 -0
- package/src/number/branded-types/non-positive-safe-int.test.mts +223 -0
- package/src/number/branded-types/non-zero-finite-number.mts +14 -22
- package/src/number/branded-types/non-zero-finite-number.test.mts +0 -12
- package/src/number/branded-types/non-zero-int.mts +10 -32
- package/src/number/branded-types/non-zero-int.test.mts +0 -20
- package/src/number/branded-types/non-zero-int16.mts +8 -32
- package/src/number/branded-types/non-zero-int16.test.mts +0 -30
- package/src/number/branded-types/non-zero-int32.mts +8 -32
- package/src/number/branded-types/non-zero-int32.test.mts +0 -30
- package/src/number/branded-types/non-zero-safe-int.mts +8 -35
- package/src/number/branded-types/non-zero-safe-int.test.mts +0 -32
- package/src/number/branded-types/non-zero-uint16.mts +8 -22
- package/src/number/branded-types/non-zero-uint16.test.mts +0 -16
- package/src/number/branded-types/non-zero-uint32.mts +8 -22
- package/src/number/branded-types/non-zero-uint32.test.mts +0 -16
- package/src/number/index.mts +1 -0
- package/src/number/num-arithmetic-types.mts +269 -0
- package/src/number/num-arithmetic-types.test.mts +130 -0
- package/src/number/num-arithmetic.test.mts +102 -0
- package/src/number/num.mts +96 -15
- package/src/number/refined-number-utils.mts +19 -9
- package/src/others/map-nullable.test.mts +3 -4
|
@@ -10,16 +10,13 @@ const typeNameInMessage = 'a non-zero integer';
|
|
|
10
10
|
|
|
11
11
|
const {
|
|
12
12
|
abs,
|
|
13
|
-
add,
|
|
14
13
|
castType,
|
|
15
|
-
div,
|
|
16
14
|
is,
|
|
17
15
|
max: max_,
|
|
18
16
|
min: min_,
|
|
19
17
|
mul,
|
|
20
18
|
pow,
|
|
21
19
|
randomNonZero: random,
|
|
22
|
-
sub,
|
|
23
20
|
} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
|
|
24
21
|
ElementType,
|
|
25
22
|
number,
|
|
@@ -107,49 +104,30 @@ export const NonZeroInt = {
|
|
|
107
104
|
*/
|
|
108
105
|
pow,
|
|
109
106
|
|
|
110
|
-
/**
|
|
111
|
-
* Adds two non-zero integers.
|
|
112
|
-
*
|
|
113
|
-
* @param a The first non-zero integer.
|
|
114
|
-
* @param b The second non-zero integer.
|
|
115
|
-
* @returns `a + b` as a NonZeroInt.
|
|
116
|
-
*/
|
|
117
|
-
add,
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Subtracts one non-zero integer from another.
|
|
121
|
-
*
|
|
122
|
-
* @param a The minuend non-zero integer.
|
|
123
|
-
* @param b The subtrahend non-zero integer.
|
|
124
|
-
* @returns `a - b` as a NonZeroInt.
|
|
125
|
-
*/
|
|
126
|
-
sub,
|
|
127
|
-
|
|
128
107
|
/**
|
|
129
108
|
* Multiplies two non-zero integers.
|
|
130
109
|
*
|
|
110
|
+
* The product of two non-zero integers is always non-zero, so this stays
|
|
111
|
+
* closed; for the non-closed operations (`add`/`sub`/`div`, whose result may
|
|
112
|
+
* be `0`) use {@link Num.add}/{@link Num.sub}/{@link Num.divInt}.
|
|
113
|
+
*
|
|
131
114
|
* @param a The first non-zero integer.
|
|
132
115
|
* @param b The second non-zero integer.
|
|
133
116
|
* @returns `a * b` as a NonZeroInt.
|
|
134
117
|
*/
|
|
135
118
|
mul,
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Divides one non-zero integer by another using floor division.
|
|
139
|
-
*
|
|
140
|
-
* @param a The dividend non-zero integer.
|
|
141
|
-
* @param b The divisor non-zero integer.
|
|
142
|
-
* @returns `⌊a / b⌋` as a NonZeroInt.
|
|
143
|
-
*/
|
|
144
|
-
div,
|
|
145
119
|
} as const;
|
|
146
120
|
|
|
147
121
|
expectType<
|
|
148
122
|
keyof typeof NonZeroInt,
|
|
149
|
-
keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
123
|
+
keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
124
|
+
ElementType,
|
|
125
|
+
'int',
|
|
126
|
+
'mul'
|
|
127
|
+
>
|
|
150
128
|
>('=');
|
|
151
129
|
|
|
152
130
|
expectType<
|
|
153
131
|
typeof NonZeroInt,
|
|
154
|
-
TsDataForgeInternals.RefinedNumberUtils.NumberClass<ElementType, 'int'>
|
|
132
|
+
TsDataForgeInternals.RefinedNumberUtils.NumberClass<ElementType, 'int', 'mul'>
|
|
155
133
|
>('<=');
|
|
@@ -127,32 +127,12 @@ describe('NonZeroInt test', () => {
|
|
|
127
127
|
expect(NonZeroInt.max(a, c)).toBe(5);
|
|
128
128
|
});
|
|
129
129
|
|
|
130
|
-
test('add', () => {
|
|
131
|
-
expect(NonZeroInt.add(a, b)).toBe(7);
|
|
132
|
-
|
|
133
|
-
expect(NonZeroInt.add(a, c)).toBe(2);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
test('sub', () => {
|
|
137
|
-
expect(NonZeroInt.sub(a, b)).toBe(3);
|
|
138
|
-
|
|
139
|
-
expect(NonZeroInt.sub(a, c)).toBe(8);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
130
|
test('mul', () => {
|
|
143
131
|
expect(NonZeroInt.mul(a, b)).toBe(10);
|
|
144
132
|
|
|
145
133
|
expect(NonZeroInt.mul(a, c)).toBe(-15);
|
|
146
134
|
});
|
|
147
135
|
|
|
148
|
-
test('div (floor division)', () => {
|
|
149
|
-
expect(NonZeroInt.div(a, b)).toBe(2);
|
|
150
|
-
|
|
151
|
-
expect(NonZeroInt.div(asNonZeroInt(7), asNonZeroInt(3))).toBe(2);
|
|
152
|
-
|
|
153
|
-
expect(NonZeroInt.div(asNonZeroInt(-7), asNonZeroInt(3))).toBe(-3);
|
|
154
|
-
});
|
|
155
|
-
|
|
156
136
|
test('pow', () => {
|
|
157
137
|
expect(NonZeroInt.pow(asNonZeroInt(2), asNonZeroInt(3))).toBe(8);
|
|
158
138
|
|
|
@@ -12,17 +12,14 @@ const {
|
|
|
12
12
|
MAX_VALUE,
|
|
13
13
|
MIN_VALUE,
|
|
14
14
|
abs,
|
|
15
|
-
add,
|
|
16
15
|
castType,
|
|
17
16
|
clamp,
|
|
18
|
-
div,
|
|
19
17
|
is,
|
|
20
18
|
max: max_,
|
|
21
19
|
min: min_,
|
|
22
20
|
mul,
|
|
23
21
|
pow,
|
|
24
22
|
randomNonZero: random,
|
|
25
|
-
sub,
|
|
26
23
|
} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
|
|
27
24
|
ElementType,
|
|
28
25
|
number,
|
|
@@ -137,48 +134,26 @@ export const NonZeroInt16 = {
|
|
|
137
134
|
*/
|
|
138
135
|
pow,
|
|
139
136
|
|
|
140
|
-
/**
|
|
141
|
-
* Adds two NonZeroInt16 values.
|
|
142
|
-
*
|
|
143
|
-
* @param a The first NonZeroInt16.
|
|
144
|
-
* @param b The second NonZeroInt16.
|
|
145
|
-
* @returns `a + b` clamped to [-32768, 32767] as a NonZeroInt16.
|
|
146
|
-
*/
|
|
147
|
-
add,
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Subtracts one NonZeroInt16 from another.
|
|
151
|
-
*
|
|
152
|
-
* @param a The minuend NonZeroInt16.
|
|
153
|
-
* @param b The subtrahend NonZeroInt16.
|
|
154
|
-
* @returns `a - b` clamped to [-32768, 32767] as a NonZeroInt16.
|
|
155
|
-
*/
|
|
156
|
-
sub,
|
|
157
|
-
|
|
158
137
|
/**
|
|
159
138
|
* Multiplies two NonZeroInt16 values.
|
|
160
139
|
*
|
|
140
|
+
* The product of two non-zero integers is always non-zero, so this stays
|
|
141
|
+
* closed; for the non-closed operations (`add`/`sub`/`div`, whose result may
|
|
142
|
+
* be `0`) use {@link Num.add}/{@link Num.sub}/{@link Num.divInt}.
|
|
143
|
+
*
|
|
161
144
|
* @param a The first NonZeroInt16.
|
|
162
145
|
* @param b The second NonZeroInt16.
|
|
163
146
|
* @returns `a * b` clamped to [-32768, 32767] as a NonZeroInt16.
|
|
164
147
|
*/
|
|
165
148
|
mul,
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Divides one NonZeroInt16 by another using floor division.
|
|
169
|
-
*
|
|
170
|
-
* @param a The dividend NonZeroInt16.
|
|
171
|
-
* @param b The divisor NonZeroInt16.
|
|
172
|
-
* @returns `⌊a / b⌋` clamped to [-32768, 32767] as a NonZeroInt16.
|
|
173
|
-
*/
|
|
174
|
-
div,
|
|
175
149
|
} as const;
|
|
176
150
|
|
|
177
151
|
expectType<
|
|
178
152
|
keyof typeof NonZeroInt16,
|
|
179
153
|
keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
180
154
|
ElementType,
|
|
181
|
-
'int' | 'range'
|
|
155
|
+
'int' | 'range',
|
|
156
|
+
'mul'
|
|
182
157
|
>
|
|
183
158
|
>('=');
|
|
184
159
|
|
|
@@ -186,6 +161,7 @@ expectType<
|
|
|
186
161
|
typeof NonZeroInt16,
|
|
187
162
|
TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
188
163
|
ElementType,
|
|
189
|
-
'int' | 'range'
|
|
164
|
+
'int' | 'range',
|
|
165
|
+
'mul'
|
|
190
166
|
>
|
|
191
167
|
>('<=');
|
|
@@ -154,28 +154,6 @@ describe('NonZeroInt16 test', () => {
|
|
|
154
154
|
expect(NonZeroInt16.max(a, c)).toBe(100);
|
|
155
155
|
});
|
|
156
156
|
|
|
157
|
-
test('add (with clamping)', () => {
|
|
158
|
-
const result = NonZeroInt16.add(
|
|
159
|
-
asNonZeroInt16(32_000),
|
|
160
|
-
asNonZeroInt16(1000),
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
expect(result).toBe(32_767); // clamped to max
|
|
164
|
-
|
|
165
|
-
expect(NonZeroInt16.add(a, b)).toBe(150);
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
test('sub (with clamping)', () => {
|
|
169
|
-
const result = NonZeroInt16.sub(
|
|
170
|
-
asNonZeroInt16(-32_000),
|
|
171
|
-
asNonZeroInt16(1000),
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
expect(result).toBe(-32_768); // clamped to min
|
|
175
|
-
|
|
176
|
-
expect(NonZeroInt16.sub(a, b)).toBe(50);
|
|
177
|
-
});
|
|
178
|
-
|
|
179
157
|
test('mul (with clamping)', () => {
|
|
180
158
|
const result = NonZeroInt16.mul(
|
|
181
159
|
asNonZeroInt16(1000),
|
|
@@ -187,14 +165,6 @@ describe('NonZeroInt16 test', () => {
|
|
|
187
165
|
expect(NonZeroInt16.mul(asNonZeroInt16(10), asNonZeroInt16(5))).toBe(50);
|
|
188
166
|
});
|
|
189
167
|
|
|
190
|
-
test('div (floor division with clamping)', () => {
|
|
191
|
-
expect(NonZeroInt16.div(a, asNonZeroInt16(50))).toBe(2);
|
|
192
|
-
|
|
193
|
-
expect(NonZeroInt16.div(asNonZeroInt16(7), asNonZeroInt16(3))).toBe(2);
|
|
194
|
-
|
|
195
|
-
expect(NonZeroInt16.div(asNonZeroInt16(-7), asNonZeroInt16(3))).toBe(-3);
|
|
196
|
-
});
|
|
197
|
-
|
|
198
168
|
test('pow (with clamping)', () => {
|
|
199
169
|
const result = NonZeroInt16.pow(asNonZeroInt16(200), asNonZeroInt16(3));
|
|
200
170
|
|
|
@@ -12,17 +12,14 @@ const {
|
|
|
12
12
|
MAX_VALUE,
|
|
13
13
|
MIN_VALUE,
|
|
14
14
|
abs,
|
|
15
|
-
add,
|
|
16
15
|
castType,
|
|
17
16
|
clamp,
|
|
18
|
-
div,
|
|
19
17
|
is,
|
|
20
18
|
max: max_,
|
|
21
19
|
min: min_,
|
|
22
20
|
mul,
|
|
23
21
|
pow,
|
|
24
22
|
randomNonZero: random,
|
|
25
|
-
sub,
|
|
26
23
|
} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
|
|
27
24
|
ElementType,
|
|
28
25
|
number,
|
|
@@ -138,48 +135,26 @@ export const NonZeroInt32 = {
|
|
|
138
135
|
*/
|
|
139
136
|
pow,
|
|
140
137
|
|
|
141
|
-
/**
|
|
142
|
-
* Adds two NonZeroInt32 values.
|
|
143
|
-
*
|
|
144
|
-
* @param a The first NonZeroInt32.
|
|
145
|
-
* @param b The second NonZeroInt32.
|
|
146
|
-
* @returns `a + b` clamped to [-2147483648, 2147483647] as a NonZeroInt32.
|
|
147
|
-
*/
|
|
148
|
-
add,
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Subtracts one NonZeroInt32 from another.
|
|
152
|
-
*
|
|
153
|
-
* @param a The minuend NonZeroInt32.
|
|
154
|
-
* @param b The subtrahend NonZeroInt32.
|
|
155
|
-
* @returns `a - b` clamped to [-2147483648, 2147483647] as a NonZeroInt32.
|
|
156
|
-
*/
|
|
157
|
-
sub,
|
|
158
|
-
|
|
159
138
|
/**
|
|
160
139
|
* Multiplies two NonZeroInt32 values.
|
|
161
140
|
*
|
|
141
|
+
* The product of two non-zero integers is always non-zero, so this stays
|
|
142
|
+
* closed; for the non-closed operations (`add`/`sub`/`div`, whose result may
|
|
143
|
+
* be `0`) use {@link Num.add}/{@link Num.sub}/{@link Num.divInt}.
|
|
144
|
+
*
|
|
162
145
|
* @param a The first NonZeroInt32.
|
|
163
146
|
* @param b The second NonZeroInt32.
|
|
164
147
|
* @returns `a * b` clamped to [-2147483648, 2147483647] as a NonZeroInt32.
|
|
165
148
|
*/
|
|
166
149
|
mul,
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Divides one NonZeroInt32 by another using floor division.
|
|
170
|
-
*
|
|
171
|
-
* @param a The dividend NonZeroInt32.
|
|
172
|
-
* @param b The divisor NonZeroInt32.
|
|
173
|
-
* @returns `⌊a / b⌋` clamped to [-2147483648, 2147483647] as a NonZeroInt32.
|
|
174
|
-
*/
|
|
175
|
-
div,
|
|
176
150
|
} as const;
|
|
177
151
|
|
|
178
152
|
expectType<
|
|
179
153
|
keyof typeof NonZeroInt32,
|
|
180
154
|
keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
181
155
|
ElementType,
|
|
182
|
-
'int' | 'range'
|
|
156
|
+
'int' | 'range',
|
|
157
|
+
'mul'
|
|
183
158
|
>
|
|
184
159
|
>('=');
|
|
185
160
|
|
|
@@ -187,6 +162,7 @@ expectType<
|
|
|
187
162
|
typeof NonZeroInt32,
|
|
188
163
|
TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
189
164
|
ElementType,
|
|
190
|
-
'int' | 'range'
|
|
165
|
+
'int' | 'range',
|
|
166
|
+
'mul'
|
|
191
167
|
>
|
|
192
168
|
>('<=');
|
|
@@ -154,28 +154,6 @@ describe('NonZeroInt32 test', () => {
|
|
|
154
154
|
expect(NonZeroInt32.max(a, c)).toBe(1_000_000);
|
|
155
155
|
});
|
|
156
156
|
|
|
157
|
-
test('add (with clamping)', () => {
|
|
158
|
-
const result = NonZeroInt32.add(
|
|
159
|
-
asNonZeroInt32(2_147_483_000),
|
|
160
|
-
asNonZeroInt32(1000),
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
expect(result).toBe(2_147_483_647); // clamped to max
|
|
164
|
-
|
|
165
|
-
expect(NonZeroInt32.add(a, b)).toBe(1_500_000);
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
test('sub (with clamping)', () => {
|
|
169
|
-
const result = NonZeroInt32.sub(
|
|
170
|
-
asNonZeroInt32(-2_147_483_000),
|
|
171
|
-
asNonZeroInt32(1000),
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
expect(result).toBe(-2_147_483_648); // clamped to min
|
|
175
|
-
|
|
176
|
-
expect(NonZeroInt32.sub(a, b)).toBe(500_000);
|
|
177
|
-
});
|
|
178
|
-
|
|
179
157
|
test('mul (with clamping)', () => {
|
|
180
158
|
const result = NonZeroInt32.mul(
|
|
181
159
|
asNonZeroInt32(100_000),
|
|
@@ -189,14 +167,6 @@ describe('NonZeroInt32 test', () => {
|
|
|
189
167
|
);
|
|
190
168
|
});
|
|
191
169
|
|
|
192
|
-
test('div (floor division with clamping)', () => {
|
|
193
|
-
expect(NonZeroInt32.div(a, asNonZeroInt32(500_000))).toBe(2);
|
|
194
|
-
|
|
195
|
-
expect(NonZeroInt32.div(asNonZeroInt32(7), asNonZeroInt32(3))).toBe(2);
|
|
196
|
-
|
|
197
|
-
expect(NonZeroInt32.div(asNonZeroInt32(-7), asNonZeroInt32(3))).toBe(-3);
|
|
198
|
-
});
|
|
199
|
-
|
|
200
170
|
test('pow (with clamping)', () => {
|
|
201
171
|
const result = NonZeroInt32.pow(
|
|
202
172
|
asNonZeroInt32(10_000),
|
|
@@ -16,17 +16,14 @@ const {
|
|
|
16
16
|
MAX_VALUE,
|
|
17
17
|
MIN_VALUE,
|
|
18
18
|
abs,
|
|
19
|
-
add,
|
|
20
19
|
castType,
|
|
21
20
|
clamp,
|
|
22
|
-
div,
|
|
23
21
|
is,
|
|
24
22
|
max: max_,
|
|
25
23
|
min: min_,
|
|
26
24
|
mul,
|
|
27
25
|
pow,
|
|
28
26
|
randomNonZero: random,
|
|
29
|
-
sub,
|
|
30
27
|
} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
|
|
31
28
|
ElementType,
|
|
32
29
|
SafeInt,
|
|
@@ -144,52 +141,27 @@ export const NonZeroSafeInt = {
|
|
|
144
141
|
*/
|
|
145
142
|
pow,
|
|
146
143
|
|
|
147
|
-
/**
|
|
148
|
-
* Adds two NonZeroSafeInt values.
|
|
149
|
-
*
|
|
150
|
-
* @param a The first NonZeroSafeInt.
|
|
151
|
-
* @param b The second NonZeroSafeInt.
|
|
152
|
-
* @returns `a + b` clamped to non-zero safe integer range as a
|
|
153
|
-
* NonZeroSafeInt.
|
|
154
|
-
*/
|
|
155
|
-
add,
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Subtracts one NonZeroSafeInt from another.
|
|
159
|
-
*
|
|
160
|
-
* @param a The minuend NonZeroSafeInt.
|
|
161
|
-
* @param b The subtrahend NonZeroSafeInt.
|
|
162
|
-
* @returns `a - b` clamped to non-zero safe integer range as a
|
|
163
|
-
* NonZeroSafeInt.
|
|
164
|
-
*/
|
|
165
|
-
sub,
|
|
166
|
-
|
|
167
144
|
/**
|
|
168
145
|
* Multiplies two NonZeroSafeInt values.
|
|
169
146
|
*
|
|
147
|
+
* The product of two non-zero safe integers is always non-zero, so this stays
|
|
148
|
+
* closed; for the non-closed operations (`add`/`sub`/`div`, whose result may
|
|
149
|
+
* be `0`) use {@link Num.add}/{@link Num.sub}/{@link Num.divInt}.
|
|
150
|
+
*
|
|
170
151
|
* @param a The first NonZeroSafeInt.
|
|
171
152
|
* @param b The second NonZeroSafeInt.
|
|
172
153
|
* @returns `a * b` clamped to non-zero safe integer range as a
|
|
173
154
|
* NonZeroSafeInt.
|
|
174
155
|
*/
|
|
175
156
|
mul,
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Divides one NonZeroSafeInt by another using floor division.
|
|
179
|
-
*
|
|
180
|
-
* @param a The dividend NonZeroSafeInt.
|
|
181
|
-
* @param b The divisor NonZeroSafeInt.
|
|
182
|
-
* @returns `⌊a / b⌋` clamped to non-zero safe integer range as a
|
|
183
|
-
* NonZeroSafeInt.
|
|
184
|
-
*/
|
|
185
|
-
div,
|
|
186
157
|
} as const;
|
|
187
158
|
|
|
188
159
|
expectType<
|
|
189
160
|
keyof typeof NonZeroSafeInt,
|
|
190
161
|
keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
191
162
|
ElementType,
|
|
192
|
-
'int' | 'range'
|
|
163
|
+
'int' | 'range',
|
|
164
|
+
'mul'
|
|
193
165
|
>
|
|
194
166
|
>('=');
|
|
195
167
|
|
|
@@ -197,6 +169,7 @@ expectType<
|
|
|
197
169
|
typeof NonZeroSafeInt,
|
|
198
170
|
TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
199
171
|
ElementType,
|
|
200
|
-
'int' | 'range'
|
|
172
|
+
'int' | 'range',
|
|
173
|
+
'mul'
|
|
201
174
|
>
|
|
202
175
|
>('<=');
|
|
@@ -170,26 +170,6 @@ describe('NonZeroSafeInt test', () => {
|
|
|
170
170
|
expect(NonZeroSafeInt.max(a, c)).toBe(5);
|
|
171
171
|
});
|
|
172
172
|
|
|
173
|
-
test('add (with clamping to safe integer range)', () => {
|
|
174
|
-
const largeValue = asNonZeroSafeInt(Number.MAX_SAFE_INTEGER - 1);
|
|
175
|
-
|
|
176
|
-
const result = NonZeroSafeInt.add(largeValue, asNonZeroSafeInt(10));
|
|
177
|
-
|
|
178
|
-
expect(result).toBe(Number.MAX_SAFE_INTEGER); // clamped to max
|
|
179
|
-
|
|
180
|
-
expect(NonZeroSafeInt.add(a, b)).toBe(7);
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
test('sub (with clamping to safe integer range)', () => {
|
|
184
|
-
const smallValue = asNonZeroSafeInt(Number.MIN_SAFE_INTEGER + 1);
|
|
185
|
-
|
|
186
|
-
const result = NonZeroSafeInt.sub(smallValue, asNonZeroSafeInt(10));
|
|
187
|
-
|
|
188
|
-
expect(result).toBe(Number.MIN_SAFE_INTEGER); // clamped to min
|
|
189
|
-
|
|
190
|
-
expect(NonZeroSafeInt.sub(a, b)).toBe(3);
|
|
191
|
-
});
|
|
192
|
-
|
|
193
173
|
test('mul (with clamping to safe integer range)', () => {
|
|
194
174
|
const largeValue = asNonZeroSafeInt(
|
|
195
175
|
Math.floor(Math.sqrt(Number.MAX_SAFE_INTEGER)),
|
|
@@ -204,18 +184,6 @@ describe('NonZeroSafeInt test', () => {
|
|
|
204
184
|
).toBe(50);
|
|
205
185
|
});
|
|
206
186
|
|
|
207
|
-
test('div (floor division with clamping)', () => {
|
|
208
|
-
expect(NonZeroSafeInt.div(a, b)).toBe(2);
|
|
209
|
-
|
|
210
|
-
expect(NonZeroSafeInt.div(asNonZeroSafeInt(7), asNonZeroSafeInt(3))).toBe(
|
|
211
|
-
2,
|
|
212
|
-
);
|
|
213
|
-
|
|
214
|
-
expect(
|
|
215
|
-
NonZeroSafeInt.div(asNonZeroSafeInt(-7), asNonZeroSafeInt(3)),
|
|
216
|
-
).toBe(-3);
|
|
217
|
-
});
|
|
218
|
-
|
|
219
187
|
test('pow (with clamping to safe integer range)', () => {
|
|
220
188
|
const result = NonZeroSafeInt.pow(
|
|
221
189
|
asNonZeroSafeInt(1000),
|
|
@@ -14,14 +14,12 @@ const {
|
|
|
14
14
|
add,
|
|
15
15
|
castType,
|
|
16
16
|
clamp,
|
|
17
|
-
div,
|
|
18
17
|
is,
|
|
19
18
|
max: max_,
|
|
20
19
|
min: min_,
|
|
21
20
|
mul,
|
|
22
21
|
pow,
|
|
23
22
|
randomNonZero: random,
|
|
24
|
-
sub,
|
|
25
23
|
} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
|
|
26
24
|
ElementType,
|
|
27
25
|
1,
|
|
@@ -136,39 +134,26 @@ export const NonZeroUint16 = {
|
|
|
136
134
|
*/
|
|
137
135
|
add,
|
|
138
136
|
|
|
139
|
-
/**
|
|
140
|
-
* Subtracts one NonZeroUint16 from another.
|
|
141
|
-
*
|
|
142
|
-
* @param a The minuend NonZeroUint16.
|
|
143
|
-
* @param b The subtrahend NonZeroUint16.
|
|
144
|
-
* @returns `a - b` clamped to [1, 65535] as a NonZeroUint16 (minimum 1).
|
|
145
|
-
*/
|
|
146
|
-
sub,
|
|
147
|
-
|
|
148
137
|
/**
|
|
149
138
|
* Multiplies two NonZeroUint16 values.
|
|
150
139
|
*
|
|
140
|
+
* Both `add` and `mul` stay within `[1, 65535]`. For the non-closed
|
|
141
|
+
* operations (`sub`/`div`, whose result may be `0`) use {@link Num.sub} /
|
|
142
|
+
* {@link Num.divInt}.
|
|
143
|
+
*
|
|
151
144
|
* @param a The first NonZeroUint16.
|
|
152
145
|
* @param b The second NonZeroUint16.
|
|
153
146
|
* @returns `a * b` clamped to [1, 65535] as a NonZeroUint16.
|
|
154
147
|
*/
|
|
155
148
|
mul,
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Divides one NonZeroUint16 by another using floor division.
|
|
159
|
-
*
|
|
160
|
-
* @param a The dividend NonZeroUint16.
|
|
161
|
-
* @param b The divisor NonZeroUint16.
|
|
162
|
-
* @returns `⌊a / b⌋` clamped to [1, 65535] as a NonZeroUint16.
|
|
163
|
-
*/
|
|
164
|
-
div,
|
|
165
149
|
} as const;
|
|
166
150
|
|
|
167
151
|
expectType<
|
|
168
152
|
keyof typeof NonZeroUint16,
|
|
169
153
|
keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
170
154
|
ElementType,
|
|
171
|
-
'int' | 'positive' | 'range'
|
|
155
|
+
'int' | 'positive' | 'range',
|
|
156
|
+
'add' | 'mul'
|
|
172
157
|
>
|
|
173
158
|
>('=');
|
|
174
159
|
|
|
@@ -176,6 +161,7 @@ expectType<
|
|
|
176
161
|
typeof NonZeroUint16,
|
|
177
162
|
TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
178
163
|
ElementType,
|
|
179
|
-
'int' | 'positive' | 'range'
|
|
164
|
+
'int' | 'positive' | 'range',
|
|
165
|
+
'add' | 'mul'
|
|
180
166
|
>
|
|
181
167
|
>('<=');
|
|
@@ -159,12 +159,6 @@ describe('NonZeroUint16 test', () => {
|
|
|
159
159
|
expect(NonZeroUint16.add(a, b)).toBe(150);
|
|
160
160
|
});
|
|
161
161
|
|
|
162
|
-
test('sub (never goes below 1)', () => {
|
|
163
|
-
expect(NonZeroUint16.sub(a, b)).toBe(50);
|
|
164
|
-
|
|
165
|
-
expect(NonZeroUint16.sub(b, a)).toBe(1); // clamped to 1
|
|
166
|
-
});
|
|
167
|
-
|
|
168
162
|
test('mul (with clamping to non-zero uint16 range)', () => {
|
|
169
163
|
const result = NonZeroUint16.mul(
|
|
170
164
|
asNonZeroUint16(1000),
|
|
@@ -178,16 +172,6 @@ describe('NonZeroUint16 test', () => {
|
|
|
178
172
|
);
|
|
179
173
|
});
|
|
180
174
|
|
|
181
|
-
test('div (floor division, never goes below 1)', () => {
|
|
182
|
-
expect(NonZeroUint16.div(a, asNonZeroUint16(50))).toBe(2);
|
|
183
|
-
|
|
184
|
-
expect(NonZeroUint16.div(asNonZeroUint16(7), asNonZeroUint16(3))).toBe(2);
|
|
185
|
-
|
|
186
|
-
expect(NonZeroUint16.div(asNonZeroUint16(50), asNonZeroUint16(100))).toBe(
|
|
187
|
-
1,
|
|
188
|
-
); // floor(50/100) = 0, clamped to 1
|
|
189
|
-
});
|
|
190
|
-
|
|
191
175
|
test('pow (with clamping to non-zero uint16 range)', () => {
|
|
192
176
|
const result = NonZeroUint16.pow(
|
|
193
177
|
asNonZeroUint16(256),
|
|
@@ -14,14 +14,12 @@ const {
|
|
|
14
14
|
add,
|
|
15
15
|
castType,
|
|
16
16
|
clamp,
|
|
17
|
-
div,
|
|
18
17
|
is,
|
|
19
18
|
max: max_,
|
|
20
19
|
min: min_,
|
|
21
20
|
mul,
|
|
22
21
|
pow,
|
|
23
22
|
randomNonZero: random,
|
|
24
|
-
sub,
|
|
25
23
|
} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<
|
|
26
24
|
ElementType,
|
|
27
25
|
1,
|
|
@@ -136,39 +134,26 @@ export const NonZeroUint32 = {
|
|
|
136
134
|
*/
|
|
137
135
|
add,
|
|
138
136
|
|
|
139
|
-
/**
|
|
140
|
-
* Subtracts one NonZeroUint32 from another.
|
|
141
|
-
*
|
|
142
|
-
* @param a The minuend NonZeroUint32.
|
|
143
|
-
* @param b The subtrahend NonZeroUint32.
|
|
144
|
-
* @returns `a - b` clamped to [1, 4294967295] as a NonZeroUint32 (minimum 1).
|
|
145
|
-
*/
|
|
146
|
-
sub,
|
|
147
|
-
|
|
148
137
|
/**
|
|
149
138
|
* Multiplies two NonZeroUint32 values.
|
|
150
139
|
*
|
|
140
|
+
* Both `add` and `mul` stay within `[1, 4294967295]`. For the non-closed
|
|
141
|
+
* operations (`sub`/`div`, whose result may be `0`) use {@link Num.sub} /
|
|
142
|
+
* {@link Num.divInt}.
|
|
143
|
+
*
|
|
151
144
|
* @param a The first NonZeroUint32.
|
|
152
145
|
* @param b The second NonZeroUint32.
|
|
153
146
|
* @returns `a * b` clamped to [1, 4294967295] as a NonZeroUint32.
|
|
154
147
|
*/
|
|
155
148
|
mul,
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Divides one NonZeroUint32 by another using floor division.
|
|
159
|
-
*
|
|
160
|
-
* @param a The dividend NonZeroUint32.
|
|
161
|
-
* @param b The divisor NonZeroUint32.
|
|
162
|
-
* @returns `⌊a / b⌋` clamped to [1, 4294967295] as a NonZeroUint32.
|
|
163
|
-
*/
|
|
164
|
-
div,
|
|
165
149
|
} as const;
|
|
166
150
|
|
|
167
151
|
expectType<
|
|
168
152
|
keyof typeof NonZeroUint32,
|
|
169
153
|
keyof TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
170
154
|
ElementType,
|
|
171
|
-
'int' | 'positive' | 'range'
|
|
155
|
+
'int' | 'positive' | 'range',
|
|
156
|
+
'add' | 'mul'
|
|
172
157
|
>
|
|
173
158
|
>('=');
|
|
174
159
|
|
|
@@ -176,6 +161,7 @@ expectType<
|
|
|
176
161
|
typeof NonZeroUint32,
|
|
177
162
|
TsDataForgeInternals.RefinedNumberUtils.NumberClass<
|
|
178
163
|
ElementType,
|
|
179
|
-
'int' | 'positive' | 'range'
|
|
164
|
+
'int' | 'positive' | 'range',
|
|
165
|
+
'add' | 'mul'
|
|
180
166
|
>
|
|
181
167
|
>('<=');
|
|
@@ -159,12 +159,6 @@ describe('NonZeroUint32 test', () => {
|
|
|
159
159
|
expect(NonZeroUint32.add(a, b)).toBe(1_500_000);
|
|
160
160
|
});
|
|
161
161
|
|
|
162
|
-
test('sub (never goes below 1)', () => {
|
|
163
|
-
expect(NonZeroUint32.sub(a, b)).toBe(500_000);
|
|
164
|
-
|
|
165
|
-
expect(NonZeroUint32.sub(b, a)).toBe(1); // clamped to 1
|
|
166
|
-
});
|
|
167
|
-
|
|
168
162
|
test('mul (with clamping to non-zero uint32 range)', () => {
|
|
169
163
|
const result = NonZeroUint32.mul(
|
|
170
164
|
asNonZeroUint32(100_000),
|
|
@@ -178,16 +172,6 @@ describe('NonZeroUint32 test', () => {
|
|
|
178
172
|
);
|
|
179
173
|
});
|
|
180
174
|
|
|
181
|
-
test('div (floor division, never goes below 1)', () => {
|
|
182
|
-
expect(NonZeroUint32.div(a, asNonZeroUint32(500_000))).toBe(2);
|
|
183
|
-
|
|
184
|
-
expect(NonZeroUint32.div(asNonZeroUint32(7), asNonZeroUint32(3))).toBe(2);
|
|
185
|
-
|
|
186
|
-
expect(
|
|
187
|
-
NonZeroUint32.div(asNonZeroUint32(500_000), asNonZeroUint32(1_000_000)),
|
|
188
|
-
).toBe(1); // floor(500000/1000000) = 0, clamped to 1
|
|
189
|
-
});
|
|
190
|
-
|
|
191
175
|
test('pow (with clamping to non-zero uint32 range)', () => {
|
|
192
176
|
const result = NonZeroUint32.pow(
|
|
193
177
|
asNonZeroUint32(10_000),
|