Пример #1
1
        public Unit CreateUnit(IUnitSystem system, double factor, Dimension dimension)
        {
            Check.SystemKnowsDimension(system, dimension);

            var unit = new DerivedUnit(system, factor, dimension);

            return unit;
        }
 private static BaseUnit MakeBaseUnit(String name, String unitSymbol, IUnitSystem unitSystem)
 {
     if (unitSystem == null)
     {
         unitSystem = new UnitSystem(name + "_system", null, (unitsystem) => new BaseUnit[] { new BaseUnit(unitsystem, 0, name, unitSymbol) });
         return(unitSystem.BaseUnits[0]);
     }
     else
     {
         int NoOfBaseUnits = 0;
         if (unitSystem.BaseUnits != null)
         {
             NoOfBaseUnits = unitSystem.BaseUnits.Length;
         }
         BaseUnit[] baseunitarray = new BaseUnit[NoOfBaseUnits + 1];
         if (NoOfBaseUnits > 0)
         {
             unitSystem.BaseUnits.CopyTo(baseunitarray, 0);
         }
         baseunitarray[NoOfBaseUnits] = new BaseUnit(unitSystem, (sbyte)(NoOfBaseUnits), name, unitSymbol);
         UnitSystem uso = unitSystem as UnitSystem;
         uso.BaseUnits = baseunitarray;
         return(baseunitarray[NoOfBaseUnits]);
     }
 }
Пример #3
0
        public void LengthTimesLength_Returns_AreaQuantity()
        {
            // Arrange
            SiUnitSystemFactory siFactory = new SiUnitSystemFactory();
            IUnitSystem         siSystem  = siFactory.Create();

            StandardQuantitiesCatalog.Setup();

            // Act
            Quantity <float> width    = new Quantity <float>(2.0f, StandardUnitsCatalog.Meter);
            Quantity <float> height   = new Quantity <float>(4.0f, StandardUnitsCatalog.Meter);
            Quantity <float> resultm2 = (Quantity <float>)(width * height);

            IValueConverter converter = siSystem.CreateConverter(resultm2.Unit, StandardUnitsCatalog.SquareCentimeter);

            Assert.NotNull(converter);

            Quantity <float> resultcm2 = new Quantity <float>(converter.Convert(resultm2.Value), converter.Target);

            // Assert
            Assert.AreEqual(8.0f, resultm2.Value);
            Assert.AreEqual(StandardUnitsCatalog.SquareMeter, resultm2.Unit);
            Assert.AreEqual(StandardDimensionsCatalog.Area, resultm2.Dimension);
            Assert.AreEqual(StandardDimensionsCatalog.Area, resultcm2.Dimension);
            Assert.AreEqual(resultm2.Value * 100.0f * 100.0f, resultcm2.Value);
        }
Пример #4
0
        public KnownUnit CreateUnit(IUnitSystem system, double factor, Dimension dimension, string symbol, string name,
                                    bool inherentPrefix)
        {
            var unit = new KnownUnit(system, factor, dimension, symbol, name, inherentPrefix);

            return(unit);
        }
Пример #5
0
        public Program()
        {
            SiUnitSystemFactory siFactory = new SiUnitSystemFactory();

            _siSystem = siFactory.Create();
            StandardQuantitiesCatalog.Setup();
        }
Пример #6
0
        /// <summary>
        /// Creates an unit system from the given prototype. This can be useful when
        /// e.g. extending one of the standard unit systems with custom units.
        /// If the prototype is an UnitSystem the created unit system will be an
        /// identical copy of the unit system. If not, only units that are convertible
        /// to the base unit will be added.
        /// </summary>
        /// <param name="prototype"></param>
        /// <returns></returns>
        public static UnitSystem CreateFrom(IUnitSystem prototype)
        {
            if (prototype is UnitSystem)
            {
                return((UnitSystem)((UnitSystem)prototype).Clone());
            }

            UnitSystem system = new UnitSystem();

            foreach (IDimension dimension in prototype.Dimensions)
            {
                system.AddDimension(dimension);

                // Register base unit
                IUnit baseUnit = prototype.GetBaseUnit(dimension);
                system.AddBaseUnit(baseUnit);

                // Register scaled units
                foreach (IUnit unit in prototype.GetSupportedUnits(dimension))
                {
                    if (!ReferenceEquals(unit, baseUnit) && prototype.CanConvert(baseUnit, unit))
                    {
                        system.AddScaledUnit(baseUnit, unit, prototype.CreateConverter(baseUnit, unit));
                    }
                }
            }
            return(system);
        }
