Ejemplo n.º 1
0
        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)),
            };
        }
Ejemplo n.º 2
0
        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)),
            });
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        public void PowerQuantityInterface(int power, string expected)
        {
            var unitAndPower = new UnitAndPower(_metres, power);
            var derivedUnit  = new DerivedUnit("sdf", "ssf", unitAndPower)
            {
                QuantityName = "Qty"
            };
            var quantity   = new Quantity(derivedUnit);
            var @interface = quantity.Interface;

            Assert.AreEqual(expected, @interface);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        public void ComposedQuantityInterface(int p1, int p2, string expected)
        {
            var unitAndPower1 = new UnitAndPower(_metres, p1);
            var unitAndPower2 = new UnitAndPower(_seconds, p2);
            var quantities    = new[]
            {
                new Quantity(new DerivedUnit("", "", unitAndPower1, unitAndPower2)),
                new Quantity(new DerivedUnit("", "", unitAndPower2, unitAndPower1))
            };

            foreach (var quantity in quantities)
            {
                var @interface = quantity.Interface;
                Assert.AreEqual(expected, @interface);
            }
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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;
        }