@oliasoft-open-source/units 4.2.5 → 4.3.0-beta-1

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 (78) hide show
  1. package/dist/README.md +570 -0
  2. package/dist/index.d.ts +399 -8
  3. package/dist/index.js +2514 -79
  4. package/package.json +33 -34
  5. package/dist/comparison/comparison.d.ts +0 -15
  6. package/dist/comparison/comparison.js +0 -120
  7. package/dist/comparison/comparison.js.map +0 -1
  8. package/dist/comparison/comparison.test.d.ts +0 -1
  9. package/dist/comparison/comparison.test.js +0 -261
  10. package/dist/comparison/comparison.test.js.map +0 -1
  11. package/dist/constants.d.ts +0 -1218
  12. package/dist/constants.js +0 -1305
  13. package/dist/constants.js.map +0 -1
  14. package/dist/index.js.map +0 -1
  15. package/dist/interfaces.d.ts +0 -13
  16. package/dist/interfaces.js +0 -3
  17. package/dist/interfaces.js.map +0 -1
  18. package/dist/internationalization/internationalization.d.ts +0 -4
  19. package/dist/internationalization/internationalization.js +0 -64
  20. package/dist/internationalization/internationalization.js.map +0 -1
  21. package/dist/internationalization/internationalization.test.d.ts +0 -1
  22. package/dist/internationalization/internationalization.test.js +0 -65
  23. package/dist/internationalization/internationalization.test.js.map +0 -1
  24. package/dist/internationalization/utils.d.ts +0 -5
  25. package/dist/internationalization/utils.js +0 -114
  26. package/dist/internationalization/utils.js.map +0 -1
  27. package/dist/numbers/display-number.d.ts +0 -20
  28. package/dist/numbers/display-number.js +0 -141
  29. package/dist/numbers/display-number.js.map +0 -1
  30. package/dist/numbers/display-number.test.d.ts +0 -1
  31. package/dist/numbers/display-number.test.js +0 -182
  32. package/dist/numbers/display-number.test.js.map +0 -1
  33. package/dist/numbers/numbers.d.ts +0 -4
  34. package/dist/numbers/numbers.js +0 -94
  35. package/dist/numbers/numbers.js.map +0 -1
  36. package/dist/numbers/numbers.test.d.ts +0 -1
  37. package/dist/numbers/numbers.test.js +0 -167
  38. package/dist/numbers/numbers.test.js.map +0 -1
  39. package/dist/parse/parse-number.d.ts +0 -13
  40. package/dist/parse/parse-number.js +0 -49
  41. package/dist/parse/parse-number.js.map +0 -1
  42. package/dist/parse/parse-number.test.d.ts +0 -1
  43. package/dist/parse/parse-number.test.js +0 -86
  44. package/dist/parse/parse-number.test.js.map +0 -1
  45. package/dist/rounding/deprecated-rounding.d.ts +0 -4
  46. package/dist/rounding/deprecated-rounding.js +0 -80
  47. package/dist/rounding/deprecated-rounding.js.map +0 -1
  48. package/dist/rounding/rounding.d.ts +0 -13
  49. package/dist/rounding/rounding.js +0 -199
  50. package/dist/rounding/rounding.js.map +0 -1
  51. package/dist/rounding/rounding.test.d.ts +0 -1
  52. package/dist/rounding/rounding.test.js +0 -543
  53. package/dist/rounding/rounding.test.js.map +0 -1
  54. package/dist/tsconfig.build.tsbuildinfo +0 -1
  55. package/dist/units.d.ts +0 -29
  56. package/dist/units.js +0 -365
  57. package/dist/units.js.map +0 -1
  58. package/dist/utils.d.ts +0 -27
  59. package/dist/utils.js +0 -280
  60. package/dist/utils.js.map +0 -1
  61. package/dist/validate/ajv-validators.d.ts +0 -6
  62. package/dist/validate/ajv-validators.js +0 -127
  63. package/dist/validate/ajv-validators.js.map +0 -1
  64. package/dist/validate/errors-transform.d.ts +0 -2
  65. package/dist/validate/errors-transform.js +0 -8
  66. package/dist/validate/errors-transform.js.map +0 -1
  67. package/dist/validate/schemas/index.d.ts +0 -2
  68. package/dist/validate/schemas/index.js +0 -11
  69. package/dist/validate/schemas/index.js.map +0 -1
  70. package/dist/validate/schemas/test.schema.d.ts +0 -12
  71. package/dist/validate/schemas/test.schema.js +0 -15
  72. package/dist/validate/schemas/test.schema.js.map +0 -1
  73. package/dist/validate/schemas/validate-number.schema.d.ts +0 -5
  74. package/dist/validate/schemas/validate-number.schema.js +0 -8
  75. package/dist/validate/schemas/validate-number.schema.js.map +0 -1
  76. package/dist/validate/validate.test.d.ts +0 -1
  77. package/dist/validate/validate.test.js +0 -32
  78. package/dist/validate/validate.test.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oliasoft-open-source/units",