Пример #7
0
 private static ConvertibleUnit MakeScaledUnit(String name, IUnitSystem unitSystem, Unit primaryUnit, Double scaleFactor)
 {
     if (unitSystem == null)
     {
         ConvertibleUnit[] convertibleunitarray = new ConvertibleUnit[1];
         convertibleunitarray[0] = new ConvertibleUnit(name, name, primaryUnit, new ScaledValueConversion(1.0 / scaleFactor));
         unitSystem = new UnitSystem(name + "_system", null, (BaseUnit[])null, null, convertibleunitarray);
         return(convertibleunitarray[0]);
     }
     else
     {
         int NoOfConvertibleUnits = 0;
         if (unitSystem.ConvertibleUnits != null)
         {
             NoOfConvertibleUnits = unitSystem.ConvertibleUnits.Length;
         }
         ConvertibleUnit[] convertibleunitarray = new ConvertibleUnit[NoOfConvertibleUnits + 1];
         if (NoOfConvertibleUnits > 0)
         {
             unitSystem.ConvertibleUnits.CopyTo(convertibleunitarray, 0);
         }
         convertibleunitarray[NoOfConvertibleUnits] = new ConvertibleUnit(name, name, primaryUnit, new ScaledValueConversion(1.0 / scaleFactor));
         UnitSystem uso = unitSystem as UnitSystem;
         uso.ConvertibleUnits = convertibleunitarray;
         return(convertibleunitarray[NoOfConvertibleUnits]);
     }
 }
Пример #8
0
        private static BaseUnit MakeBaseUnit(String name, IUnitSystem unitSystem)
        {
            if (unitSystem == null)
            {
                unitSystem = new UnitSystem(name + "_system", false);
            }

            if (unitSystem != null)
            {
                int NoOfBaseUnits = 0;
                if (unitSystem.BaseUnits != null)
                {
                    NoOfBaseUnits = unitSystem.BaseUnits.Length;
                }
                BaseUnit[] baseunitarray = new BaseUnit[NoOfBaseUnits + 1];
                if (NoOfBaseUnits > 0)
                {
                    unitSystem.BaseUnits.CopyTo(baseunitarray, 0);
                }
                baseunitarray[NoOfBaseUnits] = new BaseUnit(unitSystem, (sbyte)(NoOfBaseUnits), name, name);
                UnitSystem uso = unitSystem as UnitSystem;
                uso.BaseUnits = baseunitarray;
                return(baseunitarray[NoOfBaseUnits]);
            }

            return(null);
        }
Пример #9
0
        public KnownUnit CreateUnit(IUnitSystem system, double factor, Dimension dimension, string symbol, string name,
            bool inherentPrefix)
        {
            var unit = new KnownUnit(system, factor, dimension, symbol, name, inherentPrefix);

            return unit;
        }
Пример #10
0
        public Unit CreateUnit(IUnitSystem system, double factor, Dimension dimension)
        {
            Check.SystemKnowsDimension(system, dimension);

            var unit = new DerivedUnit(system, factor, dimension);

            return(unit);
        }
Пример #11
0
 public static void SystemKnowsDimension(IUnitSystem system, Dimension dimension)
 {
     if (system.NumberOfDimensions < dimension.Count)
     {
         throw new InvalidOperationException(Messages.DimensionUnknown.FormatWith(system.Name,
                                                                                  system.NumberOfDimensions));
     }
 }
