ts-data-forge 11.0.0 → 12.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/number/branded-types/finite-number.d.mts +47 -61
- package/dist/number/branded-types/finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +37 -41
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +40 -46
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int.mjs +29 -31
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.d.mts +71 -59
- package/dist/number/branded-types/int16.d.mts.map +1 -1
- package/dist/number/branded-types/int16.mjs +56 -47
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.d.mts +71 -59
- package/dist/number/branded-types/int32.d.mts.map +1 -1
- package/dist/number/branded-types/int32.mjs +56 -47
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/negative-finite-number.d.mts +76 -60
- package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/negative-finite-number.mjs +62 -49
- package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/negative-int.d.mts +66 -49
- package/dist/number/branded-types/negative-int.d.mts.map +1 -1
- package/dist/number/branded-types/negative-int.mjs +48 -39
- package/dist/number/branded-types/negative-int.mjs.map +1 -1
- package/dist/number/branded-types/negative-safe-int.d.mts +64 -57
- package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/negative-safe-int.mjs +49 -44
- package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.d.mts +80 -65
- package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +65 -53
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +71 -58
- package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +55 -45
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +71 -59
- package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +55 -46
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.d.mts +70 -55
- package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.mjs +55 -43
- package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-int.d.mts +46 -146
- package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-int.mjs +33 -108
- package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.d.mts +62 -54
- package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.mjs +46 -41
- package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.d.mts +62 -49
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +46 -37
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +51 -38
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +31 -27
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +59 -54
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +44 -41
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +59 -55
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +44 -42
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +60 -55
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +44 -42
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +59 -54
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +43 -41
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +59 -54
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +43 -41
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +82 -64
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +67 -52
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +53 -70
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +42 -52
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +68 -58
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +52 -45
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +68 -58
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +52 -45
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +72 -61
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +56 -48
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +68 -58
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +52 -45
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +68 -59
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +52 -46
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +52 -66
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +45 -47
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +68 -58
- package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +53 -46
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.d.mts +72 -55
- package/dist/number/branded-types/uint.d.mts.map +1 -1
- package/dist/number/branded-types/uint.mjs +52 -45
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.d.mts +66 -59
- package/dist/number/branded-types/uint16.d.mts.map +1 -1
- package/dist/number/branded-types/uint16.mjs +51 -45
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.d.mts +66 -57
- package/dist/number/branded-types/uint32.d.mts.map +1 -1
- package/dist/number/branded-types/uint32.mjs +50 -45
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/int8.d.mts +62 -66
- package/dist/number/enum/int8.d.mts.map +1 -1
- package/dist/number/enum/int8.mjs +57 -51
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.d.mts +66 -59
- package/dist/number/enum/uint8.d.mts.map +1 -1
- package/dist/number/enum/uint8.mjs +57 -51
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +9 -9
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +7 -7
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/package.json +2 -1
- package/src/number/branded-types/finite-number.mts +47 -61
- package/src/number/branded-types/int.mts +40 -46
- package/src/number/branded-types/int16.mts +72 -60
- package/src/number/branded-types/int32.mts +72 -60
- package/src/number/branded-types/negative-finite-number.mts +78 -71
- package/src/number/branded-types/negative-finite-number.test.mts +4 -4
- package/src/number/branded-types/negative-int.mts +68 -60
- package/src/number/branded-types/negative-int.test.mts +5 -5
- package/src/number/branded-types/negative-safe-int.mts +66 -68
- package/src/number/branded-types/negative-safe-int.test.mts +4 -4
- package/src/number/branded-types/non-negative-finite-number.mts +81 -66
- package/src/number/branded-types/non-negative-int16.mts +72 -59
- package/src/number/branded-types/non-negative-int32.mts +72 -60
- package/src/number/branded-types/non-positive-finite-number.mts +71 -56
- package/src/number/branded-types/non-positive-finite-number.test.mts +7 -7
- package/src/number/branded-types/non-positive-int.mts +47 -147
- package/src/number/branded-types/non-positive-int.test.mts +7 -7
- package/src/number/branded-types/non-positive-safe-int.mts +63 -55
- package/src/number/branded-types/non-positive-safe-int.test.mts +7 -7
- package/src/number/branded-types/non-zero-finite-number.mts +62 -51
- package/src/number/branded-types/non-zero-int.mts +51 -38
- package/src/number/branded-types/non-zero-int16.mts +60 -55
- package/src/number/branded-types/non-zero-int32.mts +60 -56
- package/src/number/branded-types/non-zero-safe-int.mts +61 -56
- package/src/number/branded-types/non-zero-uint16.mts +60 -55
- package/src/number/branded-types/non-zero-uint32.mts +60 -55
- package/src/number/branded-types/positive-finite-number.mts +83 -65
- package/src/number/branded-types/positive-int.mts +54 -71
- package/src/number/branded-types/positive-int16.mts +69 -59
- package/src/number/branded-types/positive-int32.mts +69 -59
- package/src/number/branded-types/positive-safe-int.mts +73 -62
- package/src/number/branded-types/positive-uint16.mts +69 -59
- package/src/number/branded-types/positive-uint32.mts +69 -60
- package/src/number/branded-types/safe-int.mts +53 -67
- package/src/number/branded-types/safe-uint.mts +69 -59
- package/src/number/branded-types/uint.mts +73 -56
- package/src/number/branded-types/uint16.mts +67 -60
- package/src/number/branded-types/uint32.mts +67 -58
- package/src/number/enum/int8.mts +70 -73
- package/src/number/enum/int8.test.mts +7 -4
- package/src/number/enum/uint8.mts +74 -66
- package/src/number/enum/uint8.test.mts +7 -4
- package/src/number/refined-number-utils.mts +22 -19
|
@@ -10,7 +10,7 @@ const {
|
|
|
10
10
|
MAX_VALUE,
|
|
11
11
|
MIN_VALUE,
|
|
12
12
|
castType: castTypeImpl,
|
|
13
|
-
|
|
13
|
+
fromNumber: fromNumberImpl,
|
|
14
14
|
is: isImpl,
|
|
15
15
|
random: randomImpl,
|
|
16
16
|
} = TsDataForgeInternals.RefinedNumberUtils.operatorsForInteger<Uint16, 0, 255>(
|
|
@@ -28,7 +28,7 @@ const castType = (x: number): Uint8 =>
|
|
|
28
28
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
29
29
|
castTypeImpl(x) as Uint8;
|
|
30
30
|
|
|
31
|
-
const
|
|
31
|
+
const fromNumber = (a: number): Uint8 => castType(fromNumberImpl(a));
|
|
32
32
|
|
|
33
33
|
const min_ = (...values: readonly Uint8[]): Uint8 =>
|
|
34
34
|
castType(Math.min(...values));
|
|
@@ -36,146 +36,154 @@ const min_ = (...values: readonly Uint8[]): Uint8 =>
|
|
|
36
36
|
const max_ = (...values: readonly Uint8[]): Uint8 =>
|
|
37
37
|
castType(Math.max(...values));
|
|
38
38
|
|
|
39
|
-
const pow = (x: Uint8, y: Uint8): Uint8 =>
|
|
39
|
+
const pow = (x: Uint8, y: Uint8): Uint8 => fromNumber(x ** y);
|
|
40
40
|
|
|
41
|
-
const add = (x: Uint8, y: Uint8): Uint8 =>
|
|
41
|
+
const add = (x: Uint8, y: Uint8): Uint8 => fromNumber(x + y);
|
|
42
42
|
|
|
43
|
-
const sub = (x: Uint8, y: Uint8): Uint8 =>
|
|
43
|
+
const sub = (x: Uint8, y: Uint8): Uint8 => fromNumber(x - y);
|
|
44
44
|
|
|
45
|
-
const mul = (x: Uint8, y: Uint8): Uint8 =>
|
|
45
|
+
const mul = (x: Uint8, y: Uint8): Uint8 => fromNumber(x * y);
|
|
46
46
|
|
|
47
|
-
const div = (x: Uint8, y: Exclude<Uint8, 0>): Uint8 =>
|
|
47
|
+
const div = (x: Uint8, y: Exclude<Uint8, 0>): Uint8 =>
|
|
48
|
+
fromNumber(Math.floor(x / y));
|
|
48
49
|
|
|
49
50
|
const random = (min: Uint8, max: Uint8): Uint8 =>
|
|
50
51
|
castType(randomImpl(castTypeImpl(min), castTypeImpl(max)));
|
|
51
52
|
|
|
52
53
|
/**
|
|
53
|
-
*
|
|
54
|
+
* Type guard that checks if a value is an non-negative integer less than 256.
|
|
54
55
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
56
|
+
* Returns `true` for an non-negative integer less than 256 — a value with no
|
|
57
|
+
* fractional component.
|
|
58
|
+
*
|
|
59
|
+
* @param value - The value to check
|
|
60
|
+
* @returns `true` if the value is an non-negative integer less than 256, `false` otherwise
|
|
57
61
|
*/
|
|
58
62
|
export const isUint8 = is;
|
|
59
63
|
|
|
60
64
|
/**
|
|
61
|
-
* Casts a number to
|
|
62
|
-
*
|
|
63
|
-
*
|
|
65
|
+
* Casts a `number` to the `Uint8` branded type.
|
|
66
|
+
*
|
|
67
|
+
* Validates that the value is an non-negative integer less than 256 and returns
|
|
68
|
+
* it with the `Uint8` brand. Throws a `TypeError` otherwise.
|
|
64
69
|
*
|
|
65
|
-
* @param value The value to cast
|
|
66
|
-
* @returns The value as
|
|
67
|
-
* @throws {TypeError} If the value is not
|
|
70
|
+
* @param value - The value to cast
|
|
71
|
+
* @returns The value as an `Uint8`
|
|
72
|
+
* @throws {TypeError} If the value is not an non-negative integer less than 256
|
|
68
73
|
*/
|
|
69
74
|
export const asUint8 = castType;
|
|
70
75
|
|
|
71
76
|
/**
|
|
72
|
-
* Namespace providing type-safe
|
|
73
|
-
* integers.
|
|
77
|
+
* Namespace providing type-safe operations for the `Uint8` branded type.
|
|
74
78
|
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* constraint, with negative results clamped to 0 and overflow results clamped
|
|
78
|
-
* to MAX_VALUE.
|
|
79
|
+
* The `Uint8` type represents an non-negative integer less than 256. Division
|
|
80
|
+
* (`div`) uses floor division.
|
|
79
81
|
*/
|
|
80
82
|
export const Uint8 = {
|
|
81
83
|
/**
|
|
82
|
-
* Type guard that checks if a value is an
|
|
84
|
+
* Type guard that checks if a value is an non-negative integer less than 256.
|
|
83
85
|
*
|
|
84
|
-
* @param value The value to check
|
|
85
|
-
* @returns `true` if the value is an
|
|
86
|
-
*
|
|
86
|
+
* @param value - The value to check
|
|
87
|
+
* @returns `true` if the value is an non-negative integer less than 256, `false` otherwise
|
|
88
|
+
* @see {@link isUint8} for usage examples
|
|
87
89
|
*/
|
|
88
90
|
is,
|
|
89
91
|
|
|
90
92
|
/**
|
|
91
|
-
* The
|
|
92
|
-
*
|
|
93
|
-
* @readonly
|
|
93
|
+
* The smallest value representable as `Uint8` (the lower saturation target of
|
|
94
|
+
* `fromNumber`).
|
|
94
95
|
*/
|
|
95
96
|
MIN_VALUE,
|
|
96
97
|
|
|
97
98
|
/**
|
|
98
|
-
* The
|
|
99
|
-
*
|
|
100
|
-
* @readonly
|
|
99
|
+
* The largest value representable as `Uint8` (the upper saturation target of
|
|
100
|
+
* `fromNumber`).
|
|
101
101
|
*/
|
|
102
102
|
MAX_VALUE,
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
|
-
* Returns the
|
|
105
|
+
* Returns the largest of the given non-negative integers.
|
|
106
106
|
*
|
|
107
|
-
* @param values The
|
|
108
|
-
* @returns The
|
|
107
|
+
* @param values - The non-negative integers to compare (at least one required)
|
|
108
|
+
* @returns The largest value as an `Uint8`
|
|
109
109
|
*/
|
|
110
110
|
max: max_,
|
|
111
111
|
|
|
112
112
|
/**
|
|
113
|
-
* Returns the
|
|
113
|
+
* Returns the smallest of the given non-negative integers.
|
|
114
114
|
*
|
|
115
|
-
* @param values The
|
|
116
|
-
* @returns The
|
|
115
|
+
* @param values - The non-negative integers to compare (at least one required)
|
|
116
|
+
* @returns The smallest value as an `Uint8`
|
|
117
117
|
*/
|
|
118
118
|
min: min_,
|
|
119
119
|
|
|
120
120
|
/**
|
|
121
|
-
*
|
|
121
|
+
* Converts an arbitrary `number` into an `Uint8`, rounding to the nearest
|
|
122
|
+
* integer and saturating the result into the range `[MIN_VALUE, MAX_VALUE]`.
|
|
123
|
+
*
|
|
124
|
+
* Unlike `asUint8`, this is total: out-of-range inputs are clamped to the
|
|
125
|
+
* nearest representable `Uint8` instead of throwing.
|
|
122
126
|
*
|
|
123
|
-
* @param value The
|
|
124
|
-
* @returns The value
|
|
127
|
+
* @param value - The value to convert
|
|
128
|
+
* @returns The value as an `Uint8`
|
|
125
129
|
*/
|
|
126
|
-
|
|
130
|
+
fromNumber,
|
|
127
131
|
|
|
128
132
|
/**
|
|
129
|
-
* Generates a random Uint8
|
|
133
|
+
* Generates a random `Uint8` within the given range.
|
|
134
|
+
*
|
|
135
|
+
* The range is inclusive on both ends.
|
|
130
136
|
*
|
|
131
|
-
* @param min The minimum value (inclusive)
|
|
132
|
-
* @param max The maximum value (inclusive)
|
|
133
|
-
* @returns A random Uint8
|
|
137
|
+
* @param min - The minimum value (inclusive)
|
|
138
|
+
* @param max - The maximum value (inclusive)
|
|
139
|
+
* @returns A random `Uint8` in `[min, max]`
|
|
134
140
|
*/
|
|
135
141
|
random,
|
|
136
142
|
|
|
137
143
|
/**
|
|
138
|
-
* Raises
|
|
144
|
+
* Raises `a` to the power `b`, returning `a ** b` as an `Uint8` (floored to
|
|
145
|
+
* an integer).
|
|
139
146
|
*
|
|
140
|
-
* @param
|
|
141
|
-
* @param
|
|
142
|
-
* @returns `
|
|
147
|
+
* @param a - The base non-negative integer
|
|
148
|
+
* @param b - The exponent non-negative integer
|
|
149
|
+
* @returns `a ** b` as an `Uint8`
|
|
143
150
|
*/
|
|
144
151
|
pow,
|
|
145
152
|
|
|
146
153
|
/**
|
|
147
|
-
* Adds two
|
|
154
|
+
* Adds two non-negative integers, returning `a + b` as an `Uint8`.
|
|
148
155
|
*
|
|
149
|
-
* @param
|
|
150
|
-
* @param
|
|
151
|
-
* @returns `
|
|
156
|
+
* @param a - The first non-negative integer
|
|
157
|
+
* @param b - The second non-negative integer
|
|
158
|
+
* @returns The sum of `a` and `b` as an `Uint8`
|
|
152
159
|
*/
|
|
153
160
|
add,
|
|
154
161
|
|
|
155
162
|
/**
|
|
156
|
-
* Subtracts two
|
|
163
|
+
* Subtracts two non-negative integers, returning `a - b` as an `Uint8`.
|
|
157
164
|
*
|
|
158
|
-
* @param
|
|
159
|
-
* @param
|
|
160
|
-
* @returns `
|
|
165
|
+
* @param a - The first non-negative integer
|
|
166
|
+
* @param b - The second non-negative integer
|
|
167
|
+
* @returns The difference of `a` and `b` as an `Uint8`
|
|
161
168
|
*/
|
|
162
169
|
sub,
|
|
163
170
|
|
|
164
171
|
/**
|
|
165
|
-
* Multiplies two
|
|
172
|
+
* Multiplies two non-negative integers, returning `a * b` as an `Uint8`.
|
|
166
173
|
*
|
|
167
|
-
* @param
|
|
168
|
-
* @param
|
|
169
|
-
* @returns `
|
|
174
|
+
* @param a - The first non-negative integer
|
|
175
|
+
* @param b - The second non-negative integer
|
|
176
|
+
* @returns The product of `a` and `b` as an `Uint8`
|
|
170
177
|
*/
|
|
171
178
|
mul,
|
|
172
179
|
|
|
173
180
|
/**
|
|
174
|
-
* Divides two
|
|
181
|
+
* Divides two non-negative integers using floor division (`⌊a / b⌋`): the
|
|
182
|
+
* result is `a / b` rounded toward negative infinity, as an `Uint8`.
|
|
175
183
|
*
|
|
176
|
-
* @param
|
|
177
|
-
* @param
|
|
178
|
-
* @returns
|
|
184
|
+
* @param a - The dividend
|
|
185
|
+
* @param b - The divisor (must be non-zero)
|
|
186
|
+
* @returns The floored quotient as an `Uint8`
|
|
179
187
|
*/
|
|
180
188
|
div,
|
|
181
189
|
} as const;
|
|
@@ -61,7 +61,7 @@ describe('Uint8 test', () => {
|
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
describe('Uint8.
|
|
64
|
+
describe('Uint8.fromNumber', () => {
|
|
65
65
|
test.each([
|
|
66
66
|
{ value: -100, expected: 0 },
|
|
67
67
|
{ value: 0, expected: 0 },
|
|
@@ -69,9 +69,12 @@ describe('Uint8 test', () => {
|
|
|
69
69
|
{ value: 255, expected: 255 },
|
|
70
70
|
{ value: 300, expected: 255 },
|
|
71
71
|
{ value: 1.5, expected: 2 },
|
|
72
|
-
])(
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
])(
|
|
73
|
+
'Uint8.fromNumber($value) should return $expected',
|
|
74
|
+
({ expected, value }) => {
|
|
75
|
+
expect(Uint8.fromNumber(value)).toBe(expected);
|
|
76
|
+
},
|
|
77
|
+
);
|
|
75
78
|
});
|
|
76
79
|
|
|
77
80
|
describe('Uint8.min', () => {
|
|
@@ -144,7 +144,7 @@ export namespace TsDataForgeInternals {
|
|
|
144
144
|
('non-negative' extends classes
|
|
145
145
|
? Readonly<{
|
|
146
146
|
MIN_VALUE: number;
|
|
147
|
-
|
|
147
|
+
fromNumber: (a: number) => N;
|
|
148
148
|
}>
|
|
149
149
|
: unknown) &
|
|
150
150
|
('non-negative' extends classes
|
|
@@ -157,14 +157,14 @@ export namespace TsDataForgeInternals {
|
|
|
157
157
|
('positive' extends classes
|
|
158
158
|
? Readonly<{
|
|
159
159
|
MIN_VALUE: number;
|
|
160
|
-
|
|
160
|
+
fromNumber: (a: number) => N;
|
|
161
161
|
}>
|
|
162
162
|
: unknown) &
|
|
163
163
|
('range' extends classes
|
|
164
164
|
? Readonly<{
|
|
165
165
|
MIN_VALUE: number;
|
|
166
166
|
MAX_VALUE: number;
|
|
167
|
-
|
|
167
|
+
fromNumber: (a: number) => N;
|
|
168
168
|
}>
|
|
169
169
|
: unknown) &
|
|
170
170
|
Pick<
|
|
@@ -200,17 +200,17 @@ export namespace TsDataForgeInternals {
|
|
|
200
200
|
|
|
201
201
|
expectType<
|
|
202
202
|
keyof NumberClass<UnknownNumberBrand, 'non-negative'>,
|
|
203
|
-
BaseKeys | FloatMethods | '
|
|
203
|
+
BaseKeys | FloatMethods | 'fromNumber' | 'MIN_VALUE'
|
|
204
204
|
>('=');
|
|
205
205
|
|
|
206
206
|
expectType<
|
|
207
207
|
keyof NumberClass<UnknownNumberBrand, 'positive'>,
|
|
208
|
-
BaseKeys | FloatMethods | '
|
|
208
|
+
BaseKeys | FloatMethods | 'fromNumber' | 'MIN_VALUE'
|
|
209
209
|
>('=');
|
|
210
210
|
|
|
211
211
|
expectType<
|
|
212
212
|
keyof NumberClass<UnknownNumberBrand, 'int' | 'range'>,
|
|
213
|
-
BaseKeys | 'abs' | '
|
|
213
|
+
BaseKeys | 'abs' | 'fromNumber' | 'MAX_VALUE' | 'MIN_VALUE'
|
|
214
214
|
>('=');
|
|
215
215
|
|
|
216
216
|
const isFnOrUndefined = (
|
|
@@ -292,7 +292,7 @@ export namespace TsDataForgeInternals {
|
|
|
292
292
|
|
|
293
293
|
castType: <N extends number>(x: N) => ElementType & N;
|
|
294
294
|
|
|
295
|
-
|
|
295
|
+
fromNumber: TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
|
|
296
296
|
? undefined
|
|
297
297
|
: (x: number) => ElementType;
|
|
298
298
|
}>;
|
|
@@ -337,7 +337,7 @@ export namespace TsDataForgeInternals {
|
|
|
337
337
|
*
|
|
338
338
|
* const quotient = intOps.div(six, intOps.castType(2));
|
|
339
339
|
*
|
|
340
|
-
* const
|
|
340
|
+
* const coerced = intOps.fromNumber(1.5);
|
|
341
341
|
*
|
|
342
342
|
* const randomValue = intOps.random();
|
|
343
343
|
*
|
|
@@ -349,7 +349,7 @@ export namespace TsDataForgeInternals {
|
|
|
349
349
|
*
|
|
350
350
|
* assert.isTrue(quotient === 3);
|
|
351
351
|
*
|
|
352
|
-
* assert.isTrue(
|
|
352
|
+
* assert.isTrue(coerced === 2);
|
|
353
353
|
*
|
|
354
354
|
* assert.isTrue(Number.isSafeInteger(randomValue));
|
|
355
355
|
* ```
|
|
@@ -396,7 +396,7 @@ export namespace TsDataForgeInternals {
|
|
|
396
396
|
|
|
397
397
|
const castType = castTypeImpl<ElementType>(is, typeNameInMessage);
|
|
398
398
|
|
|
399
|
-
const
|
|
399
|
+
const fromNumber: ((a: number) => ElementType) | undefined = pipe(
|
|
400
400
|
clampFnOrUndefined(MIN_VALUE, MAX_VALUE),
|
|
401
401
|
).mapNullable(
|
|
402
402
|
(cl) =>
|
|
@@ -404,7 +404,7 @@ export namespace TsDataForgeInternals {
|
|
|
404
404
|
castType(Math.round(cl(x))),
|
|
405
405
|
).value;
|
|
406
406
|
|
|
407
|
-
const clampOrCastFn: (a: number) => ElementType =
|
|
407
|
+
const clampOrCastFn: (a: number) => ElementType = fromNumber ?? castType;
|
|
408
408
|
|
|
409
409
|
const abs = (x: ElementTypeWithSmallInt): ToNonNegative<ElementType> =>
|
|
410
410
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
@@ -488,9 +488,9 @@ export namespace TsDataForgeInternals {
|
|
|
488
488
|
randomNonZero,
|
|
489
489
|
castType,
|
|
490
490
|
|
|
491
|
-
|
|
491
|
+
fromNumber:
|
|
492
492
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
493
|
-
|
|
493
|
+
fromNumber as TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
|
|
494
494
|
? undefined
|
|
495
495
|
: (x: number) => ElementType,
|
|
496
496
|
} as const;
|
|
@@ -519,7 +519,7 @@ export namespace TsDataForgeInternals {
|
|
|
519
519
|
|
|
520
520
|
castType: <N extends number>(x: N) => ElementType & N;
|
|
521
521
|
|
|
522
|
-
|
|
522
|
+
fromNumber: TypeEq<MAX_VALUE | MIN_VALUE, undefined> extends true
|
|
523
523
|
? undefined
|
|
524
524
|
: (x: number) => ElementType;
|
|
525
525
|
}>;
|
|
@@ -560,7 +560,7 @@ export namespace TsDataForgeInternals {
|
|
|
560
560
|
*
|
|
561
561
|
* const ratio = floatOps.div(sum, floatOps.castType(10));
|
|
562
562
|
*
|
|
563
|
-
* const
|
|
563
|
+
* const coerced = floatOps.fromNumber(0);
|
|
564
564
|
*
|
|
565
565
|
* const boundedRandom = floatOps.random(
|
|
566
566
|
* floatOps.castType(10),
|
|
@@ -573,7 +573,7 @@ export namespace TsDataForgeInternals {
|
|
|
573
573
|
*
|
|
574
574
|
* assert.isTrue(ratio === 5);
|
|
575
575
|
*
|
|
576
|
-
* assert.isTrue(
|
|
576
|
+
* assert.isTrue(coerced >= Number.MIN_VALUE);
|
|
577
577
|
*
|
|
578
578
|
* assert.isTrue(boundedRandom >= 10 && boundedRandom <= 20);
|
|
579
579
|
*
|
|
@@ -615,7 +615,7 @@ export namespace TsDataForgeInternals {
|
|
|
615
615
|
|
|
616
616
|
const castType = castTypeImpl<ElementType>(is, typeNameInMessage);
|
|
617
617
|
|
|
618
|
-
const
|
|
618
|
+
const fromNumber: ((a: number) => ElementType) | undefined = pipe(
|
|
619
619
|
clampFnOrUndefined(MIN_VALUE, MAX_VALUE),
|
|
620
620
|
).mapNullable(
|
|
621
621
|
(cl) =>
|
|
@@ -623,7 +623,7 @@ export namespace TsDataForgeInternals {
|
|
|
623
623
|
castType(cl(x)),
|
|
624
624
|
).value;
|
|
625
625
|
|
|
626
|
-
const clampOrCastFn: (a: number) => ElementType =
|
|
626
|
+
const clampOrCastFn: (a: number) => ElementType = fromNumber ?? castType;
|
|
627
627
|
|
|
628
628
|
const abs = (x: ElementType): ToNonNegative<ElementType> =>
|
|
629
629
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
@@ -687,7 +687,10 @@ export namespace TsDataForgeInternals {
|
|
|
687
687
|
castType,
|
|
688
688
|
|
|
689
689
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
690
|
-
|
|
690
|
+
fromNumber: fromNumber as TypeEq<
|
|
691
|
+
MAX_VALUE | MIN_VALUE,
|
|
692
|
+
undefined
|
|
693
|
+
> extends true
|
|
691
694
|
? undefined
|
|
692
695
|
: (x: number) => ElementType,
|
|
693
696
|
} as const;
|