diff --git a/Common/UnitDefinitions/MagneticField.json b/Common/UnitDefinitions/MagneticField.json index 644e3c32c8..71f547dbb9 100644 --- a/Common/UnitDefinitions/MagneticField.json +++ b/Common/UnitDefinitions/MagneticField.json @@ -13,8 +13,8 @@ "SingularName": "Tesla", "PluralName": "Teslas", "BaseUnits": { - "L": "Meter", "M": "Kilogram", + "T": "Second", "I": "Ampere" }, "FromUnitToBaseFunc": "{x}", diff --git a/UnitsNet.Tests/GeneratedQuantityCodeTests.cs b/UnitsNet.Tests/GeneratedQuantityCodeTests.cs index 82e598637f..4a8ece8673 100644 --- a/UnitsNet.Tests/GeneratedQuantityCodeTests.cs +++ b/UnitsNet.Tests/GeneratedQuantityCodeTests.cs @@ -256,5 +256,32 @@ private static MethodInfo GetMultiplyMethod(Type selfType, Type otherType) } } + + public static IEnumerable QuantityNames => Quantity.Infos.Select(info => new object[] { info.Name }); + + [Theory] + [MemberData(nameof(QuantityNames))] + public void UnitBaseUnits_CoverExactlyTheQuantityBaseDimensions(string quantityName) + { + // StandardVolumeFlow is dimensioned as mass flow (M·T⁻¹), but its units are defined by standard volume (L³·T⁻¹). + if (quantityName == nameof(StandardVolumeFlow)) return; + + QuantityInfo quantityInfo = Quantity.ByName[quantityName]; + BaseDimensions dimensions = quantityInfo.BaseDimensions; + + foreach (UnitInfo unitInfo in quantityInfo.UnitInfos.Where(unit => unit.BaseUnits != BaseUnits.Undefined)) + { + BaseUnits baseUnits = unitInfo.BaseUnits; + Assert.True( + (dimensions.Length != 0) == baseUnits.Length.HasValue && + (dimensions.Mass != 0) == baseUnits.Mass.HasValue && + (dimensions.Time != 0) == baseUnits.Time.HasValue && + (dimensions.Current != 0) == baseUnits.Current.HasValue && + (dimensions.Temperature != 0) == baseUnits.Temperature.HasValue && + (dimensions.Amount != 0) == baseUnits.Amount.HasValue && + (dimensions.LuminousIntensity != 0) == baseUnits.LuminousIntensity.HasValue, + $"{quantityName}.{unitInfo.Name} has BaseUnits {baseUnits} that do not match the quantity's BaseDimensions {dimensions}."); + } + } } } diff --git a/UnitsNet/GeneratedCode/Quantities/MagneticField.g.cs b/UnitsNet/GeneratedCode/Quantities/MagneticField.g.cs index 4c2bdbe3af..6cf2dead50 100644 --- a/UnitsNet/GeneratedCode/Quantities/MagneticField.g.cs +++ b/UnitsNet/GeneratedCode/Quantities/MagneticField.g.cs @@ -123,19 +123,19 @@ public static IEnumerable> GetDefaultMappings( yield return new (MagneticFieldUnit.Gauss, "Gauss", "Gausses", BaseUnits.Undefined, 10000 ); - yield return new (MagneticFieldUnit.Microtesla, "Microtesla", "Microteslas", new BaseUnits(length: LengthUnit.Meter, mass: MassUnit.Milligram, current: ElectricCurrentUnit.Ampere), + yield return new (MagneticFieldUnit.Microtesla, "Microtesla", "Microteslas", new BaseUnits(mass: MassUnit.Milligram, time: DurationUnit.Second, current: ElectricCurrentUnit.Ampere), 1000000 ); yield return new (MagneticFieldUnit.Milligauss, "Milligauss", "Milligausses", BaseUnits.Undefined, 10000000 ); - yield return new (MagneticFieldUnit.Millitesla, "Millitesla", "Milliteslas", new BaseUnits(length: LengthUnit.Meter, mass: MassUnit.Gram, current: ElectricCurrentUnit.Ampere), + yield return new (MagneticFieldUnit.Millitesla, "Millitesla", "Milliteslas", new BaseUnits(mass: MassUnit.Gram, time: DurationUnit.Second, current: ElectricCurrentUnit.Ampere), 1000 ); - yield return new (MagneticFieldUnit.Nanotesla, "Nanotesla", "Nanoteslas", new BaseUnits(length: LengthUnit.Meter, mass: MassUnit.Microgram, current: ElectricCurrentUnit.Ampere), + yield return new (MagneticFieldUnit.Nanotesla, "Nanotesla", "Nanoteslas", new BaseUnits(mass: MassUnit.Microgram, time: DurationUnit.Second, current: ElectricCurrentUnit.Ampere), 1000000000 ); - yield return new (MagneticFieldUnit.Tesla, "Tesla", "Teslas", new BaseUnits(length: LengthUnit.Meter, mass: MassUnit.Kilogram, current: ElectricCurrentUnit.Ampere)); + yield return new (MagneticFieldUnit.Tesla, "Tesla", "Teslas", new BaseUnits(mass: MassUnit.Kilogram, time: DurationUnit.Second, current: ElectricCurrentUnit.Ampere)); } }