Пример #12
0
        public void StaticTest_GetUnitSystemConversionTest()
        {
            IUnitSystem          SomeUnitSystem      = SI.Units;
            IUnitSystem          SomeOtherUnitSystem = MGD_Units.Units;
            UnitSystemConversion expected            = UnitSystems.SItoMGDConversion;
            UnitSystemConversion actual = UnitSystems.Conversions.GetUnitSystemConversion(SomeUnitSystem, SomeOtherUnitSystem);

            Assert.AreEqual(expected, actual);
        }
Пример #13
0
        internal Unit(IUnitSystem system, double factor, Dimension dimension)
        {
            Check.Argument(dimension, nameof(dimension)).IsNotNull();

            this.System    = system;
            this.Dimension = dimension;
            this.Factor    = factor;

            this.hashCode = GenerateHashCode();
        }
Пример #14
0
        public void StaticTest_GetUnitSystemCombinedReversedConversionTest()
        {
            IUnitSystem SomeUnitSystem      = MGM_Units.Units;
            IUnitSystem SomeOtherUnitSystem = CGS_Units.Units;
            //UnitSystemConversion expected = UnitSystems.SItoMGDConversion;
            UnitSystemConversion actual = UnitSystems.Conversions.GetUnitSystemConversion(SomeUnitSystem, SomeOtherUnitSystem);

            Assert.AreEqual(actual.BaseUnitSystem, SomeUnitSystem);
            Assert.AreEqual(actual.ConvertedUnitSystem, SomeOtherUnitSystem);
        }
        public Boolean UnitSet(IUnitSystem unitSystem, String unitName, Quantity unitValue, String unitSymbol, out INametableItem unitItem, out string errorMessage)
        {
            // Find identifier
            Boolean Found = FindIdentifier(unitName, out IEnvironment context, out unitItem);

            if (Found && (context == this) && (unitItem.Identifierkind != IdentifierKind.Unit))
            {   // Found locally, but is not a unit; Can't set as unit
                errorMessage = unitName + " is found locally but is not a unit; Can't set as unit";
                return(false);
            }

            if (context == null)
            {
                context = this;
            }

            (bool OK, String errormessage)updateRes;
            if (unitItem == null)
            {
                // Either is identifier an unit in some context; set it to specified value
                // or identifier not found; No local identifier with that name, Declare local unit
                if (unitSystem == null)
                {
                    if (unitValue != null && unitValue.Unit != null)
                    {   // Is same system as values unit
                        unitSystem = unitValue.Unit.ExponentsSystem;
                    }

                    /**
                     * if (unitSystem == null)
                     * {   // Is first unit in a new system
                     *  if (SystemSet(unitName + "_system", out INametableItem SystemItem))
                     *  {
                     *      unitSystem = ((NamedSystem)SystemItem).UnitSystem;
                     *  }
                     * }
                     **/
                }
                unitItem  = new NamedUnit(unitSystem, unitName, unitSymbol, unitValue, this);
                updateRes = (true, "");
            }
            else
            {
                NamedUnit nui = (NamedUnit)unitItem;
                updateRes = nui.UpdateUnit(unitName, unitValue);
            }
            errorMessage = updateRes.errormessage;
            if (!updateRes.OK)
            {
                return(false);
            }

            return(context.SetLocalIdentifier(unitName, unitItem));
        }
 public NamedUnit(IUnitSystem unitSystem, String name, String unitSymbol, Unit physicalUnit, CalculatorEnvironment environment = null /* = null */)
 {
     this.Environment = environment;
     if (physicalUnit != null)
     {
         this.pu = physicalUnit;
     }
     else
     {
         this.pu = MakeBaseUnit(name, unitSymbol, unitSystem);
     }
 }
 /// <summary>
 /// Enumerates all available units in all available dimensions checking for consistency.
 /// Checks that available units include standard units,
 /// and that Dimensions of units correspond to what was requested.
 /// </summary>
 public static void ShouldBeConsistent(this IUnitSystem system)
 {
     system.Dimensions.Should().NotBeEmpty();
     foreach (var dimension in system.Dimensions)
     {
         var standardUnit   = system[dimension];
         var availableUnits = system.GetUnits(dimension);
         availableUnits.Should().Contain(standardUnit);
         foreach (var unit in availableUnits)
         {
             unit.Dimension.Should().Be(dimension);
         }
     }
 }
