- 1. Quantity types.
- 2. Features
- 3. Gu.Units.WPF.
- 4. Gu.Units.Json.
- 5. Code generation when adding new quantities.
- Acceleration
- AmountOfSubstance
- Angle
- AnglePerUnitless
- AngularAcceleration
- AngularJerk
- AngularSpeed
- Area
- AreaDensity
- Capacitance
- CatalyticActivity
- Current
- Data
- Density
- ElectricalConductance
- ElectricCharge
- Energy
- Flexibility
- Force
- ForcePerUnitless
- Frequency
- Illuminance
- Inductance
- Jerk
- KinematicViscosity
- Length
- LengthPerUnitless
- LuminousFlux
- LuminousIntensity
- MagneticFieldStrength
- MagneticFlux
- Mass
- MassFlow
- Momentum
- Power
- Pressure
- Resistance
- SolidAngle
- SpecificEnergy
- SpecificVolume
- Speed
- Stiffness
- Temperature
- Time
- Torque
- Unitless
- Voltage
- Volume
- VolumetricFlow
- Wavenumber
privatestaticLengthUnitm=LengthUnit.m;privatestaticTimeUnits=TimeUnit.s;[Test]publicvoidArithmeticSample(){Lengthlength=1*m;Timetime=2*s;Speedspeed=length/time;Assert.AreEqual(0.5,speed.MetresPerSecond);}[Test]publicvoidSample(){varl=Length.FromCentimetres(1.2);Assert.AreEqual(0.012,l.Metres);}A large number of overloads for ToString()
[Test]publicvoidFormatSpeed(){varspeed=Speed.FromMetresPerSecond(1.2);using(Thread.CurrentThread.UsingTempCulture(CultureInfo.InvariantCulture)){Assert.AreEqual("1.2\u00A0m/s",speed.ToString());Assert.AreEqual("1.20 m/s",speed.ToString("F2 m/s"));Assert.AreEqual(UnknownFormat,1.2.ToString(UnknownFormat));// for comparisonAssert.AreEqual(UnknownFormat,speed.ToString(UnknownFormat));Assert.AreEqual("F1\u00A0{unit: invalid}",speed.ToString("F1 invalid"));Assert.AreEqual("1.20 m⋅s⁻¹",speed.ToString("F2 m⋅s⁻¹"));Assert.AreEqual("1.2\u00A0m⋅s⁻¹",speed.ToString("f1","m⋅s⁻¹"));Assert.AreEqual("1.2 m⋅s⁻¹",speed.ToString("f1 ","m⋅s⁻¹"));Assert.AreEqual("1.2 m⋅s⁻¹",speed.ToString("f1"," m⋅s⁻¹"));Assert.AreEqual("1.2 m⋅s⁻¹",speed.ToString("f1 "," m⋅s⁻¹"));Assert.AreEqual("{value: null} mm⋅s⁻¹",speed.ToString("mm⋅s⁻¹"));Assert.AreEqual("1200\u00A0s⁻¹⋅mm",speed.ToString("F0","s⁻¹⋅mm"));Assert.AreEqual("1200\u00A0s⁻¹⋅mm¹",speed.ToString("F0","s⁻¹⋅mm¹"));Assert.AreEqual("1.2\u00A0m*s^-1",speed.ToString("F1","m*s^-1"));Assert.AreEqual("1.2\u00A0s^-1*m",speed.ToString("F1","s^-1*m"));Assert.AreEqual("1.2\u00A0s^-1*m^1",speed.ToString("F1","s^-1*m^1"));Assert.AreEqual("4.32\u00A0km/h",speed.ToString(SpeedUnit.KilometresPerHour));Assert.AreEqual("1.2\u00A0m/s",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.Default));Assert.AreEqual("1.2\u00A0m/s",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.FractionHatPowers));Assert.AreEqual("1.2\u00A0m*s^-1",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.SignedHatPowers));Assert.AreEqual("1.2\u00A0m/s",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.FractionSuperScript));Assert.AreEqual("1.2\u00A0m⋅s⁻¹",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.SignedSuperScript));Assert.AreEqual("4.3\u00A0km/h",speed.ToString("F1",SpeedUnit.KilometresPerHour));Assert.AreEqual("1.2\u00A0m/s",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.Default));Assert.AreEqual("1.2\u00A0m/s",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.FractionHatPowers));Assert.AreEqual("1.2\u00A0m*s^-1",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.SignedHatPowers));Assert.AreEqual("1.2\u00A0m/s",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.FractionSuperScript));Assert.AreEqual("1.2\u00A0m⋅s⁻¹",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.SignedSuperScript));Assert.AreEqual("1,200.00 mm⋅s⁻¹",speed.ToString("N mm⋅s⁻¹"));}varsv=CultureInfo.GetCultureInfo("sv-SE");Assert.AreEqual("1,2\u00A0m/s",speed.ToString(sv));Assert.AreEqual("1,20 m/s",speed.ToString("F2 m/s",sv));Assert.AreEqual(UnknownFormat,1.2.ToString(UnknownFormat,sv));// for comparisonAssert.AreEqual(UnknownFormat,speed.ToString(UnknownFormat,sv));Assert.AreEqual("F1\u00A0{unit: invalid}",speed.ToString("F1 invalid",sv));Assert.AreEqual("1,20 m⋅s⁻¹",speed.ToString("F2 m⋅s⁻¹",sv));Assert.AreEqual("1,2\u00A0m⋅s⁻¹",speed.ToString("f1","m⋅s⁻¹",sv));Assert.AreEqual("1,2 m⋅s⁻¹",speed.ToString("f1 ","m⋅s⁻¹",sv));Assert.AreEqual("1,2 m⋅s⁻¹",speed.ToString("f1"," m⋅s⁻¹",sv));Assert.AreEqual("1,2 m⋅s⁻¹",speed.ToString("f1 "," m⋅s⁻¹",sv));Assert.AreEqual("{value: null} mm⋅s⁻¹",speed.ToString("mm⋅s⁻¹",sv));Assert.AreEqual("1200\u00A0s⁻¹⋅mm",speed.ToString("F0","s⁻¹⋅mm",sv));Assert.AreEqual("1200\u00A0s⁻¹⋅mm¹",speed.ToString("F0","s⁻¹⋅mm¹",sv));Assert.AreEqual("1,2\u00A0m*s^-1",speed.ToString("F1","m*s^-1",sv));Assert.AreEqual("1,2\u00A0s^-1*m",speed.ToString("F1","s^-1*m",sv));Assert.AreEqual("1,2\u00A0s^-1*m^1",speed.ToString("F1","s^-1*m^1",sv));Assert.AreEqual("4,32\u00A0km/h",speed.ToString(SpeedUnit.KilometresPerHour,sv));Assert.AreEqual("1,2\u00A0m/s",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.Default,sv));Assert.AreEqual("1,2\u00A0m/s",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.FractionHatPowers,sv));Assert.AreEqual("1,2\u00A0m*s^-1",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.SignedHatPowers,sv));Assert.AreEqual("1,2\u00A0m/s",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.FractionSuperScript,sv));Assert.AreEqual("1,2\u00A0m⋅s⁻¹",speed.ToString(SpeedUnit.MetresPerSecond,SymbolFormat.SignedSuperScript,sv));Assert.AreEqual("4,3\u00A0km/h",speed.ToString("F1",SpeedUnit.KilometresPerHour,sv));Assert.AreEqual("1,2\u00A0m/s",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.Default,sv));Assert.AreEqual("1,2\u00A0m/s",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.FractionHatPowers,sv));Assert.AreEqual("1,2\u00A0m*s^-1",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.SignedHatPowers,sv));Assert.AreEqual("1,2\u00A0m/s",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.FractionSuperScript,sv));Assert.AreEqual("1,2\u00A0m⋅s⁻¹",speed.ToString("F1",SpeedUnit.MetresPerSecond,SymbolFormat.SignedSuperScript,sv));Assert.AreEqual("1\u00A0200,00 mm⋅s⁻¹",speed.ToString("N mm⋅s⁻¹",sv));}[TestCase("1.2m/s")][TestCase("1.2m^1/s^1")][TestCase("1.2m^1*s^-1")][TestCase("1.2m^1*s^-1")][TestCase("1.2m⋅s⁻¹")][TestCase("1.2m¹/s¹")][TestCase("1.2m^1/s¹")]publicvoidParsingSample(stringtext){varspeed=Speed.Parse(text,CultureInfo.InvariantCulture);Assert.AreEqual(Speed.FromMetresPerSecond(1.2),Speed.Parse(text));Assert.IsTrue(Speed.TryParse(text,CultureInfo.InvariantCulture,outspeed));Assert.AreEqual(Speed.FromMetresPerSecond(1.2),Speed.Parse(text));}Valueconverters for binding to quantity types.
<TextBoxText="{Binding Length, Converter={units:LengthConverter mm}}" />Where the viewmodel has this property.
publicLengthLength{get{returnthis.length;}set{if(value.Equals(this.length)){return;}this.length=value;this.OnPropertyChanged();}}Specifies how the scalar part is formatted, formats valid for double are valid.
<TextBoxText="{Binding Length, Converter={units:LengthConverter cm, ValueFormat='F2'}}" />Specifies how the symbol is formatted.
Text="{Binding Speed,
Converter={units:SpeedConverter mm/s, SymbolFormat=SignedSuperScript}}" />Specifies how the symbol is formatted. The default value is ScalarOnly.
Text="{Binding Length,
Converter={units:LengthConverter m, UnitInput=SymbolRequired}}" />Jsonconverters for serializtion using Json.NET.
For adding new units and quantities read this