ts-data-forge 7.0.1 → 7.1.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/dist/array/impl/array-utils-validation.d.mts +41 -1
- package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-validation.mjs +41 -1
- package/dist/array/impl/array-utils-validation.mjs.map +1 -1
- package/dist/array/impl/index.mjs +1 -1
- package/package.json +1 -1
- package/src/array/impl/array-utils-validation.mts +56 -0
- package/src/array/impl/array-utils-validation.test.mts +160 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ArrayAtLeastLen, type ArrayOfLength, type BoolOr, type NonEmptyArray, type TypeEq } from 'ts-type-forge';
|
|
1
|
+
import { type ArrayAtLeastLen, type ArrayAtMostLen, type ArrayBoundedLen, type ArrayOfLength, type BoolOr, type NonEmptyArray, type TypeEq } from 'ts-type-forge';
|
|
2
2
|
import { type ArrayIndex, type SizeType } from '../../types.mjs';
|
|
3
3
|
/**
|
|
4
4
|
* Type guard that checks if a value is an array.
|
|
@@ -102,6 +102,46 @@ export declare const isArrayOfLength: <E, N extends SizeType.ArgArr>(array: read
|
|
|
102
102
|
* ```
|
|
103
103
|
*/
|
|
104
104
|
export declare const isArrayAtLeastLength: <E, N extends SizeType.ArgArr>(array: readonly E[], len: N) => array is ArrayAtLeastLen<N, E>;
|
|
105
|
+
/**
|
|
106
|
+
* Checks if an array has at most a specific length.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
*
|
|
110
|
+
* ```ts
|
|
111
|
+
* const pair: readonly number[] = [1, 2] as const;
|
|
112
|
+
*
|
|
113
|
+
* const triple: readonly number[] = [1, 2, 3] as const;
|
|
114
|
+
*
|
|
115
|
+
* assert.isTrue(Arr.isArrayAtMostLength(pair, 2));
|
|
116
|
+
*
|
|
117
|
+
* assert.isFalse(Arr.isArrayAtMostLength(triple, 2));
|
|
118
|
+
*
|
|
119
|
+
* if (Arr.isArrayAtMostLength(pair, 2)) {
|
|
120
|
+
* assert.isTrue(pair.length <= 2);
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare const isArrayAtMostLength: <E, N extends SizeType.ArgArr>(array: readonly E[], len: N) => array is ArrayAtMostLen<N, E>;
|
|
125
|
+
/**
|
|
126
|
+
* Checks if an array's length is within a specific inclusive range.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
*
|
|
130
|
+
* ```ts
|
|
131
|
+
* const pair: readonly number[] = [1, 2] as const;
|
|
132
|
+
*
|
|
133
|
+
* const quad: readonly number[] = [1, 2, 3, 4] as const;
|
|
134
|
+
*
|
|
135
|
+
* assert.isTrue(Arr.isArrayBoundedLength(pair, 1, 3));
|
|
136
|
+
*
|
|
137
|
+
* assert.isFalse(Arr.isArrayBoundedLength(quad, 1, 3));
|
|
138
|
+
*
|
|
139
|
+
* if (Arr.isArrayBoundedLength(pair, 1, 3)) {
|
|
140
|
+
* assert.isTrue(pair.length >= 1 && pair.length <= 3);
|
|
141
|
+
* }
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export declare const isArrayBoundedLength: <E, Min extends SizeType.ArgArr, Max extends SizeType.ArgArr>(array: readonly E[], min: Min, max: Max) => array is ArrayBoundedLen<Min, Max, E>;
|
|
105
145
|
/**
|
|
106
146
|
* Tests whether all elements in an array pass a test implemented by a predicate.
|
|
107
147
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-utils-validation.d.mts","sourceRoot":"","sources":["../../../src/array/impl/array-utils-validation.mts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"array-utils-validation.d.mts","sourceRoot":"","sources":["../../../src/array/impl/array-utils-validation.mts"],"names":[],"mappings":"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"}
|
|
@@ -136,6 +136,46 @@ const isArrayOfLength = (array, len) => array.length === len;
|
|
|
136
136
|
* ```
|
|
137
137
|
*/
|
|
138
138
|
const isArrayAtLeastLength = (array, len) => array.length >= len;
|
|
139
|
+
/**
|
|
140
|
+
* Checks if an array has at most a specific length.
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
*
|
|
144
|
+
* ```ts
|
|
145
|
+
* const pair: readonly number[] = [1, 2] as const;
|
|
146
|
+
*
|
|
147
|
+
* const triple: readonly number[] = [1, 2, 3] as const;
|
|
148
|
+
*
|
|
149
|
+
* assert.isTrue(Arr.isArrayAtMostLength(pair, 2));
|
|
150
|
+
*
|
|
151
|
+
* assert.isFalse(Arr.isArrayAtMostLength(triple, 2));
|
|
152
|
+
*
|
|
153
|
+
* if (Arr.isArrayAtMostLength(pair, 2)) {
|
|
154
|
+
* assert.isTrue(pair.length <= 2);
|
|
155
|
+
* }
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
const isArrayAtMostLength = (array, len) => array.length <= len;
|
|
159
|
+
/**
|
|
160
|
+
* Checks if an array's length is within a specific inclusive range.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
*
|
|
164
|
+
* ```ts
|
|
165
|
+
* const pair: readonly number[] = [1, 2] as const;
|
|
166
|
+
*
|
|
167
|
+
* const quad: readonly number[] = [1, 2, 3, 4] as const;
|
|
168
|
+
*
|
|
169
|
+
* assert.isTrue(Arr.isArrayBoundedLength(pair, 1, 3));
|
|
170
|
+
*
|
|
171
|
+
* assert.isFalse(Arr.isArrayBoundedLength(quad, 1, 3));
|
|
172
|
+
*
|
|
173
|
+
* if (Arr.isArrayBoundedLength(pair, 1, 3)) {
|
|
174
|
+
* assert.isTrue(pair.length >= 1 && pair.length <= 3);
|
|
175
|
+
* }
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
const isArrayBoundedLength = (array, min, max) => array.length >= min && array.length <= max;
|
|
139
179
|
function every(...args) {
|
|
140
180
|
switch (args.length) {
|
|
141
181
|
case 2: {
|
|
@@ -179,5 +219,5 @@ function some(...args) {
|
|
|
179
219
|
*/
|
|
180
220
|
const indexIsInRange = (array, index) => Num.isInRange(0, array.length)(index);
|
|
181
221
|
|
|
182
|
-
export { every, indexIsInRange, isArray, isArrayAtLeastLength, isArrayOfLength, isEmpty, isNonEmpty, some };
|
|
222
|
+
export { every, indexIsInRange, isArray, isArrayAtLeastLength, isArrayAtMostLength, isArrayBoundedLength, isArrayOfLength, isEmpty, isNonEmpty, some };
|
|
183
223
|
//# sourceMappingURL=array-utils-validation.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-utils-validation.mjs","sources":["../../../src/array/impl/array-utils-validation.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"array-utils-validation.mjs","sources":["../../../src/array/impl/array-utils-validation.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,OAAO,GAAG,CAAK,KAAQ,KAClC,KAAK,CAAC,OAAO,CAAC,KAAK;AAarB;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,OAAO,GAAG,CAAK,KAAmB,KAC7C,KAAK,CAAC,MAAM,KAAK;AAEnB;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,UAAU,GAAG,CACxB,KAAmB,KACW,KAAK,CAAC,MAAM,GAAG;AAE/C;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,eAAe,GAAG,CAC7B,KAAmB,EACnB,GAAM,KAC2B,KAAK,CAAC,MAAM,KAAK;AAEpD;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,oBAAoB,GAAG,CAClC,KAAmB,EACnB,GAAM,KAC6B,KAAK,CAAC,MAAM,IAAI;AAErD;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,mBAAmB,GAAG,CACjC,KAAmB,EACnB,GAAM,KAC4B,KAAK,CAAC,MAAM,IAAI;AAEpD;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,oBAAoB,GAAG,CAKlC,KAAmB,EACnB,GAAQ,EACR,GAAQ,KAER,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI;AAyCnC,SAAU,KAAK,CACnB,GAAG,IAK6D,EAAA;AAEhE,IAAA,QAAQ,IAAI,CAAC,MAAM;QACjB,KAAK,CAAC,EAAE;AACN,YAAA,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,IAAI;YAE/B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD;QAEA,KAAK,CAAC,EAAE;AACN,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI;YAExB,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;QAC3C;;AAEJ;AA8BM,SAAU,IAAI,CAClB,GAAG,IAK6D,EAAA;AAEhE,IAAA,QAAQ,IAAI,CAAC,MAAM;QACjB,KAAK,CAAC,EAAE;AACN,YAAA,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,IAAI;YAE/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD;QAEA,KAAK,CAAC,EAAE;AACN,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI;YAExB,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;QAC1C;;AAEJ;AAEA;;;;;;;;;;;;;;;;AAgBG;AACI,MAAM,cAAc,GAAG,CAC5B,KAAmB,EACnB,KAAsB,KACV,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK;;;;"}
|
|
@@ -9,5 +9,5 @@ export { length, size } from './array-utils-size.mjs';
|
|
|
9
9
|
export { sliceClamped } from './array-utils-slice-clamped.mjs';
|
|
10
10
|
export { butLast, drop, rest, skip, skipLast, tail, take, takeLast } from './array-utils-slicing.mjs';
|
|
11
11
|
export { cartesianProduct, chunk, concat, filter, filterNot, flat, flatMap, groupBy, map, partition, scan, toReversed, toSorted, toSortedBy, uniq, uniqBy, zip } from './array-utils-transformation.mjs';
|
|
12
|
-
export { every, indexIsInRange, isArray, isArrayAtLeastLength, isArrayOfLength, isEmpty, isNonEmpty, some } from './array-utils-validation.mjs';
|
|
12
|
+
export { every, indexIsInRange, isArray, isArrayAtLeastLength, isArrayAtMostLength, isArrayBoundedLength, isArrayOfLength, isEmpty, isNonEmpty, some } from './array-utils-validation.mjs';
|
|
13
13
|
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type ArrayAtLeastLen,
|
|
3
|
+
type ArrayAtMostLen,
|
|
4
|
+
type ArrayBoundedLen,
|
|
3
5
|
type ArrayOfLength,
|
|
4
6
|
type BoolOr,
|
|
5
7
|
type NonEmptyArray,
|
|
@@ -136,6 +138,60 @@ export const isArrayAtLeastLength = <E, N extends SizeType.ArgArr>(
|
|
|
136
138
|
len: N,
|
|
137
139
|
): array is ArrayAtLeastLen<N, E> => array.length >= len;
|
|
138
140
|
|
|
141
|
+
/**
|
|
142
|
+
* Checks if an array has at most a specific length.
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
*
|
|
146
|
+
* ```ts
|
|
147
|
+
* const pair: readonly number[] = [1, 2] as const;
|
|
148
|
+
*
|
|
149
|
+
* const triple: readonly number[] = [1, 2, 3] as const;
|
|
150
|
+
*
|
|
151
|
+
* assert.isTrue(Arr.isArrayAtMostLength(pair, 2));
|
|
152
|
+
*
|
|
153
|
+
* assert.isFalse(Arr.isArrayAtMostLength(triple, 2));
|
|
154
|
+
*
|
|
155
|
+
* if (Arr.isArrayAtMostLength(pair, 2)) {
|
|
156
|
+
* assert.isTrue(pair.length <= 2);
|
|
157
|
+
* }
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export const isArrayAtMostLength = <E, N extends SizeType.ArgArr>(
|
|
161
|
+
array: readonly E[],
|
|
162
|
+
len: N,
|
|
163
|
+
): array is ArrayAtMostLen<N, E> => array.length <= len;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Checks if an array's length is within a specific inclusive range.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
*
|
|
170
|
+
* ```ts
|
|
171
|
+
* const pair: readonly number[] = [1, 2] as const;
|
|
172
|
+
*
|
|
173
|
+
* const quad: readonly number[] = [1, 2, 3, 4] as const;
|
|
174
|
+
*
|
|
175
|
+
* assert.isTrue(Arr.isArrayBoundedLength(pair, 1, 3));
|
|
176
|
+
*
|
|
177
|
+
* assert.isFalse(Arr.isArrayBoundedLength(quad, 1, 3));
|
|
178
|
+
*
|
|
179
|
+
* if (Arr.isArrayBoundedLength(pair, 1, 3)) {
|
|
180
|
+
* assert.isTrue(pair.length >= 1 && pair.length <= 3);
|
|
181
|
+
* }
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
export const isArrayBoundedLength = <
|
|
185
|
+
E,
|
|
186
|
+
Min extends SizeType.ArgArr,
|
|
187
|
+
Max extends SizeType.ArgArr,
|
|
188
|
+
>(
|
|
189
|
+
array: readonly E[],
|
|
190
|
+
min: Min,
|
|
191
|
+
max: Max,
|
|
192
|
+
): array is ArrayBoundedLen<Min, Max, E> =>
|
|
193
|
+
array.length >= min && array.length <= max;
|
|
194
|
+
|
|
139
195
|
/**
|
|
140
196
|
* Tests whether all elements in an array pass a test implemented by a predicate.
|
|
141
197
|
*
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type ArrayAtLeastLen,
|
|
3
|
+
type ArrayAtMostLen,
|
|
4
|
+
type ArrayBoundedLen,
|
|
5
|
+
type ArrayOfLength,
|
|
6
|
+
} from 'ts-type-forge';
|
|
2
7
|
import { expectType } from '../../expect-type.mjs';
|
|
3
8
|
import {
|
|
4
9
|
every,
|
|
5
10
|
indexIsInRange,
|
|
6
11
|
isArray,
|
|
7
12
|
isArrayAtLeastLength,
|
|
13
|
+
isArrayAtMostLength,
|
|
14
|
+
isArrayBoundedLength,
|
|
8
15
|
isArrayOfLength,
|
|
9
16
|
isEmpty,
|
|
10
17
|
isNonEmpty,
|
|
@@ -584,6 +591,158 @@ describe('Arr validations', () => {
|
|
|
584
591
|
});
|
|
585
592
|
});
|
|
586
593
|
|
|
594
|
+
describe(isArrayAtMostLength, () => {
|
|
595
|
+
test('should return true if array length is less than or equal to specified length', () => {
|
|
596
|
+
const arr = [1, 2, 3] as const;
|
|
597
|
+
|
|
598
|
+
assert.isTrue(isArrayAtMostLength(arr, 3));
|
|
599
|
+
|
|
600
|
+
if (isArrayAtMostLength(arr, 3)) {
|
|
601
|
+
expectType<typeof arr, readonly [1, 2, 3]>('=');
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
assert.isTrue(isArrayAtMostLength(arr, 4));
|
|
605
|
+
|
|
606
|
+
if (isArrayAtMostLength(arr, 4)) {
|
|
607
|
+
expectType<typeof arr, readonly [1, 2, 3]>('=');
|
|
608
|
+
}
|
|
609
|
+
});
|
|
610
|
+
|
|
611
|
+
test('should return false if array length is greater than specified length', () => {
|
|
612
|
+
const arr = [1, 2, 3] as const;
|
|
613
|
+
|
|
614
|
+
assert.isFalse(isArrayAtMostLength(arr, 2));
|
|
615
|
+
});
|
|
616
|
+
|
|
617
|
+
test('should return true for empty array and length 0', () => {
|
|
618
|
+
const arr = [] as const;
|
|
619
|
+
|
|
620
|
+
assert.isTrue(isArrayAtMostLength(arr, 0));
|
|
621
|
+
|
|
622
|
+
if (isArrayAtMostLength(arr, 0)) {
|
|
623
|
+
expectType<typeof arr, readonly []>('=');
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
|
|
627
|
+
test('should return false for non-empty array and length 0', () => {
|
|
628
|
+
const arr = [1] as const;
|
|
629
|
+
|
|
630
|
+
assert.isFalse(isArrayAtMostLength(arr, 0));
|
|
631
|
+
});
|
|
632
|
+
|
|
633
|
+
test('should work with unknown array type', () => {
|
|
634
|
+
const mut_arr: number[] = [1, 2];
|
|
635
|
+
|
|
636
|
+
assert.isTrue(isArrayAtMostLength(mut_arr, 2));
|
|
637
|
+
|
|
638
|
+
// transformer-ignore-next-line
|
|
639
|
+
expectType<typeof mut_arr, number[] & ArrayAtMostLen<2, number>>('=');
|
|
640
|
+
|
|
641
|
+
assert.isFalse(isArrayAtMostLength(mut_arr, 1));
|
|
642
|
+
});
|
|
643
|
+
|
|
644
|
+
test('should return true for arrays of at most specified length (additional)', () => {
|
|
645
|
+
assert.isTrue(isArrayAtMostLength([1, 2, 3], 3));
|
|
646
|
+
|
|
647
|
+
assert.isTrue(isArrayAtMostLength([1, 2, 3], 4));
|
|
648
|
+
|
|
649
|
+
assert.isTrue(isArrayAtMostLength([], 0));
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
test('should return false for arrays longer than specified length (additional)', () => {
|
|
653
|
+
assert.isFalse(isArrayAtMostLength([1, 2, 3], 2));
|
|
654
|
+
|
|
655
|
+
assert.isFalse(isArrayAtMostLength([1, 2, 3], 0));
|
|
656
|
+
});
|
|
657
|
+
|
|
658
|
+
test('should work as type guard for at most length (additional)', () => {
|
|
659
|
+
const array: readonly number[] = [1, 2] as const;
|
|
660
|
+
|
|
661
|
+
if (isArrayAtMostLength(array, 3)) {
|
|
662
|
+
expectType<typeof array, ArrayAtMostLen<3, number>>('=');
|
|
663
|
+
|
|
664
|
+
expect(array.length).toBeLessThanOrEqual(3);
|
|
665
|
+
}
|
|
666
|
+
});
|
|
667
|
+
});
|
|
668
|
+
|
|
669
|
+
describe(isArrayBoundedLength, () => {
|
|
670
|
+
test('should return true if array length is within the specified range', () => {
|
|
671
|
+
const arr = [1, 2, 3] as const;
|
|
672
|
+
|
|
673
|
+
assert.isTrue(isArrayBoundedLength(arr, 1, 3));
|
|
674
|
+
|
|
675
|
+
if (isArrayBoundedLength(arr, 1, 3)) {
|
|
676
|
+
expectType<typeof arr, readonly [1, 2, 3]>('=');
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
assert.isTrue(isArrayBoundedLength(arr, 3, 5));
|
|
680
|
+
|
|
681
|
+
if (isArrayBoundedLength(arr, 3, 5)) {
|
|
682
|
+
expectType<typeof arr, readonly [1, 2, 3]>('=');
|
|
683
|
+
}
|
|
684
|
+
});
|
|
685
|
+
|
|
686
|
+
test('should return false if array length is below the specified range', () => {
|
|
687
|
+
const arr = [1, 2, 3] as const;
|
|
688
|
+
|
|
689
|
+
assert.isFalse(isArrayBoundedLength(arr, 4, 5));
|
|
690
|
+
});
|
|
691
|
+
|
|
692
|
+
test('should return false if array length is above the specified range', () => {
|
|
693
|
+
const arr = [1, 2, 3] as const;
|
|
694
|
+
|
|
695
|
+
assert.isFalse(isArrayBoundedLength(arr, 0, 2));
|
|
696
|
+
});
|
|
697
|
+
|
|
698
|
+
test('should return true for empty array and range including 0', () => {
|
|
699
|
+
const arr = [] as const;
|
|
700
|
+
|
|
701
|
+
assert.isTrue(isArrayBoundedLength(arr, 0, 2));
|
|
702
|
+
|
|
703
|
+
if (isArrayBoundedLength(arr, 0, 2)) {
|
|
704
|
+
expectType<typeof arr, readonly []>('=');
|
|
705
|
+
}
|
|
706
|
+
});
|
|
707
|
+
|
|
708
|
+
test('should work with unknown array type', () => {
|
|
709
|
+
const mut_arr: number[] = [1, 2];
|
|
710
|
+
|
|
711
|
+
assert.isTrue(isArrayBoundedLength(mut_arr, 1, 3));
|
|
712
|
+
|
|
713
|
+
// transformer-ignore-next-line
|
|
714
|
+
expectType<typeof mut_arr, number[] & ArrayBoundedLen<1, 3, number>>('=');
|
|
715
|
+
|
|
716
|
+
assert.isFalse(isArrayBoundedLength(mut_arr, 3, 5));
|
|
717
|
+
});
|
|
718
|
+
|
|
719
|
+
test('should return true for arrays within specified range (additional)', () => {
|
|
720
|
+
assert.isTrue(isArrayBoundedLength([1, 2, 3], 1, 3));
|
|
721
|
+
|
|
722
|
+
assert.isTrue(isArrayBoundedLength([1, 2, 3], 3, 3));
|
|
723
|
+
|
|
724
|
+
assert.isTrue(isArrayBoundedLength([], 0, 0));
|
|
725
|
+
});
|
|
726
|
+
|
|
727
|
+
test('should return false for arrays outside specified range (additional)', () => {
|
|
728
|
+
assert.isFalse(isArrayBoundedLength([1, 2, 3], 4, 5));
|
|
729
|
+
|
|
730
|
+
assert.isFalse(isArrayBoundedLength([1, 2, 3], 0, 2));
|
|
731
|
+
});
|
|
732
|
+
|
|
733
|
+
test('should work as type guard for bounded length (additional)', () => {
|
|
734
|
+
const array: readonly number[] = [1, 2] as const;
|
|
735
|
+
|
|
736
|
+
if (isArrayBoundedLength(array, 1, 3)) {
|
|
737
|
+
expectType<typeof array, ArrayBoundedLen<1, 3, number>>('=');
|
|
738
|
+
|
|
739
|
+
expect(array.length).toBeGreaterThanOrEqual(1);
|
|
740
|
+
|
|
741
|
+
expect(array.length).toBeLessThanOrEqual(3);
|
|
742
|
+
}
|
|
743
|
+
});
|
|
744
|
+
});
|
|
745
|
+
|
|
587
746
|
describe(every, () => {
|
|
588
747
|
test('should return true when all elements satisfy predicate', () => {
|
|
589
748
|
const evens = [2, 4, 6, 8] as const;
|