@oliasoft-open-source/units 3.12.0-beta-5 → 3.12.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 CHANGED
@@ -398,20 +398,17 @@ checkAndCleanDecimalComma('36..6'); // '36.6';
398
398
  #### Convert value to another unit
399
399
 
400
400
  ```js
401
- convertAndGetValue(1, 'm', 'ft'); // 1 / 0.3048
402
- convertAndGetValue('1|m', 'ft'); // 1 / 0.3048
403
- convertAndGetValue(0, 'C', 'F'); // 32
404
- convertAndGetValue('0|C', 'F'); // 32
405
- convertAndGetValue(32, 'F', 'C'); // 0
406
- convertAndGetValue('32|F', 'C'); // 0
407
- convertAndGetValue(50, '%', 'fr'); // 0.5
408
- convertAndGetValue('50|%', 'fr'); // 0.5
409
- convertAndGetValue(0.125, 'fr', '%'); // 12.5
410
- convertAndGetValue('0.125|fr', '%'); // 12.5
411
- convertAndGetValue(180, 'deg', 'rad').toFixed(4); // '3.1416'
412
- convertAndGetValue('180|deg', 'rad').toFixed(4); // '3.1416'
413
- convertAndGetValue(1, 'rad', 'deg').toFixed(4); // '57.2958'
414
- convertAndGetValue('1|rad', 'deg').toFixed(4); // '57.2958'
401
+ to(1, 'm', 'ft'); // 1 / 0.3048
402
+ to(0, 'C', 'F'); // 32
403
+ to(32, 'F', 'C'); // 0
404
+ to(50, '%', 'fr'); // 0.5
405
+ to(0.125, 'fr', '%'); // 12.5
406
+ to(180, 'deg', 'rad').toFixed(4); // '3.1416'
407
+ to(1, 'rad', 'deg').toFixed(4); // '57.2958'
408
+ to('1,12', 'rad', 'deg').toFixed(4); // '64.1713'
409
+ to('1....12', 'rad', 'deg').toFixed(4); // '64.1713'
410
+ to('1,,12', 'rad', 'deg').toFixed(4); // '64.1713'
411
+ to('1,,.12', 'rad', 'deg').toFixed(4); // '64.1713'
415
412
  ```
416
413
 
417
414
  ### split(numWithUnit) {...}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,7 +1,256 @@
1
1
  "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("../index");