Пример #18
0
        public UnitInterpretor(IUnitSystem system, IUnitDialect dialect)
        {
            this.system = system;
            this.dialect = dialect;
            this.unitRegex = BuildUnitRegex();
            this.baseUnits = new List<KnownUnit>(this.system.BaseUnits);

            foreach (var unit in system)
            {
                if (unit.Symbol != unit.BaseSymbol)
                {
                    this.prefixedUnits.Add(unit.BaseSymbol, unit);
                }
            }
        }
Пример #19
0
        public UnitInterpretor(IUnitSystem system, IUnitDialect dialect)
        {
            this.system    = system;
            this.dialect   = dialect;
            this.unitRegex = BuildUnitRegex();
            this.baseUnits = new List <KnownUnit>(this.system.BaseUnits);

            foreach (var unit in system)
            {
                if (unit.Symbol != unit.BaseSymbol)
                {
                    this.prefixedUnits.Add(unit.BaseSymbol, unit);
                }
            }
        }
Пример #20
0
        public void Create_ResultSupportsAllDerivedSiDimensions()
        {
            // Arrange
            SiUnitSystemFactory factory = new SiUnitSystemFactory();

            // Act
            IUnitSystem system = factory.Create();

            // Assert
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Area));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Pressure));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Volume));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Speed));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Force));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Energy));
        }
Пример #21
0
        public void Create_ResultSupportsAllBaseSiDimensions()
        {
            // Arrange
            SiUnitSystemFactory factory = new SiUnitSystemFactory();

            // Act
            IUnitSystem system = factory.Create();

            // Assert
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.AmountOfSubstance));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.ElectricCurrent));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Length));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.LuminousIntensity));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Mass));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Time));
            Assert.True(system.SupportsDimension(StandardDimensionsCatalog.Temperature));
        }
Пример #22
0
        public static Quantity FromInfo(this IUnitSystem system, QuantityInfo info)
        {
            var unit      = system.NoUnit;
            var symbols   = info.Unit.Keys.ToArray();
            var exponents = info.Unit.Values.ToArray();

            for (var i = 0; i < info.Unit.Count; i++)
            {
                var baseUnit = system[symbols[i]];

                if (ReferenceEquals(baseUnit, null) || !baseUnit.IsCoherent)
                {
                    throw new InvalidOperationException(Messages.UnitsNotSameSystem);
                }

                unit = unit * (baseUnit ^ exponents[i]);
            }

            return(new Quantity(info.Amount, unit));
        }
Пример #23
0
        internal KnownUnit(IUnitSystem system, double factor, Dimension dimension, string symbol, string name,
            bool inherentPrefix)
            : base(system, factor, dimension)
        {
            Check.Argument(symbol, nameof(symbol)).IsNotNull();
            Check.Argument(name, nameof(name)).IsNotNull();

            this.Symbol = symbol;
            this.Name = name;

            if (inherentPrefix)
            {
                this.DeriveInherentFactorAndBaseSymbol(symbol);
            }
            else
            {
                this.InherentFactor = 1;
                this.BaseSymbol = symbol;
            }
        }
Пример #24
0
        internal KnownUnit(IUnitSystem system, double factor, Dimension dimension, string symbol, string name,
                           bool inherentPrefix)
            : base(system, factor, dimension)
        {
            Check.Argument(symbol, nameof(symbol)).IsNotNull();
            Check.Argument(name, nameof(name)).IsNotNull();

            this.Symbol = symbol;
            this.Name   = name;

            if (inherentPrefix)
            {
                this.DeriveInherentFactorAndBaseSymbol(symbol);
            }
            else
            {
                this.InherentFactor = 1;
                this.BaseSymbol     = symbol;
            }
        }
