Skip to content

Commit 1f07a44

Browse files
authored
Rename metric -> SI (#192)
* Rename metric -> SI * Fix build * Fix again
1 parent daa9b05 commit 1f07a44

File tree

9 files changed

+71
-71
lines changed

9 files changed

+71
-71
lines changed

docs/examples/measuresDimension.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { Measure, MetricSystem } from "safe-units";
1+
import { Measure, SIUnitSystem } from "safe-units";
22

33
// START
4-
const meter = Measure.dimension(MetricSystem, "length");
4+
const meter = Measure.dimension(SIUnitSystem, "length");
55
console.log(meter); // 1 m
66

7-
const second = Measure.dimension(MetricSystem, "time");
7+
const second = Measure.dimension(SIUnitSystem, "time");
88
console.log(second); // 1 s
99
// END

docs/examples/measuresDimensionless.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { Measure, MetricSystem, meters } from "safe-units";
1+
import { Measure, SIUnitSystem, meters } from "safe-units";
22

33
// START
4-
const scalar = Measure.dimensionless(MetricSystem, 2);
4+
const scalar = Measure.dimensionless(SIUnitSystem, 2);
55
const distance = Measure.of(20, meters);
66
const doubled = distance.times(scalar); // 40 m
77
// END

docs/examples/measuresScale.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { Measure, MetricSystem, seconds } from "safe-units";
1+
import { Measure, SIUnitSystem, seconds } from "safe-units";
22

33
// START
44
const t = Measure.of(10, seconds);
55
const doubledShort = t.scale(2); // 20 s
6-
const doubledLong = t.times(Measure.dimensionless(MetricSystem, 2)); // 20 s
6+
const doubledLong = t.times(Measure.dimensionless(SIUnitSystem, 2)); // 20 s
77
// END
88

99
console.log(doubledShort, doubledLong);

src/measure/genericMeasureFactory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export function createMeasureType<N, S extends {} = {}>(
7171
const { createMeasure, isMeasure } = createMeasureClass(num);
7272

7373
const common: GenericMeasureCommon<N> = {
74-
...getGenericMeasureStaticMethods(),
74+
...getGenericMeasureStaticMethods(num),
7575
isMeasure,
7676
dimensionless: (unitSystem, value) => createMeasure(value, unitSystem.createDimensionlessUnit(), unitSystem),
7777
dimension: (unitSystem, dimension, symbol) =>

src/measure/genericMeasureStatic.ts

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { GenericMeasure } from "./genericMeasure";
2-
import { BinaryFn, PrefixFn, SpreadFn } from "./genericMeasureUtils";
1+
import { GenericMeasure, NumericOperations } from "./genericMeasure";
2+
import { BinaryFn, PrefixFn, SpreadFn, wrapBinaryFn, wrapReducerFn } from "./genericMeasureUtils";
33
import { DivideUnits, MultiplyUnits, Unit } from "./unitTypeArithmetic";
44

55
export interface GenericMeasureStatic<N> {
@@ -39,16 +39,13 @@ export interface GenericMeasureStatic<N> {
3939
prefix(prefix: string, multiplier: N): PrefixFn<N>;
4040
}
4141

42-
export const getGenericMeasureStaticMethods = <N>(): GenericMeasureStatic<N> => {
43-
const add: BinaryFn<N> = (left, right) => left.plus(right);
44-
const min: BinaryFn<N> = (min, curr) => (curr.lt(min) ? curr : min);
45-
const max: BinaryFn<N> = (max, curr) => (curr.gt(max) ? curr : max);
42+
export const getGenericMeasureStaticMethods = <N>(num: NumericOperations<N>): GenericMeasureStatic<N> => {
4643
return {
47-
sum: reduce(add as any),
48-
min: reduce(min as any),
49-
max: reduce(max as any),
50-
add,
51-
subtract: (left, right) => left.minus(right),
44+
sum: wrapReducerFn(num.add),
45+
min: wrapReducerFn((left, right) => (num.compare(left, right) < 0 ? left : right)),
46+
max: wrapReducerFn((left, right) => (num.compare(left, right) < 0 ? right : left)),
47+
add: wrapBinaryFn(num.add),
48+
subtract: wrapBinaryFn(num.sub),
5249
multiply: (left, right) => left.times(right),
5350
divide: (left, right) => left.over(right),
5451
prefix: (prefix, multiplier) => {
@@ -59,12 +56,3 @@ export const getGenericMeasureStaticMethods = <N>(): GenericMeasureStatic<N> =>
5956
},
6057
};
6158
};
62-
63-
export function reduce<N>(
64-
fn: <Basis, U extends Unit<Basis>>(
65-
left: GenericMeasure<N, Basis, U>,
66-
right: GenericMeasure<N, Basis, U>,
67-
) => GenericMeasure<N, any, U>,
68-
): SpreadFn<N> {
69-
return (first, ...rest) => rest.reduce(fn, first);
70-
}

src/unit/__test__/trigTests.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { Measure } from "../../measure/numberMeasure";
22
import { degrees, piRadians } from "../angle";
3-
import { MetricSystem, meters, radians } from "../base";
3+
import { SIUnitSystem, meters, radians } from "../base";
44
import * as Trig from "../trig";
55

66
describe("Trig", () => {
77
const zeroRadians = Measure.of(0, radians);
8-
const zero = Measure.dimensionless(MetricSystem, 0);
8+
const zero = Measure.dimensionless(SIUnitSystem, 0);
99

1010
it("normal", () => {
11-
expect(Trig.cos(zeroRadians)).toEqual(Measure.dimensionless(MetricSystem, 1));
11+
expect(Trig.cos(zeroRadians)).toEqual(Measure.dimensionless(SIUnitSystem, 1));
1212
expect(Trig.sin(zeroRadians)).toEqual(zero);
1313
expect(Trig.tan(zeroRadians)).toEqual(zero);
1414
});

src/unit/base.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { GenericMeasureType } from "../measure";
22
import { Measure } from "../measure/numberMeasure";
33
import { UnitSystem } from "../measure/unitSystem";
44

5-
const MetricSystemBasis = {
5+
const SIUnitSystemBasis = {
66
length: "m",
77
mass: "kg",
88
time: "s",
@@ -15,23 +15,23 @@ const MetricSystemBasis = {
1515
memory: "b",
1616
} as const;
1717

18-
type MetricSystemBasis = typeof MetricSystemBasis;
18+
type SIUnitSystemBasis = typeof SIUnitSystemBasis;
1919

20-
export interface MetricSystem extends MetricSystemBasis {}
20+
export interface SIUnitSystem extends SIUnitSystemBasis {}
2121

22-
export const MetricSystem = UnitSystem.from<MetricSystem>(MetricSystemBasis);
22+
export const SIUnitSystem = UnitSystem.from<SIUnitSystem>(SIUnitSystemBasis);
2323

2424
export const createSIBaseUnits = <N>(measure: GenericMeasureType<N, any>) => ({
25-
meters: measure.dimension(MetricSystem, "length"),
26-
kilograms: measure.dimension(MetricSystem, "mass"),
27-
seconds: measure.dimension(MetricSystem, "time"),
28-
amperes: measure.dimension(MetricSystem, "current"),
29-
kelvin: measure.dimension(MetricSystem, "temperature"),
30-
moles: measure.dimension(MetricSystem, "substance"),
31-
candelas: measure.dimension(MetricSystem, "intensity"),
32-
radians: measure.dimension(MetricSystem, "planeAngle"),
33-
steradians: measure.dimension(MetricSystem, "solidAngle"),
34-
bits: measure.dimension(MetricSystem, "memory"),
25+
meters: measure.dimension(SIUnitSystem, "length"),
26+
kilograms: measure.dimension(SIUnitSystem, "mass"),
27+
seconds: measure.dimension(SIUnitSystem, "time"),
28+
amperes: measure.dimension(SIUnitSystem, "current"),
29+
kelvin: measure.dimension(SIUnitSystem, "temperature"),
30+
moles: measure.dimension(SIUnitSystem, "substance"),
31+
candelas: measure.dimension(SIUnitSystem, "intensity"),
32+
radians: measure.dimension(SIUnitSystem, "planeAngle"),
33+
steradians: measure.dimension(SIUnitSystem, "solidAngle"),
34+
bits: measure.dimension(SIUnitSystem, "memory"),
3535
});
3636

3737
export const { meters, kilograms, seconds, amperes, kelvin, moles, candelas, radians, steradians, bits } =

src/unit/quantities.ts

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,69 @@
11
import { GenericMeasure, LiftMeasure } from "../measure/genericMeasure";
22
import { Measure } from "../measure/numberMeasure";
33
import { DimensionlessUnit } from "../measure/unitTypeArithmetic";
4-
import * as Base from "./base";
4+
import {
5+
amperes,
6+
bits,
7+
candelas,
8+
kelvin,
9+
kilograms,
10+
meters,
11+
moles,
12+
radians,
13+
seconds,
14+
SIUnitSystem,
15+
steradians,
16+
} from "./base";
517

618
// Dimensionless
719

820
/** A measure without any unit */
9-
export type Dimensionless<N = number> = GenericMeasure<N, Base.MetricSystem, DimensionlessUnit<Base.MetricSystem>>;
10-
export const Dimensionless: Dimensionless = Measure.dimensionless(Base.MetricSystem, 1);
21+
export type Dimensionless<N = number> = GenericMeasure<N, SIUnitSystem, DimensionlessUnit<SIUnitSystem>>;
22+
export const Dimensionless: Dimensionless = Measure.dimensionless(SIUnitSystem, 1);
1123

1224
// Base units
1325

1426
/** meters */
15-
export type Length<N = number> = LiftMeasure<typeof Base.meters, N>;
16-
export const Length: Length = Base.meters;
27+
export type Length<N = number> = LiftMeasure<typeof meters, N>;
28+
export const Length: Length = meters;
1729

1830
/** kilograms */
19-
export type Mass<N = number> = LiftMeasure<typeof Base.kilograms, N>;
20-
export const Mass: Mass = Base.kilograms;
31+
export type Mass<N = number> = LiftMeasure<typeof kilograms, N>;
32+
export const Mass: Mass = kilograms;
2133

2234
/** seconds */
23-
export type Time<N = number> = LiftMeasure<typeof Base.seconds, N>;
24-
export const Time: Time = Base.seconds;
35+
export type Time<N = number> = LiftMeasure<typeof seconds, N>;
36+
export const Time: Time = seconds;
2537

2638
/** Amperes */
27-
export type ElectricCurrent<N = number> = LiftMeasure<typeof Base.amperes, N>;
28-
export const ElectricCurrent: ElectricCurrent = Base.amperes;
39+
export type ElectricCurrent<N = number> = LiftMeasure<typeof amperes, N>;
40+
export const ElectricCurrent: ElectricCurrent = amperes;
2941

3042
/** Kelvin */
31-
export type Temperature<N = number> = LiftMeasure<typeof Base.kelvin, N>;
32-
export const Temperature: Temperature = Base.kelvin;
43+
export type Temperature<N = number> = LiftMeasure<typeof kelvin, N>;
44+
export const Temperature: Temperature = kelvin;
3345

3446
/** moles */
35-
export type AmountOfSubstance<N = number> = LiftMeasure<typeof Base.moles, N>;
36-
export const AmountOfSubstance: AmountOfSubstance = Base.moles;
47+
export type AmountOfSubstance<N = number> = LiftMeasure<typeof moles, N>;
48+
export const AmountOfSubstance: AmountOfSubstance = moles;
3749

3850
/** candelas */
39-
export type LuminousIntensity<N = number> = LiftMeasure<typeof Base.candelas, N>;
40-
export const LuminousIntensity: LuminousIntensity = Base.candelas;
51+
export type LuminousIntensity<N = number> = LiftMeasure<typeof candelas, N>;
52+
export const LuminousIntensity: LuminousIntensity = candelas;
4153

4254
/** bits */
43-
export type Memory<N = number> = LiftMeasure<typeof Base.bits, N>;
44-
export const Memory: Memory = Base.bits;
55+
export type Memory<N = number> = LiftMeasure<typeof bits, N>;
56+
export const Memory: Memory = bits;
4557

4658
// Angular base units
4759

4860
/** radians */
49-
export type PlaneAngle<N = number> = LiftMeasure<typeof Base.radians, N>;
50-
export const PlaneAngle: PlaneAngle = Base.radians;
61+
export type PlaneAngle<N = number> = LiftMeasure<typeof radians, N>;
62+
export const PlaneAngle: PlaneAngle = radians;
5163

5264
/** steradians */
53-
export type SolidAngle<N = number> = LiftMeasure<typeof Base.steradians, N>;
54-
export const SolidAngle: SolidAngle = Base.steradians;
65+
export type SolidAngle<N = number> = LiftMeasure<typeof steradians, N>;
66+
export const SolidAngle: SolidAngle = steradians;
5567

5668
// Derived units
5769

src/unit/trig.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { GenericMeasure } from "../measure/genericMeasure";
22
import { Measure } from "../measure/numberMeasure";
33
import { DimensionlessUnit } from "../measure/unitTypeArithmetic";
4-
import { MetricSystem, radians } from "./base";
4+
import { SIUnitSystem, radians } from "./base";
55
import { Length, PlaneAngle } from "./quantities";
66

77
/**
@@ -56,10 +56,10 @@ export function atan2(y: Length, x: Length): PlaneAngle {
5656
return Measure.of(Math.atan2(y.value, x.value), radians);
5757
}
5858

59-
type Dimensionless = GenericMeasure<number, MetricSystem, DimensionlessUnit<MetricSystem>>;
59+
type Dimensionless = GenericMeasure<number, SIUnitSystem, DimensionlessUnit<SIUnitSystem>>;
6060

6161
function wrapTrigFn(f: (x: number) => number): (angle: PlaneAngle) => Dimensionless {
62-
return angle => Measure.dimensionless(MetricSystem, f(angle.value));
62+
return angle => Measure.dimensionless(SIUnitSystem, f(angle.value));
6363
}
6464

6565
function wrapInverseTrigFn(f: (x: number) => number): (angle: Dimensionless) => PlaneAngle {

0 commit comments

Comments
 (0)