type-plus 4.5.0 → 4.6.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.
Files changed (120) hide show
  1. package/README.md +3 -1
  2. package/cjs/ComposableTypes.d.ts +0 -6
  3. package/cjs/JSONTypes.js +0 -1
  4. package/cjs/JSONTypes.js.map +1 -1
  5. package/cjs/UnionKeys.d.ts +0 -4
  6. package/cjs/array/CommonPropKeys.d.ts +0 -7
  7. package/cjs/array/CreateTuple.d.ts +10 -8
  8. package/cjs/array/DropMatch.d.ts +5 -0
  9. package/cjs/array/DropMatch.js +3 -0
  10. package/cjs/array/DropMatch.js.map +1 -0
  11. package/cjs/array/Filter.d.ts +2 -1
  12. package/cjs/array/FindFirst.d.ts +0 -3
  13. package/cjs/array/IntersectOfProps.d.ts +0 -7
  14. package/cjs/array/Last.d.ts +0 -3
  15. package/cjs/array/Tail.d.ts +0 -3
  16. package/cjs/array/UnionOfProps.d.ts +0 -7
  17. package/cjs/array/UnionOfValues.d.ts +0 -7
  18. package/cjs/array/index.d.ts +2 -1
  19. package/cjs/array/index.js.map +1 -1
  20. package/cjs/assertion/assertType.d.ts +0 -4
  21. package/cjs/assertion/assertType.js +0 -8
  22. package/cjs/assertion/assertType.js.map +1 -1
  23. package/cjs/functional/ChainFn.d.ts +0 -3
  24. package/cjs/functional/compose.d.ts +0 -3
  25. package/cjs/functional/compose.js +0 -3
  26. package/cjs/functional/compose.js.map +1 -1
  27. package/cjs/index.js +0 -2
  28. package/cjs/index.js.map +1 -1
  29. package/cjs/math/Add.d.ts +0 -6
  30. package/cjs/math/Digit.d.ts +20 -23
  31. package/cjs/math/IsPositive.d.ts +0 -5
  32. package/cjs/math/IsWhole.d.ts +0 -5
  33. package/cjs/math/Subtract.d.ts +0 -3
  34. package/cjs/nodejs/isNodeError.d.ts +0 -5
  35. package/cjs/nodejs/isNodeError.js +0 -5
  36. package/cjs/nodejs/isNodeError.js.map +1 -1
  37. package/cjs/nominal-types/Brand.d.ts +0 -10
  38. package/cjs/nominal-types/Brand.js +0 -3
  39. package/cjs/nominal-types/Brand.js.map +1 -1
  40. package/cjs/nominal-types/Flavor.d.ts +0 -12
  41. package/cjs/nominal-types/Flavor.js +0 -3
  42. package/cjs/nominal-types/Flavor.js.map +1 -1
  43. package/cjs/object/ExcludePropType.d.ts +0 -3
  44. package/cjs/object/IsDisjoint.d.ts +0 -4
  45. package/cjs/object/KeyTypes.d.ts +0 -5
  46. package/cjs/object/KeyofOptional.d.ts +0 -3
  47. package/cjs/object/KnownKeys.js +0 -3
  48. package/cjs/object/KnownKeys.js.map +1 -1
  49. package/cjs/object/Partial.d.ts +0 -9
  50. package/cjs/object/RecursiveIntersect.d.ts +0 -11
  51. package/cjs/object/Required.js +0 -1
  52. package/cjs/object/Required.js.map +1 -1
  53. package/cjs/object/facade.d.ts +0 -3
  54. package/cjs/object/facade.js +0 -3
  55. package/cjs/object/facade.js.map +1 -1
  56. package/cjs/object/mapProperties.d.ts +0 -8
  57. package/cjs/object/mapProperties.js +0 -8
  58. package/cjs/object/mapProperties.js.map +1 -1
  59. package/cjs/object/omit.d.ts +0 -3
  60. package/cjs/object/pick.d.ts +0 -7
  61. package/cjs/object/record.d.ts +0 -3
  62. package/cjs/object/record.js +0 -3
  63. package/cjs/object/record.js.map +1 -1
  64. package/cjs/object/reduceKey.d.ts +0 -3
  65. package/cjs/object/reduceKey.js +0 -3
  66. package/cjs/object/reduceKey.js.map +1 -1
  67. package/cjs/object/split.d.ts +0 -4
  68. package/cjs/predicates/CanAssign.d.ts +0 -3
  69. package/cjs/predicates/Equal.d.ts +0 -6
  70. package/cjs/predicates/isType.js +0 -6
  71. package/cjs/predicates/isType.js.map +1 -1
  72. package/cjs/promise/PromiseValue.d.ts +0 -3
  73. package/cjs/promise/PromiseValueMerge.d.ts +0 -3
  74. package/cjs/promise/isPromise.js +0 -1
  75. package/cjs/promise/isPromise.js.map +1 -1
  76. package/cjs/utils/Widen.d.ts +0 -4
  77. package/esm/JSONTypes.js +0 -1
  78. package/esm/JSONTypes.js.map +1 -1
  79. package/esm/array/DropMatch.js +2 -0
  80. package/esm/array/DropMatch.js.map +1 -0
  81. package/esm/array/index.js.map +1 -1
  82. package/esm/assertion/assertType.js +0 -8
  83. package/esm/assertion/assertType.js.map +1 -1
  84. package/esm/functional/compose.js +0 -3
  85. package/esm/functional/compose.js.map +1 -1
  86. package/esm/index.js +0 -2
  87. package/esm/index.js.map +1 -1
  88. package/esm/nodejs/isNodeError.js +0 -5
  89. package/esm/nodejs/isNodeError.js.map +1 -1
  90. package/esm/nominal-types/Brand.js +0 -3
  91. package/esm/nominal-types/Brand.js.map +1 -1
  92. package/esm/nominal-types/Flavor.js +0 -3
  93. package/esm/nominal-types/Flavor.js.map +1 -1
  94. package/esm/object/KnownKeys.js +0 -3
  95. package/esm/object/KnownKeys.js.map +1 -1
  96. package/esm/object/Required.js +0 -1
  97. package/esm/object/Required.js.map +1 -1
  98. package/esm/object/facade.js +0 -3
  99. package/esm/object/facade.js.map +1 -1
  100. package/esm/object/mapProperties.js +0 -8
  101. package/esm/object/mapProperties.js.map +1 -1
  102. package/esm/object/record.js +0 -3
  103. package/esm/object/record.js.map +1 -1
  104. package/esm/object/reduceKey.js +0 -3
  105. package/esm/object/reduceKey.js.map +1 -1
  106. package/esm/predicates/isType.js +0 -6
  107. package/esm/predicates/isType.js.map +1 -1
  108. package/esm/promise/isPromise.js +0 -1
  109. package/esm/promise/isPromise.js.map +1 -1
  110. package/package.json +1 -1
  111. package/ts/array/CreateTuple.spec.ts +32 -21
  112. package/ts/array/CreateTuple.ts +30 -7
  113. package/ts/array/DropMatch.spec.ts +113 -0
  114. package/ts/array/DropMatch.ts +53 -0
  115. package/ts/array/Filter.spec.ts +107 -21
  116. package/ts/array/Filter.ts +26 -12
  117. package/ts/array/index.ts +2 -1
  118. package/ts/math/Add.spec.ts +82 -82
  119. package/ts/math/Digit.spec.ts +184 -185
  120. package/ts/math/Digit.ts +20 -20