Пример #25
0
        public Boolean UnitSet(IUnitSystem unitSystem, String unitName, Quantity unitValue, out INametableItem unitItem)
        {
            // Find identifier
            IEnvironment context;
            Boolean      Found = FindIdentifier(unitName, out context, out unitItem);

            if (Found && (context == this) && (unitItem.Identifierkind != IdentifierKind.Unit))
            {   // Found locally but is not a unit; Can't set as unit
                return(false);
            }

            if (context == null)
            {
                context = this;
            }

            // Either is identifier an unit in some context; set it to specified value
            // or identifier not found; No local identifier with that name, Declare local unit
            if (unitSystem == null)
            {
                if (unitValue != null && unitValue.Unit != null)
                {   // Is same system as values unit
                    unitSystem = unitValue.Unit.ExponentsSystem;
                }

                if (unitSystem == null)
                {   // Is first unit in a new system
                    INametableItem SystemItem;
                    if (SystemSet(unitName + "_system", out SystemItem))
                    {
                        unitSystem = ((NamedSystem)SystemItem).UnitSystem;
                    }
                }
            }

            unitItem = new NamedUnit(unitSystem, unitName, unitValue, this);
            return(context.SetLocalIdentifier(unitName, unitItem));
        }
Пример #26
0
        public NamedUnit(IUnitSystem unitSystem, String name, Quantity physicalQuantity, CalculatorEnvironment environment /* = null */)
        {
            this.Environment = environment;
            if (physicalQuantity != null)
            {
                if ((unitSystem == null) && (physicalQuantity.Unit != null))
                {
                    unitSystem = physicalQuantity.Unit.ExponentsSystem;
                }

                if (physicalQuantity.Value != 0 && physicalQuantity.Value != 1)
                {
                    this.pu = MakeScaledUnit(name, unitSystem, physicalQuantity.Unit, physicalQuantity.Value);
                }
                else
                {
                    this.pu = physicalQuantity.Unit;
                }
            }
            else
            {
                this.pu = MakeBaseUnit(name, unitSystem);
            }
        }
        public NamedUnit(IUnitSystem unitSystem, String name, String unitSymbol, Quantity unitValue, CalculatorEnvironment environment /* = null */)
        {
            this.Environment = environment;
            if (unitValue != null)
            {
                if ((unitSystem == null) && (unitValue.Unit != null))
                {
                    unitSystem = unitValue.Unit.ExponentsSystem;
                }

                if (unitValue.Value != 0 && unitValue.Value != 1)
                {
                    this.pu = MakeScaledUnit(name, unitSymbol, unitSystem, unitValue.Unit, unitValue.Value);
                }
                else
                {
                    this.pu = unitValue.Unit;
                }
            }
            else
            {
                this.pu = MakeBaseUnit(name, unitSymbol, unitSystem);
            }
        }
Пример #28
0
 internal KnownUnit(IUnitSystem system, double factor, Dimension dimension, string symbol, string name)
     : this(system, factor, dimension, symbol, name, false)
 {
     this.Symbol = symbol;
 }
Пример #29
0
 internal DerivedUnit(IUnitSystem system, double factor, Dimension dimension)
     : base(system, factor, dimension)
 {
 }
 public NamedSystem(String name)
 {
     UnitSystem = new UnitSystem(name, true);
 }
Пример #31
0
 public UsersService(IUnitSystem sys)
 {
     this.system = sys;
 }
Пример #32
0
 public UserService(IUnitSystem realEstateSystem)
 {
     this.system = realEstateSystem;
 }
Пример #33
0
 public CarsService(IUnitSystem sytem)
 {
     this.carsSystem = sytem;
 }
Пример #34
0
 internal KnownUnit(IUnitSystem system, double factor, Dimension dimension, string symbol, string name)
     : this(system, factor, dimension, symbol, name, false)
 {
     this.Symbol = symbol;
 }