2
4
  describe('Comparison', () => {
3
- test('True should be true', () => {
4
- expect(true).toBe(true);
5
+ describe('isCloseTo', () => {
6
+ test('Checks the values are close to each other', () => {
7
+ expect((0, index_1.isCloseTo)(0, 0)).toBe(true);
8
+ expect((0, index_1.isCloseTo)(123, 123)).toBe(true);
9
+ expect((0, index_1.isCloseTo)(123.000123, 123.000123)).toBe(true);
10
+ expect((0, index_1.isCloseTo)(0.123456789, 0.123456789)).toBe(true);
11
+ expect((0, index_1.isCloseTo)(1e-12, 1e-12)).toBe(true);
12
+ expect((0, index_1.isCloseTo)('0', '0')).toBe(true);
13
+ expect((0, index_1.isCloseTo)('0.123456789', 0.123456789)).toBe(true);
14
+ expect((0, index_1.isCloseTo)(0.123456789, '0.123456789')).toBe(true);
15
+ expect((0, index_1.isCloseTo)(0.3, 0.1 + 0.2)).toBe(true);
16
+ expect((0, index_1.isCloseTo)(1000.1 + 1000.2, 2000.3)).toBe(true);
17
+ expect((0, index_1.isCloseTo)(1, (0.3 * 3) + 0.1)).toBe(true);
18
+ expect((0, index_1.isCloseTo)(0, 0.1e-17)).toBe(true);
19
+ expect((0, index_1.isCloseTo)('0.3', 0.1 + 0.2)).toBe(true);
20
+ expect((0, index_1.isCloseTo)(0, '0.1e-17')).toBe(true);
21
+ expect((0, index_1.isCloseTo)(1, 0.99999)).toBe(false);
22
+ expect((0, index_1.isCloseTo)(1.12345e-100, 1.6e-100)).toBe(false);
23
+ expect((0, index_1.isCloseTo)(1e-18, 1.1e-18)).toBe(false);
24
+ expect((0, index_1.isCloseTo)(1.9864e-17, 1.1e-17)).toBe(false);
25
+ expect((0, index_1.isCloseTo)(123.000000002, 123.000000003)).toBe(false);
26
+ expect((0, index_1.isCloseTo)(100e100, 100.0001e100)).toBe(false);
27
+ expect((0, index_1.isCloseTo)(0.000000002, 0.000000003)).toBe(false);
28
+ expect((0, index_1.isCloseTo)(-0.000000002, -0.000000003)).toBe(false);
29
+ expect((0, index_1.isCloseTo)(123.000000002234, 123.00000000345646)).toBe(false);
30
+ expect((0, index_1.isCloseTo)(0, 0.000000001)).toBe(false);
31
+ expect((0, index_1.isCloseTo)(123, 124)).toBe(false);
32
+ expect((0, index_1.isCloseTo)(123.000123, 123.000124)).toBe(false);
33
+ expect((0, index_1.isCloseTo)('123.000123', 123.000124)).toBe(false);
34
+ expect((0, index_1.isCloseTo)('', 123.000124)).toBe(false);
35
+ expect((0, index_1.isCloseTo)(123.000124, '')).toBe(false);
36
+ expect((0, index_1.isCloseTo)('', '')).toBe(false);
37
+ expect((0, index_1.isCloseTo)(null, 123.000124)).toBe(false);
38
+ expect((0, index_1.isCloseTo)(123.000124, null)).toBe(false);
39
+ });
40
+ test('Checks the values with given relative difference', () => {
41
+ expect((0, index_1.isCloseTo)(1, 0.9999901, { relativeDiff: 0.00001 })).toBe(true);
42
+ expect((0, index_1.isCloseTo)(0.9999901, 1, { relativeDiff: 0.00001 })).toBe(true);
43
+ expect((0, index_1.isCloseTo)(1.12345e-100, 1.125e-100, { relativeDiff: 1e-2 })).toBe(true);
44
+ expect((0, index_1.isCloseTo)(10, 10.1, { relativeDiff: '1%' })).toBe(true);
45
+ expect((0, index_1.isCloseTo)(10, 10.2, { relativeDiff: '1%' })).toBe(false);
46
+ expect((0, index_1.isCloseTo)(1, 0.99998, { relativeDiff: 0.00001 })).toBe(false);
47
+ expect((0, index_1.isCloseTo)(1, 0.99998, { relativeDiff: 0.00001 })).toBe(false);
48
+ });
49
+ test('Throws an error with given bad relative difference', () => {
50
+ expect(() => (0, index_1.isCloseTo)(1, 1, { relativeDiff: 0 })).toThrow(/Unpredictable/);
51
+ expect(() => (0, index_1.isCloseTo)(1, 1, { relativeDiff: -0e-10 })).toThrow(/Unpredictable/);
52
+ expect(() => (0, index_1.isCloseTo)(1, 1, { relativeDiff: 1e-18 })).toThrow(/Unpredictable/);
53
+ });
54
+ test('Checks the values with given absolute difference', () => {
55
+ expect((0, index_1.isCloseTo)(11.3, 11, { absoluteDiff: 0.5 })).toBe(true);
56
+ expect((0, index_1.isCloseTo)(11, 11.34567, { absoluteDiff: 0.5 })).toBe(true);
57
+ expect((0, index_1.isCloseTo)(11.5, 11, { absoluteDiff: 0.5 })).toBe(true);
58
+ expect((0, index_1.isCloseTo)(11.7, 11, { absoluteDiff: 0.5 })).toBe(false);
59
+ expect((0, index_1.isCloseTo)(11.734, 11.7342, { absoluteDiff: 0.001 })).toBe(true);
60
+ expect((0, index_1.isCloseTo)(11.734, 11.735, { absoluteDiff: 0.001 })).toBe(true);
61
+ expect((0, index_1.isCloseTo)(11.734, 11.736, { absoluteDiff: 0.001 })).toBe(false);
62
+ expect((0, index_1.isCloseTo)(0.000001, 0.000002, { absoluteDiff: 0.000001 })).toBe(true);
63
+ expect((0, index_1.isCloseTo)(0.000001, 0.0000021, { absoluteDiff: 0.000001 })).toBe(false);
64
+ });
65
+ test('Throws an error with given bad absolute difference', () => {
66
+ expect(() => (0, index_1.isCloseTo)(1, 1, { absoluteDiff: 0 })).toThrow(/Unpredictable/);
67
+ expect(() => (0, index_1.isCloseTo)(1, 1, { absoluteDiff: -0e-10 })).toThrow(/Unpredictable/);
68
+ expect(() => (0, index_1.isCloseTo)(1, 1, { absoluteDiff: 1e-18 })).toThrow(/Unpredictable/);
69
+ });
70
+ test('Checks the values with units', () => {
71
+ expect((0, index_1.isCloseTo)('123.000123|m', '123.000123|m')).toBe(true);
72
+ expect((0, index_1.isCloseTo)('0.123456789|m', '0.123456789|m')).toBe(true);
73
+ expect((0, index_1.isCloseTo)('1e-12|m', '1e-12|m')).toBe(true);
74
+ expect((0, index_1.isCloseTo)('1|GPa', '1e9|Pa')).toBe(true);
75
+ expect((0, index_1.isCloseTo)('1|Pa', '1e-9|GPa')).toBe(true);
76
+ expect((0, index_1.isCloseTo)('0.3|m', '0.3000000000000000003|m')).toBe(true);
77
+ expect((0, index_1.isCloseTo)('0|m', '0.1e-17|m')).toBe(true);
78
+ });
79
+ test('Checks the values with different units', () => {
80
+ expect((0, index_1.isCloseTo)('0.3|m', '0.0003000000000000000003|km')).toBe(true);
81
+ expect((0, index_1.isCloseTo)('77,8355568|cm', '2.55366|ft')).toBe(true);
82
+ });
83
+ test('Throws an error with given units mistmatch', () => {
84
+ expect(() => (0, index_1.isCloseTo)('0.3|sg', '0.3000000000000000003|m')).toThrow(/No conversions found/);
85
+ expect(() => (0, index_1.isCloseTo)('77.8355568|cm', '2.55366|kg')).toThrow(/No conversions found/);
86
+ expect(() => (0, index_1.isCloseTo)('0.3|m', '0.3')).toThrowError('Parameters must either both have units or both not have units. Received "0.3|m" and "0.3"');
87
+ expect(() => (0, index_1.isCloseTo)('0.3', '0.3|m')).toThrowError('Parameters must either both have units or both not have units. Received "0.3" and "0.3|m"');
88
+ expect(() => (0, index_1.isCloseTo)('0.3|m', 0.3)).toThrowError('Parameters must either both have units or both not have units. Received "0.3|m" and "0.3"');
89
+ expect(() => (0, index_1.isCloseTo)(0.3, '0.3|m')).toThrowError('Parameters must either both have units or both not have units. Received "0.3" and "0.3|m"');
90
+ });
91
+ });
92
+ describe('isDeepCloseTo deeply compares the numerical properties in objects or arrays', () => {
93
+ test('pass on similar values', () => {
94
+ const a = {
95
+ a: 0,
96
+ b: '77,8355568|cm',
97
+ c: {
98
+ d: 2000.3,
99
+ e: ['0,3'],
100
+ f: 'not a number',
101
+ },
102
+ };
103
+ const b = {
104
+ a: '0,1e-17',
105
+ b: '2.55366|ft',
106
+ c: {
107
+ d: 2000.3000000000002,
108
+ e: [0.30000000000000004],
109
+ f: 'not a number',
110
+ },
111
+ };
112
+ expect((0, index_1.isDeepCloseTo)(a, b)).toBe(true);
113
+ });
114
+ test('pass on self-compare', () => {
115
+ const a = {
116
+ a: 1.000001,
117
+ b: '123.000123|m',
118
+ c: {
119
+ d: 1.12345e-100,
120
+ e: ['1.000004', 1.000005],
121
+ f: 'not a number',
122
+ g: '1,23',
123
+ h: null,
124
+ i: undefined,
125
+ j: '',
126
+ k: NaN,
127
+ l: Infinity,
128
+ m: -Infinity,
129
+ n: '1.',
130
+ o: '1,'
131
+ },
132
+ };
133
+ expect((0, index_1.isDeepCloseTo)(a, a)).toBe(true);
134
+ });
135
+ test('pass for simple types', () => {
136
+ expect((0, index_1.isDeepCloseTo)(0.3, 0.1 + 0.2)).toBe(true);
137
+ expect((0, index_1.isDeepCloseTo)(1000.1 + 1000.2, 2000.3)).toBe(true);
138
+ expect((0, index_1.isDeepCloseTo)(1, (0.3 * 3) + 0.1)).toBe(true);
139
+ expect((0, index_1.isDeepCloseTo)(0, 0.1e-17)).toBe(true);
140
+ expect((0, index_1.isDeepCloseTo)('0.3', 0.1 + 0.2)).toBe(true);
141
+ expect((0, index_1.isDeepCloseTo)(0, '0.1e-17')).toBe(true);
142
+ });
143
+ test('pass when arguments empty', () => {
144
+ expect((0, index_1.isDeepCloseTo)([], [])).toBe(true);
145
+ expect((0, index_1.isDeepCloseTo)({}, {})).toBe(true);
146
+ expect((0, index_1.isDeepCloseTo)(null, null)).toBe(true);
147
+ expect((0, index_1.isDeepCloseTo)(undefined, undefined)).toBe(true);
148
+ });
149
+ test('fail on values not close enough', () => {
150
+ const a = {
151
+ a: 1.000001,
152
+ b: '123.000123|m',
153
+ c: {
154
+ d: 1.12345e-100,
155
+ e: ['1.000004', 1.000005],
156
+ f: 'not a number',
157
+ g: '1,23',
158
+ h: null,
159
+ i: undefined,
160
+ j: '',
161
+ k: NaN,
162
+ l: Infinity,
163
+ m: -Infinity,
164
+ n: '1.',
165
+ o: '1,'
166
+ },
167
+ };
168
+ const b = {
169
+ a: 1.000001,
170
+ b: '123.000123|m',
171
+ c: {
172
+ d: 1.6e-100,
173
+ e: ['1.000004', 1.000005],
174
+ f: 'not a number',
175
+ g: '1,23',
176
+ h: null,
177
+ i: undefined,
178
+ j: '',
179
+ k: NaN,
180
+ l: Infinity,
181
+ m: -Infinity,
182
+ n: '1.',
183
+ o: '1,'
184
+ },
185
+ };
186
+ expect((0, index_1.isDeepCloseTo)(a, b)).toBe(false);
187
+ });
188
+ test('fail on different number of keys', () => {
189
+ const a = {
190
+ a: 1.000001,
191
+ b: '123.000123|m',
192
+ c: {
193
+ d: 1.12345e-100,
194
+ e: ['1.000004', 1.000005],
195
+ },
196
+ };
197
+ const b = {
198
+ a: 1.000001,
199
+ b: '123.000123|m',
200
+ c: {
201
+ e: ['1.000004', 1.000005],
202
+ },
203
+ };
204
+ expect((0, index_1.isDeepCloseTo)(a, b)).toBe(false);
205
+ });
206
+ });
207
+ describe('isCloseToOrLessThan', () => {
208
+ test('Checks the values are close to each other or less than', () => {
209
+ expect((0, index_1.isCloseToOrLessThan)(0.3, 0.1 + 0.2)).toBe(true);
210
+ expect((0, index_1.isCloseToOrLessThan)(1000.1 + 1000.2, 2000.3)).toBe(true);
211
+ expect((0, index_1.isCloseToOrLessThan)(1, (0.3 * 3) + 0.1)).toBe(true);
212
+ expect((0, index_1.isCloseToOrLessThan)(0, 0.1e-17)).toBe(true);
213
+ expect((0, index_1.isCloseToOrLessThan)('0.3', 0.1 + 0.2)).toBe(true);
214
+ expect((0, index_1.isCloseToOrLessThan)(0, '0.1e-17')).toBe(true);
215
+ expect((0, index_1.isCloseToOrLessThan)(1e-18, 1.1e-18)).toBe(true);
216
+ expect((0, index_1.isCloseToOrLessThan)(1.6e-103, 1.6e-102)).toBe(true);
217
+ expect((0, index_1.isCloseToOrLessThan)(1.0999e-17, 1.1e-17)).toBe(true);
218
+ expect((0, index_1.isCloseToOrLessThan)(123.000000002, 123.000000003)).toBe(true);
219
+ expect((0, index_1.isCloseToOrLessThan)(100e100, 100.0001e100)).toBe(true);
220
+ expect((0, index_1.isCloseToOrLessThan)(0.000000002, 0.000000003)).toBe(true);
221
+ expect((0, index_1.isCloseToOrLessThan)(123.000000002234, 123.00000000345646)).toBe(true);
222
+ expect((0, index_1.isCloseToOrLessThan)(0, 0.000000001)).toBe(true);
223
+ expect((0, index_1.isCloseToOrLessThan)(123, 124)).toBe(true);
224
+ expect((0, index_1.isCloseToOrLessThan)(123.000123, 123.000124)).toBe(true);
225
+ expect((0, index_1.isCloseToOrLessThan)(-0.000000002, -0.000000003)).toBe(false);
226
+ expect((0, index_1.isCloseToOrLessThan)(1, 0.99999)).toBe(false);
227
+ expect((0, index_1.isCloseToOrLessThan)(null, 123.000124)).toBe(false);
228
+ expect((0, index_1.isCloseToOrLessThan)(123.000124, null)).toBe(false);
229
+ });
230
+ });
231
+ describe('isCloseToOrGreaterThan', () => {
232
+ test('Checks the values are close to each other or greater than', () => {
233
+ expect((0, index_1.isCloseToOrGreaterThan)(0.3, 0.1 + 0.2)).toBe(true);
234
+ expect((0, index_1.isCloseToOrGreaterThan)(1000.1 + 1000.2, 2000.3)).toBe(true);
235
+ expect((0, index_1.isCloseToOrGreaterThan)(1, (0.3 * 3) + 0.1)).toBe(true);
236
+ expect((0, index_1.isCloseToOrGreaterThan)(0, 0.1e-17)).toBe(true);
237
+ expect((0, index_1.isCloseToOrGreaterThan)('0.3', 0.1 + 0.2)).toBe(true);
238
+ expect((0, index_1.isCloseToOrGreaterThan)(0, '0.1e-17')).toBe(true);
239
+ expect((0, index_1.isCloseToOrGreaterThan)(1.1e-18, 1e-18)).toBe(true);
240
+ expect((0, index_1.isCloseToOrGreaterThan)(1.6e-102, 1.6e-103)).toBe(true);
241
+ expect((0, index_1.isCloseToOrGreaterThan)(1.1e-17, 1.0999e-17)).toBe(true);
242
+ expect((0, index_1.isCloseToOrGreaterThan)(123.000000003, 123.000000002)).toBe(true);
243
+ expect((0, index_1.isCloseToOrGreaterThan)(100.0001e100, 100e100)).toBe(true);
244
+ expect((0, index_1.isCloseToOrGreaterThan)(0.000000003, 0.000000002)).toBe(true);
245
+ expect((0, index_1.isCloseToOrGreaterThan)(123.00000000345646, 123.000000002234)).toBe(true);
246
+ expect((0, index_1.isCloseToOrGreaterThan)(0.000000001, 0)).toBe(true);
247
+ expect((0, index_1.isCloseToOrGreaterThan)(124, 123)).toBe(true);
248
+ expect((0, index_1.isCloseToOrGreaterThan)(123.000124, 123.000123)).toBe(true);
249
+ expect((0, index_1.isCloseToOrGreaterThan)(-0.000000003, -0.000000002)).toBe(false);
250
+ expect((0, index_1.isCloseToOrGreaterThan)(0.99999, 1)).toBe(false);
251
+ expect((0, index_1.isCloseToOrGreaterThan)(null, 123.000124)).toBe(false);
252
+ expect((0, index_1.isCloseToOrGreaterThan)(123.000124, null)).toBe(false);
253
+ });
5
254
  });
6
255
  });
7
256
  //# sourceMappingURL=comparison.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"comparison.test.js","sourceRoot":"","sources":["../../src/comparison/comparison.test.ts"],"names":[],"mappings":";AAOA,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AAyQL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"comparison.test.js","sourceRoot":"","sources":["../../src/comparison/comparison.test.ts"],"names":[],"mappings":"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"}