@@ -1,185 +1,184 @@
1
- import { Equal, isType } from '..'
2
- import { Digit, DigitArray } from './Digit'
3
-
4
- describe('DigitArray.ToNumber<DA>', () => {
5
- test('no digit gets 0', () => {
6
- type A = DigitArray.ToNumber<[]>
7
- isType.t<Equal<A, 0>>()
8
- })
9
-
10
- test('single digit', () => {
11
- isType.t<Equal<DigitArray.ToNumber<[0]>, 0>>()
12
- isType.t<Equal<DigitArray.ToNumber<[1]>, 1>>()
13
- isType.t<Equal<DigitArray.ToNumber<[2]>, 2>>()
14
- isType.t<Equal<DigitArray.ToNumber<[3]>, 3>>()
15
- isType.t<Equal<DigitArray.ToNumber<[4]>, 4>>()
16
- isType.t<Equal<DigitArray.ToNumber<[5]>, 5>>()
17
- isType.t<Equal<DigitArray.ToNumber<[6]>, 6>>()
18
- isType.t<Equal<DigitArray.ToNumber<[7]>, 7>>()
19
- isType.t<Equal<DigitArray.ToNumber<[8]>, 8>>()
20
- isType.t<Equal<DigitArray.ToNumber<[9]>, 9>>()
21
-
22
- })
23
-
24
- test('two digits', () => {
25
- isType.t<Equal<DigitArray.ToNumber<[1, 0]>, 10>>()
26
- isType.t<Equal<DigitArray.ToNumber<[1, 0]>, 10>>()
27
- isType.t<Equal<DigitArray.ToNumber<[3, 1]>, 31>>()
28
- isType.t<Equal<DigitArray.ToNumber<[13, 1]>, 131>>()
29
- isType.t<Equal<DigitArray.ToNumber<[1, 2, 3, 4]>, 1234>>()
30
- })
31
-
32
- test('multi digits', () => {
33
- isType.t<Equal<DigitArray.ToNumber<[1, 2, 3, 4]>, 1234>>()
34
- isType.t<Equal<DigitArray.ToNumber<[1, 2, 3, 5]>, 1235>>()
35
- })
36
- })
37
-
38
- describe('DigitArray.Shift10<DA>', () => {
39
- test('zero digit gets the same', () => {
40
- isType.equal<true, [], DigitArray.Shift10<[]>>()
41
- })
42
-
43
- test('single digit gets the same', () => {
44
- isType.equal<true, [5], DigitArray.Shift10<[5]>>()
45
- })
46
-
47
- test('two digits with leading 0 get trimmed', () => {
48
- isType.equal<true, [5], DigitArray.Shift10<[0, 5]>>()
49
- })
50
- test('two digits gets value shifted', () => {
51
- isType.equal<true, [15], DigitArray.Shift10<[1, 5]>>()
52
- isType.equal<true, [8, 10], DigitArray.Shift10<[9, 0]>>()
53
- isType.equal<true, [8, 19], DigitArray.Shift10<[9, 9]>>()
54
- })
55
- test('multiple digits', () => {
56
- isType.equal<true, [11, 12, 14], DigitArray.Shift10<[0, 1, 2, 3, 4]>>()
57
- })
58
- })
59
-
60
-
61
- describe('Digit.GreaterThan<A, B>', () => {
62
- test('n > n is false', () => {
63
- isType.equal<true, false, Digit.GreaterThan<0, 0>>()
64
- isType.equal<true, false, Digit.GreaterThan<1, 1>>()
65
- isType.equal<true, false, Digit.GreaterThan<2, 2>>()
66
- isType.equal<true, false, Digit.GreaterThan<3, 3>>()
67
- isType.equal<true, false, Digit.GreaterThan<4, 4>>()
68
- isType.equal<true, false, Digit.GreaterThan<5, 5>>()
69
- isType.equal<true, false, Digit.GreaterThan<6, 6>>()
70
- isType.equal<true, false, Digit.GreaterThan<7, 7>>()
71
- isType.equal<true, false, Digit.GreaterThan<8, 8>>()
72
- isType.equal<true, false, Digit.GreaterThan<9, 9>>()
73
- })
74
- test('N > m is true', () => {
75
- isType.equal<true, true, Digit.GreaterThan<1, 0>>()
76
- isType.equal<true, true, Digit.GreaterThan<2, 0>>()
77
- isType.equal<true, true, Digit.GreaterThan<3, 0>>()
78
- isType.equal<true, true, Digit.GreaterThan<4, 0>>()
79
- isType.equal<true, true, Digit.GreaterThan<5, 0>>()
80
- isType.equal<true, true, Digit.GreaterThan<6, 0>>()
81
- isType.equal<true, true, Digit.GreaterThan<7, 0>>()
82
- isType.equal<true, true, Digit.GreaterThan<8, 0>>()
83
- isType.equal<true, true, Digit.GreaterThan<9, 0>>()
84
-
85
- isType.equal<true, true, Digit.GreaterThan<2, 1>>()
86
- isType.equal<true, true, Digit.GreaterThan<3, 1>>()
87
- isType.equal<true, true, Digit.GreaterThan<4, 1>>()
88
- isType.equal<true, true, Digit.GreaterThan<5, 1>>()
89
- isType.equal<true, true, Digit.GreaterThan<6, 1>>()
90
- isType.equal<true, true, Digit.GreaterThan<7, 1>>()
91
- isType.equal<true, true, Digit.GreaterThan<8, 1>>()
92
- isType.equal<true, true, Digit.GreaterThan<9, 1>>()
93
-
94
- isType.equal<true, true, Digit.GreaterThan<3, 2>>()
95
- isType.equal<true, true, Digit.GreaterThan<4, 2>>()
96
- isType.equal<true, true, Digit.GreaterThan<5, 2>>()
97
- isType.equal<true, true, Digit.GreaterThan<6, 2>>()
98
- isType.equal<true, true, Digit.GreaterThan<7, 2>>()
99
- isType.equal<true, true, Digit.GreaterThan<8, 2>>()
100
- isType.equal<true, true, Digit.GreaterThan<9, 2>>()
101
-
102
- isType.equal<true, true, Digit.GreaterThan<4, 3>>()
103
- isType.equal<true, true, Digit.GreaterThan<5, 3>>()
104
- isType.equal<true, true, Digit.GreaterThan<6, 3>>()
105
- isType.equal<true, true, Digit.GreaterThan<7, 3>>()
106
- isType.equal<true, true, Digit.GreaterThan<8, 3>>()
107
- isType.equal<true, true, Digit.GreaterThan<9, 3>>()
108
-
109
- isType.equal<true, true, Digit.GreaterThan<5, 4>>()
110
- isType.equal<true, true, Digit.GreaterThan<6, 4>>()
111
- isType.equal<true, true, Digit.GreaterThan<7, 4>>()
112
- isType.equal<true, true, Digit.GreaterThan<8, 4>>()
113
- isType.equal<true, true, Digit.GreaterThan<9, 4>>()
114
-
115
- isType.equal<true, true, Digit.GreaterThan<6, 5>>()
116
- isType.equal<true, true, Digit.GreaterThan<7, 5>>()
117
- isType.equal<true, true, Digit.GreaterThan<8, 5>>()
118
- isType.equal<true, true, Digit.GreaterThan<9, 5>>()
119
-
120
- isType.equal<true, true, Digit.GreaterThan<7, 6>>()
121
- isType.equal<true, true, Digit.GreaterThan<8, 6>>()
122
- isType.equal<true, true, Digit.GreaterThan<9, 6>>()
123
-
124
- isType.equal<true, true, Digit.GreaterThan<8, 7>>()
125
- isType.equal<true, true, Digit.GreaterThan<9, 7>>()
126
-
127
- isType.equal<true, true, Digit.GreaterThan<9, 8>>()
128
- })
129
-
130
- test('n > M is false', () => {
131
- isType.equal<true, false, Digit.GreaterThan<0, 1>>()
132
- isType.equal<true, false, Digit.GreaterThan<0, 2>>()
133
- isType.equal<true, false, Digit.GreaterThan<0, 3>>()
134
- isType.equal<true, false, Digit.GreaterThan<0, 4>>()
135
- isType.equal<true, false, Digit.GreaterThan<0, 5>>()
136
- isType.equal<true, false, Digit.GreaterThan<0, 6>>()
137
- isType.equal<true, false, Digit.GreaterThan<0, 7>>()
138
- isType.equal<true, false, Digit.GreaterThan<0, 8>>()
139
- isType.equal<true, false, Digit.GreaterThan<0, 9>>()
140
-
141
- isType.equal<true, false, Digit.GreaterThan<1, 2>>()
142
- isType.equal<true, false, Digit.GreaterThan<1, 3>>()
143
- isType.equal<true, false, Digit.GreaterThan<1, 4>>()
144
- isType.equal<true, false, Digit.GreaterThan<1, 5>>()
145
- isType.equal<true, false, Digit.GreaterThan<1, 6>>()
146
- isType.equal<true, false, Digit.GreaterThan<1, 7>>()
147
- isType.equal<true, false, Digit.GreaterThan<1, 8>>()
148
- isType.equal<true, false, Digit.GreaterThan<1, 9>>()
149
-
150
- isType.equal<true, false, Digit.GreaterThan<2, 3>>()
151
- isType.equal<true, false, Digit.GreaterThan<2, 4>>()
152
- isType.equal<true, false, Digit.GreaterThan<2, 5>>()
153
- isType.equal<true, false, Digit.GreaterThan<2, 6>>()
154
- isType.equal<true, false, Digit.GreaterThan<2, 7>>()
155
- isType.equal<true, false, Digit.GreaterThan<2, 8>>()
156
- isType.equal<true, false, Digit.GreaterThan<2, 9>>()
157
-
158
- isType.equal<true, false, Digit.GreaterThan<3, 4>>()
159
- isType.equal<true, false, Digit.GreaterThan<3, 5>>()
160
- isType.equal<true, false, Digit.GreaterThan<3, 6>>()
161
- isType.equal<true, false, Digit.GreaterThan<3, 7>>()
162
- isType.equal<true, false, Digit.GreaterThan<3, 8>>()
163
- isType.equal<true, false, Digit.GreaterThan<3, 9>>()
164
-
165
- isType.equal<true, false, Digit.GreaterThan<4, 5>>()
166
- isType.equal<true, false, Digit.GreaterThan<4, 6>>()
167
- isType.equal<true, false, Digit.GreaterThan<4, 7>>()
168
- isType.equal<true, false, Digit.GreaterThan<4, 8>>()
169
- isType.equal<true, false, Digit.GreaterThan<4, 9>>()
170
-
171
- isType.equal<true, false, Digit.GreaterThan<5, 6>>()
172
- isType.equal<true, false, Digit.GreaterThan<5, 7>>()
173
- isType.equal<true, false, Digit.GreaterThan<5, 8>>()
174
- isType.equal<true, false, Digit.GreaterThan<5, 9>>()
175
-
176
- isType.equal<true, false, Digit.GreaterThan<6, 7>>()
177
- isType.equal<true, false, Digit.GreaterThan<6, 8>>()
178
- isType.equal<true, false, Digit.GreaterThan<6, 9>>()
179
-
180
- isType.equal<true, false, Digit.GreaterThan<7, 8>>()
181
- isType.equal<true, false, Digit.GreaterThan<7, 9>>()
182
-
183
- isType.equal<true, false, Digit.GreaterThan<8, 9>>()
184
- })
185
- })
1
+ import { Equal, isType } from '..'
2
+ import { Digit, DigitArray } from './Digit'
3
+
4
+ describe('DigitArray.ToNumber<DA>', () => {
5
+ test('no digit gets 0', () => {
6
+ type A = DigitArray.ToNumber<[]>
7
+ isType.t<Equal<A, 0>>()
8
+ })
9
+
10
+ test('single digit', () => {
11
+ isType.t<Equal<DigitArray.ToNumber<[0]>, 0>>()
12
+ isType.t<Equal<DigitArray.ToNumber<[1]>, 1>>()
13
+ isType.t<Equal<DigitArray.ToNumber<[2]>, 2>>()
14
+ isType.t<Equal<DigitArray.ToNumber<[3]>, 3>>()
15
+ isType.t<Equal<DigitArray.ToNumber<[4]>, 4>>()
16
+ isType.t<Equal<DigitArray.ToNumber<[5]>, 5>>()
17
+ isType.t<Equal<DigitArray.ToNumber<[6]>, 6>>()
18
+ isType.t<Equal<DigitArray.ToNumber<[7]>, 7>>()
19
+ isType.t<Equal<DigitArray.ToNumber<[8]>, 8>>()
20
+ isType.t<Equal<DigitArray.ToNumber<[9]>, 9>>()
21
+
22
+ })
23
+
24
+ test('two digits', () => {
25
+ isType.t<Equal<DigitArray.ToNumber<[1, 0]>, 10>>()
26
+ isType.t<Equal<DigitArray.ToNumber<[1, 0]>, 10>>()
27
+ isType.t<Equal<DigitArray.ToNumber<[3, 1]>, 31>>()
28
+ isType.t<Equal<DigitArray.ToNumber<[13, 1]>, 131>>()
29
+ isType.t<Equal<DigitArray.ToNumber<[1, 2, 3, 4]>, 1234>>()
30
+ })
31
+
32
+ test('multi digits', () => {
33
+ isType.t<Equal<DigitArray.ToNumber<[1, 2, 3, 4]>, 1234>>()
34
+ isType.t<Equal<DigitArray.ToNumber<[1, 2, 3, 5]>, 1235>>()
35
+ })
36
+ })
37
+
38
+ describe('DigitArray.Shift10<DA>', () => {
39
+ test('zero digit gets the same', () => {
40
+ isType.equal<true, [], DigitArray.Shift10<[]>>()
41
+ })
42
+
43
+ test('single digit gets the same', () => {
44
+ isType.equal<true, [5], DigitArray.Shift10<[5]>>()
45
+ })
46
+
47
+ test('two digits with leading 0 get trimmed', () => {
48
+ isType.equal<true, [5], DigitArray.Shift10<[0, 5]>>()
49
+ })
50
+ test('two digits gets value shifted', () => {
51
+ isType.equal<true, [15], DigitArray.Shift10<[1, 5]>>()
52
+ isType.equal<true, [8, 10], DigitArray.Shift10<[9, 0]>>()
53
+ isType.equal<true, [8, 19], DigitArray.Shift10<[9, 9]>>()
54
+ })
55
+ test('multiple digits', () => {
56
+ isType.equal<true, [11, 12, 14], DigitArray.Shift10<[0, 1, 2, 3, 4]>>()
57
+ })
58
+ })
59
+
60
+ describe('Digit.GreaterThan<A, B>', () => {
61
+ test('n > n is false', () => {
62
+ isType.equal<true, false, Digit.GreaterThan<0, 0>>()
63
+ isType.equal<true, false, Digit.GreaterThan<1, 1>>()
64
+ isType.equal<true, false, Digit.GreaterThan<2, 2>>()
65
+ isType.equal<true, false, Digit.GreaterThan<3, 3>>()
66
+ isType.equal<true, false, Digit.GreaterThan<4, 4>>()
67
+ isType.equal<true, false, Digit.GreaterThan<5, 5>>()
68
+ isType.equal<true, false, Digit.GreaterThan<6, 6>>()
69
+ isType.equal<true, false, Digit.GreaterThan<7, 7>>()
70
+ isType.equal<true, false, Digit.GreaterThan<8, 8>>()
71
+ isType.equal<true, false, Digit.GreaterThan<9, 9>>()
72
+ })
73
+ test('N > m is true', () => {
74
+ isType.equal<true, true, Digit.GreaterThan<1, 0>>()
75
+ isType.equal<true, true, Digit.GreaterThan<2, 0>>()
76
+ isType.equal<true, true, Digit.GreaterThan<3, 0>>()
77
+ isType.equal<true, true, Digit.GreaterThan<4, 0>>()
78
+ isType.equal<true, true, Digit.GreaterThan<5, 0>>()
79
+ isType.equal<true, true, Digit.GreaterThan<6, 0>>()
80
+ isType.equal<true, true, Digit.GreaterThan<7, 0>>()
81
+ isType.equal<true, true, Digit.GreaterThan<8, 0>>()
82
+ isType.equal<true, true, Digit.GreaterThan<9, 0>>()
83
+
84
+ isType.equal<true, true, Digit.GreaterThan<2, 1>>()
85
+ isType.equal<true, true, Digit.GreaterThan<3, 1>>()
86
+ isType.equal<true, true, Digit.GreaterThan<4, 1>>()
87
+ isType.equal<true, true, Digit.GreaterThan<5, 1>>()
88
+ isType.equal<true, true, Digit.GreaterThan<6, 1>>()
89
+ isType.equal<true, true, Digit.GreaterThan<7, 1>>()
90
+ isType.equal<true, true, Digit.GreaterThan<8, 1>>()
91
+ isType.equal<true, true, Digit.GreaterThan<9, 1>>()
92
+
93
+ isType.equal<true, true, Digit.GreaterThan<3, 2>>()
94
+ isType.equal<true, true, Digit.GreaterThan<4, 2>>()
95
+ isType.equal<true, true, Digit.GreaterThan<5, 2>>()
96
+ isType.equal<true, true, Digit.GreaterThan<6, 2>>()
97
+ isType.equal<true, true, Digit.GreaterThan<7, 2>>()
98
+ isType.equal<true, true, Digit.GreaterThan<8, 2>>()
99
+ isType.equal<true, true, Digit.GreaterThan<9, 2>>()
100
+
101
+ isType.equal<true, true, Digit.GreaterThan<4, 3>>()
102
+ isType.equal<true, true, Digit.GreaterThan<5, 3>>()
103
+ isType.equal<true, true, Digit.GreaterThan<6, 3>>()
104
+ isType.equal<true, true, Digit.GreaterThan<7, 3>>()
105
+ isType.equal<true, true, Digit.GreaterThan<8, 3>>()
106
+ isType.equal<true, true, Digit.GreaterThan<9, 3>>()
107
+
108
+ isType.equal<true, true, Digit.GreaterThan<5, 4>>()
109
+ isType.equal<true, true, Digit.GreaterThan<6, 4>>()
110
+ isType.equal<true, true, Digit.GreaterThan<7, 4>>()
111
+ isType.equal<true, true, Digit.GreaterThan<8, 4>>()
112
+ isType.equal<true, true, Digit.GreaterThan<9, 4>>()
113
+
114
+ isType.equal<true, true, Digit.GreaterThan<6, 5>>()
115
+ isType.equal<true, true, Digit.GreaterThan<7, 5>>()
116
+ isType.equal<true, true, Digit.GreaterThan<8, 5>>()
117
+ isType.equal<true, true, Digit.GreaterThan<9, 5>>()
118
+
119
+ isType.equal<true, true, Digit.GreaterThan<7, 6>>()
120
+ isType.equal<true, true, Digit.GreaterThan<8, 6>>()
121
+ isType.equal<true, true, Digit.GreaterThan<9, 6>>()
122
+
123
+ isType.equal<true, true, Digit.GreaterThan<8, 7>>()
124
+ isType.equal<true, true, Digit.GreaterThan<9, 7>>()
125
+
126
+ isType.equal<true, true, Digit.GreaterThan<9, 8>>()
127
+ })
128
+
129
+ test('n > M is false', () => {
130
+ isType.equal<true, false, Digit.GreaterThan<0, 1>>()
131
+ isType.equal<true, false, Digit.GreaterThan<0, 2>>()
132
+ isType.equal<true, false, Digit.GreaterThan<0, 3>>()
133
+ isType.equal<true, false, Digit.GreaterThan<0, 4>>()
134
+ isType.equal<true, false, Digit.GreaterThan<0, 5>>()
135
+ isType.equal<true, false, Digit.GreaterThan<0, 6>>()
136
+ isType.equal<true, false, Digit.GreaterThan<0, 7>>()
137
+ isType.equal<true, false, Digit.GreaterThan<0, 8>>()
138
+ isType.equal<true, false, Digit.GreaterThan<0, 9>>()
139
+
140
+ isType.equal<true, false, Digit.GreaterThan<1, 2>>()
141
+ isType.equal<true, false, Digit.GreaterThan<1, 3>>()
142
+ isType.equal<true, false, Digit.GreaterThan<1, 4>>()
143
+ isType.equal<true, false, Digit.GreaterThan<1, 5>>()
144
+ isType.equal<true, false, Digit.GreaterThan<1, 6>>()
145
+ isType.equal<true, false, Digit.GreaterThan<1, 7>>()
146
+ isType.equal<true, false, Digit.GreaterThan<1, 8>>()
147
+ isType.equal<true, false, Digit.GreaterThan<1, 9>>()
148
+
149
+ isType.equal<true, false, Digit.GreaterThan<2, 3>>()
150
+ isType.equal<true, false, Digit.GreaterThan<2, 4>>()
151
+ isType.equal<true, false, Digit.GreaterThan<2, 5>>()
152
+ isType.equal<true, false, Digit.GreaterThan<2, 6>>()
153
+ isType.equal<true, false, Digit.GreaterThan<2, 7>>()
154
+ isType.equal<true, false, Digit.GreaterThan<2, 8>>()
155
+ isType.equal<true, false, Digit.GreaterThan<2, 9>>()
156
+
157
+ isType.equal<true, false, Digit.GreaterThan<3, 4>>()
158
+ isType.equal<true, false, Digit.GreaterThan<3, 5>>()
159
+ isType.equal<true, false, Digit.GreaterThan<3, 6>>()
160
+ isType.equal<true, false, Digit.GreaterThan<3, 7>>()
161
+ isType.equal<true, false, Digit.GreaterThan<3, 8>>()
162
+ isType.equal<true, false, Digit.GreaterThan<3, 9>>()
163
+
164
+ isType.equal<true, false, Digit.GreaterThan<4, 5>>()
165
+ isType.equal<true, false, Digit.GreaterThan<4, 6>>()
166
+ isType.equal<true, false, Digit.GreaterThan<4, 7>>()
167
+ isType.equal<true, false, Digit.GreaterThan<4, 8>>()
168
+ isType.equal<true, false, Digit.GreaterThan<4, 9>>()
169
+
170
+ isType.equal<true, false, Digit.GreaterThan<5, 6>>()
171
+ isType.equal<true, false, Digit.GreaterThan<5, 7>>()
172
+ isType.equal<true, false, Digit.GreaterThan<5, 8>>()
173
+ isType.equal<true, false, Digit.GreaterThan<5, 9>>()
174
+
175
+ isType.equal<true, false, Digit.GreaterThan<6, 7>>()
176
+ isType.equal<true, false, Digit.GreaterThan<6, 8>>()
177
+ isType.equal<true, false, Digit.GreaterThan<6, 9>>()
178
+
179
+ isType.equal<true, false, Digit.GreaterThan<7, 8>>()
180
+ isType.equal<true, false, Digit.GreaterThan<7, 9>>()
181
+
182
+ isType.equal<true, false, Digit.GreaterThan<8, 9>>()
183
+ })
184
+ })
package/ts/math/Digit.ts CHANGED
@@ -4,29 +4,29 @@ import { IsPositive } from './IsPositive'
4
4
  import { IsWhole } from './IsWhole'
