@utiliread/primitives 1.0.0-42 → 1.0.0-46
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/cjs/number-formatter.js +6 -6
- package/dist/cjs/number-formatter.js.map +1 -1
- package/dist/cjs/number-formatter.spec.js +57 -57
- package/dist/cjs/number-formatter.spec.js.map +1 -1
- package/dist/cjs/register-convention.js +2 -2
- package/dist/cjs/register-convention.js.map +1 -1
- package/dist/cjs/register-convention.spec.js +7 -7
- package/dist/cjs/register-convention.spec.js.map +1 -1
- package/dist/cjs/register-library.spec.js +4 -4
- package/dist/cjs/register-library.spec.js.map +1 -1
- package/dist/cjs/repository.spec.js +6 -6
- package/dist/cjs/repository.spec.js.map +1 -1
- package/dist/cjs/step.spec.js +4 -4
- package/dist/cjs/step.spec.js.map +1 -1
- package/dist/esm/number-formatter.d.ts +1 -1
- package/dist/esm/number-formatter.js +6 -6
- package/dist/esm/number-formatter.js.map +1 -1
- package/dist/esm/number-formatter.spec.js +50 -50
- package/dist/esm/number-formatter.spec.js.map +1 -1
- package/dist/esm/register-definition.d.ts +2 -0
- package/locales/da/registers.json +198 -0
- package/locales/en/registers.json +198 -0
- package/package.json +5 -5
- package/src/number-formatter.spec.ts +52 -51
- package/src/number-formatter.ts +8 -8
- package/src/register-definition.ts +7 -1
|
@@ -4,50 +4,50 @@ import { NumberFormatter, Parts, localeDecimalSeparator, invariantDecimalSeparat
|
|
|
4
4
|
describe("toParts and toPrecision", () => {
|
|
5
5
|
it("should format correctly", () => {
|
|
6
6
|
const data: [number, number, Parts][] = [
|
|
7
|
-
[77.1274, 1, { invariantPrecisionString: "8e+1",
|
|
8
|
-
[77.1274, 2, { invariantPrecisionString: "77",
|
|
9
|
-
[77.1274, 4, { invariantPrecisionString: "77.13",
|
|
10
|
-
[77.1274, 5, { invariantPrecisionString: "77.127",
|
|
11
|
-
[77.1274, 6, { invariantPrecisionString: "77.1274",
|
|
12
|
-
[77.1274, 7, { invariantPrecisionString: "77.12740",
|
|
13
|
-
[77.1274, 15, { invariantPrecisionString: "77.1274000000000",
|
|
14
|
-
[77.1274, 16, { invariantPrecisionString: "77.12739999999999",
|
|
15
|
-
[77.1274, 17, { invariantPrecisionString: "77.127399999999994",
|
|
16
|
-
[77.1274, 18, { invariantPrecisionString: "77.1273999999999944",
|
|
17
|
-
[77.1274, 19, { invariantPrecisionString: "77.12739999999999441",
|
|
18
|
-
[77.1274, 20, { invariantPrecisionString: "77.127399999999994407",
|
|
19
|
-
[77.1274, 21, { invariantPrecisionString: "77.1273999999999944066",
|
|
20
|
-
[0.00000123, 2, { invariantPrecisionString: "0.0000012",
|
|
21
|
-
[0.000000123, 2, { invariantPrecisionString: "1.2e-7",
|
|
22
|
-
[0.00000123, 21, { invariantPrecisionString: "0.00000123000000000000008198",
|
|
23
|
-
[123456, 3, { invariantPrecisionString: "1.23e+5",
|
|
24
|
-
[Number.MAX_VALUE, 3, { invariantPrecisionString: "1.80e+308",
|
|
25
|
-
[123456, 15, { invariantPrecisionString: "123456.000000000",
|
|
26
|
-
[0, 5, { invariantPrecisionString: "0.0000",
|
|
27
|
-
[0.000001, 1, { invariantPrecisionString: "0.000001",
|
|
28
|
-
[0.000001, 10, { invariantPrecisionString: "0.000001000000000",
|
|
29
|
-
[0.0000001, 10, { invariantPrecisionString: "1.000000000e-7",
|
|
30
|
-
[0.00000000001, 1, { invariantPrecisionString: "1e-11",
|
|
31
|
-
[0.00000000001, 2, { invariantPrecisionString: "1.0e-11",
|
|
32
|
-
[55, 2, { invariantPrecisionString: "55",
|
|
33
|
-
[55, 1, { invariantPrecisionString: "6e+1",
|
|
34
|
-
[-55, 2, { invariantPrecisionString: "-55",
|
|
35
|
-
[-55, 1, { invariantPrecisionString: "-6e+1",
|
|
36
|
-
[9.59, 1, { invariantPrecisionString: "1e+1",
|
|
37
|
-
[9.59, 2, { invariantPrecisionString: "10",
|
|
38
|
-
[9.95, 2, { invariantPrecisionString: "10",
|
|
39
|
-
[9.96, 2, { invariantPrecisionString: "10",
|
|
40
|
-
[-555555555555555555555, 1, { invariantPrecisionString: "-6e+20",
|
|
41
|
-
[-5555555555555555555555, 1, { invariantPrecisionString: "-6e+21",
|
|
42
|
-
[18014398509482012, 21, { invariantPrecisionString: "18014398509482012.0000",
|
|
43
|
-
[180143985094820121234, 21, { invariantPrecisionString: "180143985094820134912",
|
|
44
|
-
[0.1, 21, { invariantPrecisionString: "0.100000000000000005551",
|
|
45
|
-
[Number.EPSILON, 2, { invariantPrecisionString: "2.2e-16",
|
|
46
|
-
[Number.EPSILON, 21, { invariantPrecisionString: "2.22044604925031308085e-16",
|
|
47
|
-
[Number.NaN, 3, { invariantPrecisionString: "NaN",
|
|
48
|
-
[Number.POSITIVE_INFINITY, 3, { invariantPrecisionString: "Infinity",
|
|
49
|
-
[Number.NEGATIVE_INFINITY, 3, { invariantPrecisionString: "-Infinity",
|
|
50
|
-
[164735280, 7, { invariantPrecisionString: "1.647353e+8",
|
|
7
|
+
[77.1274, 1, { invariantPrecisionString: "8e+1", invariantCoefficientString: "8", exponent: 1, noOfCoefficientDecimals: 0 }],
|
|
8
|
+
[77.1274, 2, { invariantPrecisionString: "77", invariantCoefficientString: "77", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
9
|
+
[77.1274, 4, { invariantPrecisionString: "77.13", invariantCoefficientString: "77.13", exponent: 0, noOfCoefficientDecimals: 2 }],
|
|
10
|
+
[77.1274, 5, { invariantPrecisionString: "77.127", invariantCoefficientString: "77.127", exponent: 0, noOfCoefficientDecimals: 3 }],
|
|
11
|
+
[77.1274, 6, { invariantPrecisionString: "77.1274", invariantCoefficientString: "77.1274", exponent: 0, noOfCoefficientDecimals: 4 }],
|
|
12
|
+
[77.1274, 7, { invariantPrecisionString: "77.12740", invariantCoefficientString: "77.12740", exponent: 0, noOfCoefficientDecimals: 5 }],
|
|
13
|
+
[77.1274, 15, { invariantPrecisionString: "77.1274000000000", invariantCoefficientString: "77.1274000000000", exponent: 0, noOfCoefficientDecimals: 13 }],
|
|
14
|
+
[77.1274, 16, { invariantPrecisionString: "77.12739999999999", invariantCoefficientString: "77.12739999999999", exponent: 0, noOfCoefficientDecimals: 14 }],
|
|
15
|
+
[77.1274, 17, { invariantPrecisionString: "77.127399999999994", invariantCoefficientString: "77.127399999999994", exponent: 0, noOfCoefficientDecimals: 15 }],
|
|
16
|
+
[77.1274, 18, { invariantPrecisionString: "77.1273999999999944", invariantCoefficientString: "77.1273999999999944", exponent: 0, noOfCoefficientDecimals: 16 }],
|
|
17
|
+
[77.1274, 19, { invariantPrecisionString: "77.12739999999999441", invariantCoefficientString: "77.12739999999999441", exponent: 0, noOfCoefficientDecimals: 17 }],
|
|
18
|
+
[77.1274, 20, { invariantPrecisionString: "77.127399999999994407", invariantCoefficientString: "77.127399999999994407", exponent: 0, noOfCoefficientDecimals: 18 }],
|
|
19
|
+
[77.1274, 21, { invariantPrecisionString: "77.1273999999999944066", invariantCoefficientString: "77.1273999999999944066", exponent: 0, noOfCoefficientDecimals: 19 }],
|
|
20
|
+
[0.00000123, 2, { invariantPrecisionString: "0.0000012", invariantCoefficientString: "0.0000012", exponent: 0, noOfCoefficientDecimals: 7 }],
|
|
21
|
+
[0.000000123, 2, { invariantPrecisionString: "1.2e-7", invariantCoefficientString: "1.2", exponent: -7, noOfCoefficientDecimals: 1 }],
|
|
22
|
+
[0.00000123, 21, { invariantPrecisionString: "0.00000123000000000000008198", invariantCoefficientString: "0.00000123000000000000008198", exponent: 0, noOfCoefficientDecimals: 26 }],
|
|
23
|
+
[123456, 3, { invariantPrecisionString: "1.23e+5", invariantCoefficientString: "1.23", exponent: 5, noOfCoefficientDecimals: 2 }],
|
|
24
|
+
[Number.MAX_VALUE, 3, { invariantPrecisionString: "1.80e+308", invariantCoefficientString: "1.80", exponent: 308, noOfCoefficientDecimals: 2 }],
|
|
25
|
+
[123456, 15, { invariantPrecisionString: "123456.000000000", invariantCoefficientString: "123456.000000000", exponent: 0, noOfCoefficientDecimals: 9 }],
|
|
26
|
+
[0, 5, { invariantPrecisionString: "0.0000", invariantCoefficientString: "0.0000", exponent: 0, noOfCoefficientDecimals: 4 }],
|
|
27
|
+
[0.000001, 1, { invariantPrecisionString: "0.000001", invariantCoefficientString: "0.000001", exponent: 0, noOfCoefficientDecimals: 6 }],
|
|
28
|
+
[0.000001, 10, { invariantPrecisionString: "0.000001000000000", invariantCoefficientString: "0.000001000000000", exponent: 0, noOfCoefficientDecimals: 15 }],
|
|
29
|
+
[0.0000001, 10, { invariantPrecisionString: "1.000000000e-7", invariantCoefficientString: "1.000000000", exponent: -7, noOfCoefficientDecimals: 9 }],
|
|
30
|
+
[0.00000000001, 1, { invariantPrecisionString: "1e-11", invariantCoefficientString: "1", exponent: -11, noOfCoefficientDecimals: 0 }],
|
|
31
|
+
[0.00000000001, 2, { invariantPrecisionString: "1.0e-11", invariantCoefficientString: "1.0", exponent: -11, noOfCoefficientDecimals: 1 }],
|
|
32
|
+
[55, 2, { invariantPrecisionString: "55", invariantCoefficientString: "55", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
33
|
+
[55, 1, { invariantPrecisionString: "6e+1", invariantCoefficientString: "6", exponent: 1, noOfCoefficientDecimals: 0 }],
|
|
34
|
+
[-55, 2, { invariantPrecisionString: "-55", invariantCoefficientString: "-55", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
35
|
+
[-55, 1, { invariantPrecisionString: "-6e+1", invariantCoefficientString: "-6", exponent: 1, noOfCoefficientDecimals: 0 }],
|
|
36
|
+
[9.59, 1, { invariantPrecisionString: "1e+1", invariantCoefficientString: "1", exponent: 1, noOfCoefficientDecimals: 0 }],
|
|
37
|
+
[9.59, 2, { invariantPrecisionString: "10", invariantCoefficientString: "10", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
38
|
+
[9.95, 2, { invariantPrecisionString: "10", invariantCoefficientString: "10", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
39
|
+
[9.96, 2, { invariantPrecisionString: "10", invariantCoefficientString: "10", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
40
|
+
[-555555555555555555555, 1, { invariantPrecisionString: "-6e+20", invariantCoefficientString: "-6", exponent: 20, noOfCoefficientDecimals: 0 }],
|
|
41
|
+
[-5555555555555555555555, 1, { invariantPrecisionString: "-6e+21", invariantCoefficientString: "-6", exponent: 21, noOfCoefficientDecimals: 0 }],
|
|
42
|
+
[18014398509482012, 21, { invariantPrecisionString: "18014398509482012.0000", invariantCoefficientString: "18014398509482012.0000", exponent: 0, noOfCoefficientDecimals: 4 }],
|
|
43
|
+
[180143985094820121234, 21, { invariantPrecisionString: "180143985094820134912", invariantCoefficientString: "180143985094820134912", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
44
|
+
[0.1, 21, { invariantPrecisionString: "0.100000000000000005551", invariantCoefficientString: "0.100000000000000005551", exponent: 0, noOfCoefficientDecimals: 21 }],
|
|
45
|
+
[Number.EPSILON, 2, { invariantPrecisionString: "2.2e-16", invariantCoefficientString: "2.2", exponent: -16, noOfCoefficientDecimals: 1 }],
|
|
46
|
+
[Number.EPSILON, 21, { invariantPrecisionString: "2.22044604925031308085e-16", invariantCoefficientString: "2.22044604925031308085", exponent: -16, noOfCoefficientDecimals: 20 }],
|
|
47
|
+
[Number.NaN, 3, { invariantPrecisionString: "NaN", invariantCoefficientString: "NaN", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
48
|
+
[Number.POSITIVE_INFINITY, 3, { invariantPrecisionString: "Infinity", invariantCoefficientString: "Infinity", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
49
|
+
[Number.NEGATIVE_INFINITY, 3, { invariantPrecisionString: "-Infinity", invariantCoefficientString: "-Infinity", exponent: 0, noOfCoefficientDecimals: 0 }],
|
|
50
|
+
[164735280, 7, { invariantPrecisionString: "1.647353e+8", invariantCoefficientString: "1.647353", exponent: 8, noOfCoefficientDecimals: 6 }],
|
|
51
51
|
];
|
|
52
52
|
|
|
53
53
|
for (const [value, precision, expectedParts] of data) {
|
|
@@ -58,12 +58,7 @@ describe("toParts and toPrecision", () => {
|
|
|
58
58
|
|
|
59
59
|
const parts = NumberFormatter.getParts(value, precision);
|
|
60
60
|
expect(parts.invariantPrecisionString).to.equal(expectedParts.invariantPrecisionString);
|
|
61
|
-
|
|
62
|
-
expect(isNaN(parts.coefficient)).to.equal(true);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
expect(parts.coefficient).to.equal(expectedParts.coefficient);
|
|
66
|
-
}
|
|
61
|
+
expect(parts.invariantCoefficientString).to.equal(expectedParts.invariantCoefficientString);
|
|
67
62
|
expect(parts.exponent).to.equal(expectedParts.exponent);
|
|
68
63
|
expect(parts.noOfCoefficientDecimals).to.equal(expectedParts.noOfCoefficientDecimals);
|
|
69
64
|
}
|
|
@@ -91,4 +86,10 @@ describe("toFixed", () => {
|
|
|
91
86
|
expect(NumberFormatter.toLocaleFixed(value, precision)).to.equal(localeExpected);
|
|
92
87
|
}
|
|
93
88
|
})
|
|
94
|
-
})
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
describe("toLocaleFixed", () => {
|
|
92
|
+
it("should format correctly", () => {
|
|
93
|
+
expect(NumberFormatter.toLocaleFixed(400, 2)).to.equal("400");
|
|
94
|
+
})
|
|
95
|
+
});
|
package/src/number-formatter.ts
CHANGED
|
@@ -3,8 +3,8 @@ export const localeDecimalSeparator = (0.1).toLocaleString()[1];
|
|
|
3
3
|
|
|
4
4
|
export interface Parts {
|
|
5
5
|
invariantPrecisionString: string;
|
|
6
|
+
invariantCoefficientString: string;
|
|
6
7
|
exponent: number;
|
|
7
|
-
coefficient: number;
|
|
8
8
|
noOfCoefficientDecimals: number;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -29,7 +29,7 @@ class Formatter {
|
|
|
29
29
|
public toFixed(value: number, precision: number) {
|
|
30
30
|
const parts = this.getParts(value, precision);
|
|
31
31
|
if (parts.noOfCoefficientDecimals < parts.exponent) {
|
|
32
|
-
const number = parts.
|
|
32
|
+
const number = parts.invariantCoefficientString.replace(invariantDecimalSeparator, "");
|
|
33
33
|
const zeros = parts.exponent - parts.noOfCoefficientDecimals;
|
|
34
34
|
return `${number}${"0".repeat(zeros)}`;
|
|
35
35
|
}
|
|
@@ -47,15 +47,15 @@ class Formatter {
|
|
|
47
47
|
const precisionString = this.toPrecision(value, precision);
|
|
48
48
|
if (precisionString.indexOf("e") >= 0) {
|
|
49
49
|
const match = /(.*)e([\+-]\d+)$/.exec(precisionString)!;
|
|
50
|
-
const
|
|
50
|
+
const coefficientString = match[1];
|
|
51
51
|
const exponent = parseInt(match[2]);
|
|
52
|
-
const decimalSeparatorIndex =
|
|
52
|
+
const decimalSeparatorIndex = coefficientString.indexOf(invariantDecimalSeparator);
|
|
53
53
|
const noOfCoefficientDecimals = decimalSeparatorIndex >= 0
|
|
54
|
-
?
|
|
54
|
+
? coefficientString.length - decimalSeparatorIndex - 1
|
|
55
55
|
: 0;
|
|
56
56
|
return {
|
|
57
57
|
invariantPrecisionString: precisionString,
|
|
58
|
-
|
|
58
|
+
invariantCoefficientString: coefficientString,
|
|
59
59
|
exponent,
|
|
60
60
|
noOfCoefficientDecimals,
|
|
61
61
|
};
|
|
@@ -67,7 +67,7 @@ class Formatter {
|
|
|
67
67
|
: 0;
|
|
68
68
|
return {
|
|
69
69
|
invariantPrecisionString: precisionString,
|
|
70
|
-
|
|
70
|
+
invariantCoefficientString: precisionString,
|
|
71
71
|
exponent: 0,
|
|
72
72
|
noOfCoefficientDecimals,
|
|
73
73
|
};
|
|
@@ -75,4 +75,4 @@ class Formatter {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
export const NumberFormatter = new Formatter();
|
|
78
|
+
export const NumberFormatter = new Formatter();
|
|
@@ -14,4 +14,10 @@ export interface RegisterDefinition {
|
|
|
14
14
|
units: ReadonlyArray<UnitId>;
|
|
15
15
|
/// Whether the register can only be resolved by "present value".
|
|
16
16
|
immediate?: true;
|
|
17
|
-
|
|
17
|
+
/// An optional concise register name.
|
|
18
|
+
/// Only used for custom registers as locales exist for standard registers.
|
|
19
|
+
name?: string;
|
|
20
|
+
/// An optional register description.
|
|
21
|
+
/// Only used for custom registers as locales exist for standard registers.
|
|
22
|
+
description?: string;
|
|
23
|
+
}
|