public UnitPartsConverterSource() { var settings = MockSettings.Create(); this.Metres = settings.Metres; this.Kilograms = settings.Kilograms; this.Seconds = settings.Seconds; this._datas = new List <Data> { new Data("m^2", "m²", UnitAndPower.Create(this.Metres, 2)), new Data("m²", "m²", UnitAndPower.Create(this.Metres, 2)), new Data("m³", "m³", UnitAndPower.Create(this.Metres, 3)), new Data("kg⋅m/s²", "kg⋅m/s²", UnitAndPower.Create(this.Kilograms, 1), UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -2)), new Data("kg⋅m⋅s⁻²", "kg⋅m/s²", UnitAndPower.Create(this.Kilograms, 1), UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -2)), new Data("kg*m/s²", "kg⋅m/s²", UnitAndPower.Create(this.Kilograms, 1), UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -2)), new Data("m/s¹", "m/s", UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -1)), new Data("m⋅s⁻¹", "m/s", UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -1)), new Data("m¹⋅s^-1", "m/s", UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -1)), new Data("m^1⋅s^-1", "m/s", UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -1)), new Data("m¹⋅s⁻¹", "m/s", UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -1)), new Data("1/s", "s⁻¹", UnitAndPower.Create(this.Seconds, -1)), new Data("s^-1", "s⁻¹", UnitAndPower.Create(this.Seconds, -1)) //new Data("J/s",UnitAndPower.Create(Joules, 1),UnitAndPower.Create(Seconds, -1)), }; }
private static TestCase[] CreateTestCases() { using var settings = MockSettings.Create(); var metres = settings.Metres; var kilograms = settings.Kilograms; var seconds = settings.Seconds; return(new[] { new TestCase("m^2", "m²", UnitAndPower.Create(metres, 2)), new TestCase("m²", "m²", UnitAndPower.Create(metres, 2)), new TestCase("m³", "m³", UnitAndPower.Create(metres, 3)), new TestCase("kg⋅m/s²", "kg⋅m/s²", UnitAndPower.Create(kilograms, 1), UnitAndPower.Create(metres, 1), UnitAndPower.Create(seconds, -2)), new TestCase("kg⋅m⋅s⁻²", "kg⋅m/s²", UnitAndPower.Create(kilograms, 1), UnitAndPower.Create(metres, 1), UnitAndPower.Create(seconds, -2)), new TestCase("kg*m/s²", "kg⋅m/s²", UnitAndPower.Create(kilograms, 1), UnitAndPower.Create(metres, 1), UnitAndPower.Create(seconds, -2)), new TestCase("m/s¹", "m/s", UnitAndPower.Create(metres, 1), UnitAndPower.Create(seconds, -1)), new TestCase("m⋅s⁻¹", "m/s", UnitAndPower.Create(metres, 1), UnitAndPower.Create(seconds, -1)), new TestCase("m¹⋅s^-1", "m/s", UnitAndPower.Create(metres, 1), UnitAndPower.Create(seconds, -1)), new TestCase("m^1⋅s^-1", "m/s", UnitAndPower.Create(metres, 1), UnitAndPower.Create(seconds, -1)), new TestCase("m¹⋅s⁻¹", "m/s", UnitAndPower.Create(metres, 1), UnitAndPower.Create(seconds, -1)), new TestCase("1/s", "s⁻¹", UnitAndPower.Create(seconds, -1)), new TestCase("s^-1", "s⁻¹", UnitAndPower.Create(seconds, -1)), ////new Data("J/s",UnitAndPower.Create(Joules, 1),UnitAndPower.Create(Seconds, -1)), }); }
public void DivideMetresMetres() { var up1 = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) }); var up2 = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) }); var prod = up1 / up2; Assert.AreEqual(0, prod.Count); }
public void MultiplyMetresMetres() { var up1 = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) }); var up2 = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) }); var prod = up1 * up2; Assert.AreEqual(1, prod.Count); Assert.AreEqual(2, prod.Single(x => x.Unit == this.settings.Metres).Power); }
public static void MetresToUnitString(int power, string expected) { using var settings = MockSettings.Create(); var parts = new[] { UnitAndPower.Create(settings.Metres, power) }; var actual = parts.AsSymbol(); Assert.AreEqual(expected, actual); }
public void DivideMetresSeconds() { var up1 = new UnitParts(new[] { UnitAndPower.Create(this.settings.Metres, 1) }); var up2 = new UnitParts(new[] { UnitAndPower.Create(this.settings.Seconds, 1) }); var prod = up1 / up2; Assert.AreEqual(2, prod.Count); Assert.AreEqual(1, prod.Single(x => x.Unit == this.settings.Metres).Power); Assert.AreEqual(-1, prod.Single(x => x.Unit == this.settings.Seconds).Power); }
public void FlattenFarads() { var farads = new UnitParts(new[] { UnitAndPower.Create(this.settings.Coulombs, 1), UnitAndPower.Create(this.settings.Volts, -1) }); var ups = farads.BaseParts.ToArray(); Assert.AreEqual(4, ups.Length); Assert.AreEqual(-1, ups.Single(x => x.Unit == this.settings.Kilograms).Power); Assert.AreEqual(-2, ups.Single(x => x.Unit == this.settings.Metres).Power); Assert.AreEqual(4, ups.Single(x => x.Unit == this.settings.Seconds).Power); Assert.AreEqual(2, ups.Single(x => x.Unit == this.settings.Amperes).Power); }
public static void SecondsMetresToUnitString() { using var settings = MockSettings.Create(); var parts = new[] { UnitAndPower.Create(settings.Seconds, -1), UnitAndPower.Create(settings.Metres, 1), }; var actual = parts.AsSymbol(); Assert.AreEqual("m/s", actual); }
public void MetresSecondsToUnitString(int metresPower, int secondsPower, string expected) { var settings = MockSettings.Create(); var parts = new[] { UnitAndPower.Create(settings.Metres, metresPower), UnitAndPower.Create(settings.Seconds, secondsPower) }; var actual = parts.AsSymbol(); Assert.AreEqual(expected, actual); }
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { var text = value as string; if (string.IsNullOrWhiteSpace(text)) { return(null); } var settings = Settings.Instance; var pos = 0; _ = WhiteSpaceReader.TryRead(text, ref pos); var indexOf = text.IndexOf("1/", pos, StringComparison.Ordinal); if (indexOf >= 0) { pos = indexOf + 2; } if (SymbolAndPowerReader.TryRead(text, ref pos, out IReadOnlyList <SymbolAndPower> result)) { if (WhiteSpaceReader.IsRestWhiteSpace(text, pos)) { var unitAndPowers = result.Select(sap => UnitAndPower.Create(settings.AllUnits.Single(x => x.Symbol == sap.Symbol), sap.Power)) .ToList(); var unitParts = new UnitParts(unitAndPowers); if (indexOf < 0) { return(unitParts); } return(unitParts.Inverse()); } } return(text); }
private MockSettings() : base(new ObservableCollection <Prefix>(), new ObservableCollection <BaseUnit>(), new ObservableCollection <DerivedUnit>()) { this.Prefixes.Add(this.Micro); this.Prefixes.Add(this.Milli); this.Prefixes.Add(this.Kilo); this.Metres = new BaseUnit("Metres", "m", "Length"); this.BaseUnits.Add(this.Metres); this.Length = this.Metres.Quantity; this.Kelvins = new BaseUnit("Kelvin", "K", "Temperature"); this.BaseUnits.Add(this.Kelvins); this.Temperature = this.Kelvins.Quantity; this.Seconds = new BaseUnit("Seconds", "s", "Time"); this.BaseUnits.Add(this.Seconds); this.Time = this.Seconds.Quantity; this.Kilograms = new BaseUnit("Kilograms", "kg", "Mass"); this.Grams = new FactorConversion("Grams", "g", 0.001); this.Kilograms.FactorConversions.Add(this.Grams); this.BaseUnits.Add(this.Kilograms); this.Mass = this.Kilograms.Quantity; this.Amperes = new BaseUnit("Amperes", "A", "ElectricalCurrent"); this.BaseUnits.Add(this.Amperes); this.Current = this.Amperes.Quantity; this.MetresPerSecond = new DerivedUnit( "MetresPerSecond", "m/s", "Speed", new[] { UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -1) }); this.DerivedUnits.Add(this.MetresPerSecond); this.Speed = this.MetresPerSecond.Quantity; this.MetresPerSecondSquared = new DerivedUnit( "MetresPerSecondSquared", "m/s^2", "Acceleration", new[] { UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -2) }); this.DerivedUnits.Add(this.MetresPerSecondSquared); this.Acceleration = this.MetresPerSecondSquared.Quantity; this.Newtons = new DerivedUnit( "Newtons", "N", "Force", new[] { UnitAndPower.Create(this.Kilograms, 1), UnitAndPower.Create(this.Metres, 1), UnitAndPower.Create(this.Seconds, -2), }); this.DerivedUnits.Add(this.Newtons); this.Force = this.Newtons.Quantity; this.Joules = new DerivedUnit( "Joules", "J", "Energy", new[] { UnitAndPower.Create(this.Newtons, 1), UnitAndPower.Create(this.Metres, 1) }); this.DerivedUnits.Add(this.Joules); this.Energy = this.Joules.Quantity; this.Watts = new DerivedUnit( "Watts", "W", "Power", new[] { UnitAndPower.Create(this.Joules, 1), UnitAndPower.Create(this.Seconds, -1) }); this.DerivedUnits.Add(this.Watts); this.Power = this.Watts.Quantity; this.Volts = new DerivedUnit( "Volts", "V", "Voltage", new[] { UnitAndPower.Create(this.Watts, 1), UnitAndPower.Create(this.Amperes, -1) }); this.DerivedUnits.Add(this.Volts); this.Voltage = this.Volts.Quantity; this.Coulombs = new DerivedUnit( "Coulombs", "C", "ElectricCharge", new[] { UnitAndPower.Create(this.Seconds, 1), UnitAndPower.Create(this.Amperes, 1) }); this.DerivedUnits.Add(this.Coulombs); this.ElectricCharge = this.Coulombs.Quantity; this.SquareMetres = new DerivedUnit("SquareMetres", "m^2", "Area", new[] { UnitAndPower.Create(this.Metres, 2) }); this.DerivedUnits.Add(this.SquareMetres); this.Area = this.SquareMetres.Quantity; this.CubicMetres = new DerivedUnit("CubicMetres", "m^3", "Volume", new[] { UnitAndPower.Create(this.Metres, 3) }); this.DerivedUnits.Add(this.CubicMetres); this.Volume = this.CubicMetres.Quantity; this.KilogramsPerCubicMetre = new DerivedUnit("KilogramsPerCubicMetre", "kg/m^3", "Density", new[] { UnitAndPower.Create(this.Kilograms, 1), UnitAndPower.Create(this.Metres, -3) }); this.DerivedUnits.Add(this.KilogramsPerCubicMetre); this.Density = this.CubicMetres.Quantity; this.Hertz = new DerivedUnit("Hertz", "1/s", "Frequency", new[] { UnitAndPower.Create(this.Seconds, -1) }); this.DerivedUnits.Add(this.Hertz); this.Frequency = this.Hertz.Quantity; }