5
5
 
6
6
  export namespace Digit {
7
- export type ToTuple = {
7
+ export type ToTuple<T = 1> = {
8
8
  [k in number]: any[]
9
9
  } & {
10
10
  0: [],
11
- 1: [1],
12
- 2: [1, 1],
13
- 3: [1, 1, 1],
14
- 4: [1, 1, 1, 1],
15
- 5: [1, 1, 1, 1, 1],
16
- 6: [1, 1, 1, 1, 1, 1],
17
- 7: [1, 1, 1, 1, 1, 1, 1],
18
- 8: [1, 1, 1, 1, 1, 1, 1, 1],
19
- 9: [1, 1, 1, 1, 1, 1, 1, 1, 1],
20
- 10: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
21
- 11: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
22
- 12: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
23
- 13: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
24
- 14: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
25
- 15: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
26
- 16: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
27
- 17: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
28
- 18: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
29
- 19: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
11
+ 1: [T],
12
+ 2: [T, T],
13
+ 3: [T, T, T],
14
+ 4: [T, T, T, T],
15
+ 5: [T, T, T, T, T],
16
+ 6: [T, T, T, T, T, T],
17
+ 7: [T, T, T, T, T, T, T],
18
+ 8: [T, T, T, T, T, T, T, T],
19
+ 9: [T, T, T, T, T, T, T, T, T],
20
+ 10: [T, T, T, T, T, T, T, T, T, T],
21
+ 11: [T, T, T, T, T, T, T, T, T, T, T],
22
+ 12: [T, T, T, T, T, T, T, T, T, T, T, T],
23
+ 13: [T, T, T, T, T, T, T, T, T, T, T, T, T],
24
+ 14: [T, T, T, T, T, T, T, T, T, T, T, T, T, T],
25
+ 15: [T, T, T, T, T, T, T, T, T, T, T, T, T, T, T],
26
+ 16: [T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T],
27
+ 17: [T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T],
28
+ 18: [T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T],
29
+ 19: [T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T],
30
30
  }
31
31
 
32
32
  /**