3
- "version": "4.2.5",
3
+ "version": "4.3.0-beta-1",
4
4
  "description": "Package for units management",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -10,52 +10,51 @@
10
10
  "files": [
11
11
  "dist/**/*"
12
12
  ],
13
+ "type": "module",
13
14
  "scripts": {
14
15
  "compile-validators:build": "esbuild dist/validate/ajv-validators.js --bundle --allow-overwrite --platform=node --format=cjs --outfile=dist/validate/ajv-validators.js",
15
- "build": "yarn compile-validators && tsc -p tsconfig.build.json && yarn compile-validators:build",
16
- "lint": "eslint \"./src/**/*.{js,ts,tsx}\"",
17
- "start": "yarn link && yarn compile-validators && nodemon",
16
+ "build": "pkgroll --clean-dist --tsconfig=tsconfig.build.json && cp ./README.md ./dist",
17
+ "lint": "eslint . --fix",
18
+ "start": "yarn link && yarn compile-validators && tsx watch src/index.ts",
18
19
  "test": "yarn compile-validators && jest --coverageThreshold \"{}\"",
19
20
  "test:watch": "jest --watchAll",
20
21
  "watch": "tsc -w -p tsconfig.dev.json",
21
- "validate-release-notes": "ts-node scripts/validate-release-notes.ts",
22
- "compile-validators": "ts-node scripts/compile-validators.ts",
23
- "validate-version": "ts-node scripts/validate-version.ts"
22
+ "validate-release-notes": "tsx scripts/validate-release-notes.ts",
23
+ "compile-validators": "tsx scripts/compile-validators.ts",
24
+ "validate-version": "tsx scripts/validate-version.ts",
25
+ "prepare": "husky"
24
26
  },
25
- "husky": {
26
- "hooks": {
27
- "pre-commit": "yarn run lint && yarn test",
28
- "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
29
- "pre-push": "yarn run lint && yarn test"
30
- }
27
+ "lint-staged": {
28
+ "*.ts": "npx eslint --fix"
31
29
  },
32
30
  "dependencies": {
33
- "fraction.js": "^4.2.0"
31
+ "fraction.js": "^5.2.1"
34
32
  },
35
33
  "devDependencies": {
36
- "@commitlint/cli": "^19.3.0",
37
- "@commitlint/config-conventional": "^19.2.2",
38
- "@oliasoft-open-source/eslint-config-oliasoft": "^1.0.4",
39
- "@types/jest": "^29.5.12",
40
- "@types/node": "^22.7.5",
41
- "@typescript-eslint/eslint-plugin": "^4.11.0",
42
- "@typescript-eslint/parser": "^4.11.1",
43
- "ajv": "^8.12.0",
34
+ "@commitlint/cli": "^19.7.1",
35
+ "@commitlint/config-conventional": "^19.7.1",
36
+ "@oliasoft-open-source/eslint-config-oliasoft": "^1.2.4",
37
+ "@types/jest": "^29.5.14",
38
+ "@types/node": "^22.13.4",
39
+ "@typescript-eslint/eslint-plugin": "^8.24.1",
40
+ "@typescript-eslint/parser": "^8.24.1",
41
+ "ajv": "^8.17.1",
44
42
  "ajv-errors": "^3.0.0",
45
43
  "ajv-keywords": "^5.1.0",
46
- "esbuild": "^0.23.1",
47
- "eslint": "^7.16.0",
48
- "eslint-config-prettier": "^6.15.0",
49
- "eslint-import-resolver-typescript": "^2.3.0",
50
- "eslint-plugin-import": "^2.27.5",
51
- "eslint-plugin-prettier": "^3.3.0",
52
- "husky": "^4.3.6",
44
+ "esbuild": "^0.25.0",
45
+ "eslint": "^9.20.1",
46
+ "eslint-config-prettier": "^10.0.1",
47
+ "eslint-import-resolver-typescript": "^3.8.2",
48
+ "eslint-plugin-import": "^2.31.0",
49
+ "eslint-plugin-prettier": "^5.2.3",
50
+ "husky": "^9.1.7",
53
51
  "jest": "^29.7.0",
54
- "nodemon": "^3.1.3",
55
- "prettier": "^2.2.1",
56
- "ts-jest": "^29.1.4",
57
- "ts-node": "^10.9.2",
58
- "typescript": "^4.1.3"
52
+ "lint-staged": "^15.4.3",
53
+ "pkgroll": "^2.10.0",
54
+ "prettier": "^3.5.1",
55
+ "ts-jest": "^29.2.5",
56
+ "tsx": "^4.19.3",
57
+ "typescript": "^5.7.3"
59
58
  },
60
59
  "prepublish": "tsc -p tsconfig.build.json"
61
60
  }
@@ -1,15 +0,0 @@
1
- export declare const DEFAULT_MAX_RELATIVE_DIFF: number;
2
- type Without<T, U> = {
3
- [P in Exclude<keyof T, keyof U>]?: never;
4
- };
5
- type XOR<T, U> = (T | U) extends Record<string, unknown> ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;
6
- type toleranceType = XOR<{
7
- relativeDiff: number | string;
8
- }, {
9
- absoluteDiff: string | number;
10
- }>;
11
- export declare const isCloseTo: (firstValue: number | string | null, secondValue: number | string | null, options?: toleranceType) => boolean;
12
- export declare const isCloseToOrGreaterThan: (firstValue: number | string | null, secondValue: number | string | null, options?: toleranceType) => boolean;
13
- export declare const isCloseToOrLessThan: (firstValue: number | string | null, secondValue: number | string | null, options?: toleranceType) => boolean;
14
- export declare const isDeepCloseTo: (a: any, b: any, options?: toleranceType) => boolean;
15
- export {};
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isDeepCloseTo = exports.isCloseToOrLessThan = exports.isCloseToOrGreaterThan = exports.isCloseTo = exports.DEFAULT_MAX_RELATIVE_DIFF = void 0;
4
- const parse_number_1 = require("../parse/parse-number");
5
- const units_1 = require("../units");
6
- const numbers_1 = require("../numbers/numbers");
7
- const utils_1 = require("../utils");
8
- exports.DEFAULT_MAX_RELATIVE_DIFF = Number.EPSILON;
9
- const convertNumbers = (firstValue, secondValue) => {
10
- const { number: firstNumber, unit: firstUnit } = (0, parse_number_1.parseNumber)(firstValue);
11
- const { number: secondNumber, unit: secondUnit } = (0, parse_number_1.parseNumber)(secondValue);
12
- const differentUnits = (firstUnit && secondUnit) && (firstUnit !== secondUnit);
13
- const convertedSecondNumber = differentUnits ? (0, units_1.convertAndGetValue)(secondNumber, firstUnit, secondUnit) : secondNumber;
14
- return {
15
- firstNumber,
16
- secondNumber: convertedSecondNumber
17
- };
18
- };
19
- const getToleranceNumber = (relativeDiff) => {
20
- if (relativeDiff !== null && relativeDiff !== undefined) {
21
- if ((0, utils_1.isNumeric)(relativeDiff) && typeof relativeDiff === 'number') {
22
- return relativeDiff;
23
- }
24
- if ((0, utils_1.isPercentage)(relativeDiff)) {
25
- const percentageValue = (0, numbers_1.toNum)(relativeDiff === null || relativeDiff === void 0 ? void 0 : relativeDiff.toString().replace('%', ''));
26
- if ((0, utils_1.isNumeric)(percentageValue)) {
27
- return percentageValue / 100;
28
- }
29
- }
30
- }
31
- return null;
32
- };
33
- const isCloseTo = (firstValue, secondValue, options = { relativeDiff: exports.DEFAULT_MAX_RELATIVE_DIFF }) => {
34
- const { relativeDiff, absoluteDiff } = options;
35
- const diff = relativeDiff !== null && relativeDiff !== void 0 ? relativeDiff : absoluteDiff;
36
- const toleranceNumber = getToleranceNumber(diff);
37
- if (firstValue === null || secondValue === null) {
38
- return false;
39
- }
40
- const hasUnitFirstValue = (0, units_1.isValueWithUnit)(firstValue);
41
- const hasUnitSecondValue = (0, units_1.isValueWithUnit)(secondValue);
42
- if ((hasUnitFirstValue && !hasUnitSecondValue) || (!hasUnitFirstValue && hasUnitSecondValue)) {
43
- throw new Error(`Parameters must either both have units or both not have units. Received "${firstValue}" and "${secondValue}"`);
44
- }
45
- if (toleranceNumber === null) {
46
- console.warn('Tolerance number is not defined!');
47
- return firstValue === secondValue;
48
- }
49
- if (toleranceNumber <= 0 || toleranceNumber < Number.EPSILON) {
50
- throw Error('Unpredictable results - toleranceNumber should be bigger than zero or less then EPSILON');
51
- }
52
- const { firstNumber, secondNumber } = convertNumbers(firstValue, secondValue);
53
- if (((firstNumber === Infinity || firstNumber === 'Infinity') && (secondNumber === Infinity || secondNumber === 'Infinity'))
54
- || (firstNumber === -Infinity || firstNumber === '-Infinity') && (secondNumber === -Infinity || secondNumber === '-Infinity')) {
55
- return true;
56
- }
57
- if (typeof firstNumber === 'number' && typeof secondNumber === 'number') {
58
- if (firstNumber === secondNumber)
59
- return true;
60
- if (absoluteDiff || firstNumber === 0 || secondNumber === 0) {
61
- const diff = Math.abs(firstNumber - secondNumber);
62
- return (0, exports.isCloseTo)(diff, toleranceNumber, { relativeDiff: '1%' }) || diff < toleranceNumber;
63
- }
64
- else {
65
- return (2 * Math.abs((firstNumber - secondNumber) / (firstNumber + secondNumber)) < toleranceNumber);
66
- }
67
- }
68
- return false;
69
- };
70
- exports.isCloseTo = isCloseTo;
71
- const isCloseToOrGreaterThan = (firstValue, secondValue, options = { relativeDiff: exports.DEFAULT_MAX_RELATIVE_DIFF }) => {
72
- if (firstValue === null || secondValue === null) {
73
- return false;
74
- }
75
- const { firstNumber, secondNumber } = convertNumbers(firstValue, secondValue);
76
- if (typeof firstNumber === 'number' && typeof secondNumber === 'number') {
77
- return (0, exports.isCloseTo)(firstNumber, secondNumber, options) || firstNumber > secondNumber;
78
- }
79
- return false;
80
- };
81
- exports.isCloseToOrGreaterThan = isCloseToOrGreaterThan;
82
- const isCloseToOrLessThan = (firstValue, secondValue, options = { relativeDiff: exports.DEFAULT_MAX_RELATIVE_DIFF }) => {
83
- if (firstValue === null || secondValue === null) {
84
- return false;
85
- }
86
- const { firstNumber, secondNumber } = convertNumbers(firstValue, secondValue);
87
- if (typeof firstNumber === 'number' && typeof secondNumber === 'number') {
88
- return (0, exports.isCloseTo)(firstNumber, secondNumber, options) || firstNumber < secondNumber;
89
- }
90
- return false;
91
- };
92
- exports.isCloseToOrLessThan = isCloseToOrLessThan;
93
- const isDeepCloseTo = (a, b, options = { relativeDiff: exports.DEFAULT_MAX_RELATIVE_DIFF }) => {
94
- if (Array.isArray(a) && Array.isArray(b)) {
95
- if (a.length !== b.length) {
96
- return false;
97
- }
98
- return a.every((a, i) => (0, exports.isDeepCloseTo)(a, b[i], options));
99
- }
100
- if (typeof a === 'object' && a !== null && typeof b === 'object' && b !== null) {
101
- const aKeys = Object.keys(a);
102
- const bKeys = Object.keys(b);
103
- if (aKeys.length !== bKeys.length) {
104
- return false;
105
- }
106
- return aKeys.every((key) => (0, exports.isDeepCloseTo)(a[key], b[key], options));
107
- }
108
- if ((Number.isNaN(a) && Number.isNaN(b))
109
- || (a === '' && b === '')) {
110
- return true;
111
- }
112
- if ((typeof a === 'number' && typeof b === 'number')
113
- || (0, units_1.isValueWithUnit)(a) && (0, units_1.isValueWithUnit)(b)
114
- || ((0, numbers_1.isValidNum)(a) && (0, numbers_1.isValidNum)(b))) {
115
- return (0, exports.isCloseTo)(a, b, options);
116
- }
117
- return true;
118
- };
119
- exports.isDeepCloseTo = isDeepCloseTo;
120
- //# sourceMappingURL=comparison.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"comparison.js","sourceRoot":"","sources":["../../src/comparison/comparison.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,261 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const index_1 = require("../index");
4
- describe('Comparison', () => {
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)(Infinity, Infinity)).toBe(true);
16
- expect((0, index_1.isCloseTo)(NaN, NaN)).toBe(false);
17
- expect((0, index_1.isCloseTo)(0.3, 0.1 + 0.2)).toBe(true);
18
- expect((0, index_1.isCloseTo)(1000.1 + 1000.2, 2000.3)).toBe(true);
19
- expect((0, index_1.isCloseTo)(1, (0.3 * 3) + 0.1)).toBe(true);
20
- expect((0, index_1.isCloseTo)(0, 0.1e-17)).toBe(true);
21
- expect((0, index_1.isCloseTo)('0.3', 0.1 + 0.2)).toBe(true);
22
- expect((0, index_1.isCloseTo)(0, '0.1e-17')).toBe(true);
23
- expect((0, index_1.isCloseTo)(1, 0.99999)).toBe(false);
24
- expect((0, index_1.isCloseTo)(1.12345e-100, 1.6e-100)).toBe(false);
25
- expect((0, index_1.isCloseTo)(1e-18, 1.1e-18)).toBe(false);
26
- expect((0, index_1.isCloseTo)(1.9864e-17, 1.1e-17)).toBe(false);
27
- expect((0, index_1.isCloseTo)(123.000000002, 123.000000003)).toBe(false);
28
- expect((0, index_1.isCloseTo)(100e100, 100.0001e100)).toBe(false);
29
- expect((0, index_1.isCloseTo)(0.000000002, 0.000000003)).toBe(false);
30
- expect((0, index_1.isCloseTo)(-0.000000002, -0.000000003)).toBe(false);
31
- expect((0, index_1.isCloseTo)(123.000000002234, 123.00000000345646)).toBe(false);
32
- expect((0, index_1.isCloseTo)(0, 0.000000001)).toBe(false);
33
- expect((0, index_1.isCloseTo)(123, 124)).toBe(false);
34
- expect((0, index_1.isCloseTo)(123.000123, 123.000124)).toBe(false);
35
- expect((0, index_1.isCloseTo)('123.000123', 123.000124)).toBe(false);
36
- expect((0, index_1.isCloseTo)('', 123.000124)).toBe(false);
37
- expect((0, index_1.isCloseTo)(123.000124, '')).toBe(false);
38
- expect((0, index_1.isCloseTo)('', '')).toBe(false);
39
- expect((0, index_1.isCloseTo)(null, 123.000124)).toBe(false);
40
- expect((0, index_1.isCloseTo)(123.000124, null)).toBe(false);
41
- });
42
- test('Checks the values with given relative difference', () => {
43
- expect((0, index_1.isCloseTo)(1, 0.9999901, { relativeDiff: 0.00001 })).toBe(true);
44
- expect((0, index_1.isCloseTo)(0.9999901, 1, { relativeDiff: 0.00001 })).toBe(true);
45
- expect((0, index_1.isCloseTo)(1.12345e-100, 1.125e-100, { relativeDiff: 1e-2 })).toBe(true);
46
- expect((0, index_1.isCloseTo)(10, 10.1, { relativeDiff: '1%' })).toBe(true);
47
- expect((0, index_1.isCloseTo)(10, 10.2, { relativeDiff: '1%' })).toBe(false);
48
- expect((0, index_1.isCloseTo)(1, 0.99998, { relativeDiff: 0.00001 })).toBe(false);
49
- expect((0, index_1.isCloseTo)(1, 0.99998, { relativeDiff: 0.00001 })).toBe(false);
50
- });
51
- test('Throws an error with given bad relative difference', () => {
52
- expect(() => (0, index_1.isCloseTo)(1, 1, { relativeDiff: 0 })).toThrow(/Unpredictable/);
53
- expect(() => (0, index_1.isCloseTo)(1, 1, { relativeDiff: -0e-10 })).toThrow(/Unpredictable/);
54
- expect(() => (0, index_1.isCloseTo)(1, 1, { relativeDiff: 1e-18 })).toThrow(/Unpredictable/);
55
- });
56
- test('Checks the values with given absolute difference', () => {
57
- expect((0, index_1.isCloseTo)(11.3, 11, { absoluteDiff: 0.5 })).toBe(true);
58
- expect((0, index_1.isCloseTo)(11, 11.34567, { absoluteDiff: 0.5 })).toBe(true);
59
- expect((0, index_1.isCloseTo)(11.5, 11, { absoluteDiff: 0.5 })).toBe(true);
60
- expect((0, index_1.isCloseTo)(11.7, 11, { absoluteDiff: 0.5 })).toBe(false);
61
- expect((0, index_1.isCloseTo)(11.734, 11.7342, { absoluteDiff: 0.001 })).toBe(true);
62
- expect((0, index_1.isCloseTo)(11.734, 11.735, { absoluteDiff: 0.001 })).toBe(true);
63
- expect((0, index_1.isCloseTo)(11.734, 11.736, { absoluteDiff: 0.001 })).toBe(false);
64
- expect((0, index_1.isCloseTo)(0.000001, 0.000002, { absoluteDiff: 0.000001 })).toBe(true);
65
- expect((0, index_1.isCloseTo)(0.000001, 0.0000021, { absoluteDiff: 0.000001 })).toBe(false);
66
- });
67
- test('Throws an error with given bad absolute difference', () => {
68
- expect(() => (0, index_1.isCloseTo)(1, 1, { absoluteDiff: 0 })).toThrow(/Unpredictable/);
69
- expect(() => (0, index_1.isCloseTo)(1, 1, { absoluteDiff: -0e-10 })).toThrow(/Unpredictable/);
70
- expect(() => (0, index_1.isCloseTo)(1, 1, { absoluteDiff: 1e-18 })).toThrow(/Unpredictable/);
71
- });
72
- test('Checks the values with units', () => {
73
- expect((0, index_1.isCloseTo)('123.000123|m', '123.000123|m')).toBe(true);
74
- expect((0, index_1.isCloseTo)('0.123456789|m', '0.123456789|m')).toBe(true);
75
- expect((0, index_1.isCloseTo)('1e-12|m', '1e-12|m')).toBe(true);
76
- expect((0, index_1.isCloseTo)('1|GPa', '1e9|Pa')).toBe(true);
77
- expect((0, index_1.isCloseTo)('1|Pa', '1e-9|GPa')).toBe(true);
78
- expect((0, index_1.isCloseTo)('0.3|m', '0.3000000000000000003|m')).toBe(true);
79
- expect((0, index_1.isCloseTo)('0|m', '0.1e-17|m')).toBe(true);
80
- });
81
- test('Checks the values with different units', () => {
82
- expect((0, index_1.isCloseTo)('0.3|m', '0.0003000000000000000003|km')).toBe(true);
83
- expect((0, index_1.isCloseTo)('77,8355568|cm', '2.55366|ft')).toBe(true);
84
- });
85
- test('Throws an error with given units mistmatch', () => {
86
- expect(() => (0, index_1.isCloseTo)('0.3|sg', '0.3000000000000000003|m')).toThrow(/No conversions found/);
87
- expect(() => (0, index_1.isCloseTo)('77.8355568|cm', '2.55366|kg')).toThrow(/No conversions found/);
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
- 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"');
91
- 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"');
92
- });
93
- });
94
- describe('isDeepCloseTo deeply compares the numerical properties in objects or arrays', () => {
95
- test('pass on similar values', () => {
96
- const a = {
97
- a: 0,
98
- b: '77,8355568|cm',
99
- c: {
100
- d: 2000.3,
101
- e: ['0,3'],
102
- f: 'not a number',
103
- },
104
- };
105
- const b = {
106
- a: '0,1e-17',
107
- b: '2.55366|ft',
108
- c: {
109
- d: 2000.3000000000002,
110
- e: [0.30000000000000004],
111
- f: 'not a number',
112
- },
113
- };
114
- expect((0, index_1.isDeepCloseTo)(a, b)).toBe(true);
115
- });
116
- test('pass on self-compare', () => {
117
- const a = {
118
- a: 1.000001,
119
- b: '123.000123|m',
120
- c: {
121
- d: 1.12345e-100,
122
- e: ['1.000004', 1.000005],
123
- f: 'not a number',
124
- g: '1,23',
125
- h: null,
126
- i: undefined,
127
- j: '',
128
- k: NaN,
129
- l: Infinity,
130
- m: -Infinity,
131
- n: '1.',
132
- o: '1,'
133
- },
134
- };
135
- expect((0, index_1.isDeepCloseTo)(a, a)).toBe(true);
136
- });
137
- test('pass for simple types', () => {
138
- expect((0, index_1.isDeepCloseTo)(0.3, 0.1 + 0.2)).toBe(true);
139
- expect((0, index_1.isDeepCloseTo)(1000.1 + 1000.2, 2000.3)).toBe(true);
140
- expect((0, index_1.isDeepCloseTo)(1, (0.3 * 3) + 0.1)).toBe(true);
141
- expect((0, index_1.isDeepCloseTo)(0, 0.1e-17)).toBe(true);
142
- expect((0, index_1.isDeepCloseTo)('0.3', 0.1 + 0.2)).toBe(true);
143
- expect((0, index_1.isDeepCloseTo)(0, '0.1e-17')).toBe(true);
144
- });
145
- test('pass for object of strings with slash (OW-19280)', () => {
146
- expect((0, index_1.isDeepCloseTo)({ name: '13 3/8, Intermediate, Casing' }, { name: '13 3/8, Intermediate, Casing' })).toBe(true);
147
- });
148
- test('pass when arguments empty', () => {
149
- expect((0, index_1.isDeepCloseTo)([], [])).toBe(true);
150
- expect((0, index_1.isDeepCloseTo)({}, {})).toBe(true);
151
- expect((0, index_1.isDeepCloseTo)(null, null)).toBe(true);
152
- expect((0, index_1.isDeepCloseTo)(undefined, undefined)).toBe(true);
153
- });
154
- test('fail on values not close enough', () => {
155
- const a = {
156
- a: 1.000001,
157
- b: '123.000123|m',
158
- c: {
159
- d: 1.12345e-100,
160
- e: ['1.000004', 1.000005],
161
- f: 'not a number',
162
- g: '1,23',
163
- h: null,
164
- i: undefined,
165
- j: '',
166
- k: NaN,
167
- l: Infinity,
168
- m: -Infinity,
169
- n: '1.',
170
- o: '1,'
171
- },
172
- };
173
- const b = {
174
- a: 1.000001,
175
- b: '123.000123|m',
176
- c: {
177
- d: 1.6e-100,
178
- e: ['1.000004', 1.000005],
179
- f: 'not a number',
180
- g: '1,23',
181
- h: null,
182
- i: undefined,
183
- j: '',
184
- k: NaN,
185
- l: Infinity,
186
- m: -Infinity,
187
- n: '1.',
188
- o: '1,'
189
- },
190
- };
191
- expect((0, index_1.isDeepCloseTo)(a, b)).toBe(false);
192
- });
193
- test('fail on different number of keys', () => {
194
- const a = {
195
- a: 1.000001,
196
- b: '123.000123|m',
197
- c: {
198
- d: 1.12345e-100,
199
- e: ['1.000004', 1.000005],
200
- },
201
- };
202
- const b = {
203
- a: 1.000001,
204
- b: '123.000123|m',
205
- c: {
206
- e: ['1.000004', 1.000005],
207
- },
208
- };
209
- expect((0, index_1.isDeepCloseTo)(a, b)).toBe(false);
210
- });
211
- });
212
- describe('isCloseToOrLessThan', () => {
213
- test('Checks the values are close to each other or less than', () => {
214
- expect((0, index_1.isCloseToOrLessThan)(0.3, 0.1 + 0.2)).toBe(true);
215
- expect((0, index_1.isCloseToOrLessThan)(1000.1 + 1000.2, 2000.3)).toBe(true);
216
- expect((0, index_1.isCloseToOrLessThan)(1, (0.3 * 3) + 0.1)).toBe(true);
217
- expect((0, index_1.isCloseToOrLessThan)(0, 0.1e-17)).toBe(true);
218
- expect((0, index_1.isCloseToOrLessThan)('0.3', 0.1 + 0.2)).toBe(true);
219
- expect((0, index_1.isCloseToOrLessThan)(0, '0.1e-17')).toBe(true);
220
- expect((0, index_1.isCloseToOrLessThan)(1e-18, 1.1e-18)).toBe(true);
221
- expect((0, index_1.isCloseToOrLessThan)(1.6e-103, 1.6e-102)).toBe(true);
222
- expect((0, index_1.isCloseToOrLessThan)(1.0999e-17, 1.1e-17)).toBe(true);
223
- expect((0, index_1.isCloseToOrLessThan)(123.000000002, 123.000000003)).toBe(true);
224
- expect((0, index_1.isCloseToOrLessThan)(100e100, 100.0001e100)).toBe(true);
225
- expect((0, index_1.isCloseToOrLessThan)(0.000000002, 0.000000003)).toBe(true);
226
- expect((0, index_1.isCloseToOrLessThan)(123.000000002234, 123.00000000345646)).toBe(true);
227
- expect((0, index_1.isCloseToOrLessThan)(0, 0.000000001)).toBe(true);
228
- expect((0, index_1.isCloseToOrLessThan)(123, 124)).toBe(true);
229
- expect((0, index_1.isCloseToOrLessThan)(123.000123, 123.000124)).toBe(true);
230
- expect((0, index_1.isCloseToOrLessThan)(-0.000000002, -0.000000003)).toBe(false);
231
- expect((0, index_1.isCloseToOrLessThan)(1, 0.99999)).toBe(false);
232
- expect((0, index_1.isCloseToOrLessThan)(null, 123.000124)).toBe(false);
233
- expect((0, index_1.isCloseToOrLessThan)(123.000124, null)).toBe(false);
234
- });
235
- });
236
- describe('isCloseToOrGreaterThan', () => {
237
- test('Checks the values are close to each other or greater than', () => {
238
- expect((0, index_1.isCloseToOrGreaterThan)(0.3, 0.1 + 0.2)).toBe(true);
239
- expect((0, index_1.isCloseToOrGreaterThan)(1000.1 + 1000.2, 2000.3)).toBe(true);
240
- expect((0, index_1.isCloseToOrGreaterThan)(1, (0.3 * 3) + 0.1)).toBe(true);
241
- expect((0, index_1.isCloseToOrGreaterThan)(0, 0.1e-17)).toBe(true);
242
- expect((0, index_1.isCloseToOrGreaterThan)('0.3', 0.1 + 0.2)).toBe(true);
243
- expect((0, index_1.isCloseToOrGreaterThan)(0, '0.1e-17')).toBe(true);
244
- expect((0, index_1.isCloseToOrGreaterThan)(1.1e-18, 1e-18)).toBe(true);
245
- expect((0, index_1.isCloseToOrGreaterThan)(1.6e-102, 1.6e-103)).toBe(true);
246
- expect((0, index_1.isCloseToOrGreaterThan)(1.1e-17, 1.0999e-17)).toBe(true);
247
- expect((0, index_1.isCloseToOrGreaterThan)(123.000000003, 123.000000002)).toBe(true);
248
- expect((0, index_1.isCloseToOrGreaterThan)(100.0001e100, 100e100)).toBe(true);
249
- expect((0, index_1.isCloseToOrGreaterThan)(0.000000003, 0.000000002)).toBe(true);
250
- expect((0, index_1.isCloseToOrGreaterThan)(123.00000000345646, 123.000000002234)).toBe(true);
251
- expect((0, index_1.isCloseToOrGreaterThan)(0.000000001, 0)).toBe(true);
252
- expect((0, index_1.isCloseToOrGreaterThan)(124, 123)).toBe(true);
253
- expect((0, index_1.isCloseToOrGreaterThan)(123.000124, 123.000123)).toBe(true);
254
- expect((0, index_1.isCloseToOrGreaterThan)(-0.000000003, -0.000000002)).toBe(false);
255
- expect((0, index_1.isCloseToOrGreaterThan)(0.99999, 1)).toBe(false);
256
- expect((0, index_1.isCloseToOrGreaterThan)(null, 123.000124)).toBe(false);
257
- expect((0, index_1.isCloseToOrGreaterThan)(123.000124, null)).toBe(false);
258
- });
259
- });
260
- });
261
- //# sourceMappingURL=comparison.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"comparison.test.js","sourceRoot":"","sources":["../../src/comparison/comparison.test.ts"],"names":[],"mappings":"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"}