diff --git a/Common/UnitDefinitions/AreaPerLength.json b/Common/UnitDefinitions/AreaPerLength.json
new file mode 100644
index 0000000000..25960b59c6
--- /dev/null
+++ b/Common/UnitDefinitions/AreaPerLength.json
@@ -0,0 +1,85 @@
+{
+ "Name": "AreaPerLength",
+ "BaseUnit": "SquareMeterPerMeter",
+ "XmlDocSummary": "The magnitude of area per unit length, typically used in structural engineering to specify distributed reinforcement.",
+ "BaseDimensions": {
+ "L": 1
+ },
+ "Units": [
+ {
+ "SingularName": "SquareMeterPerMeter",
+ "PluralName": "SquareMetersPerMeter",
+ "BaseUnits": {
+ "L": "Meter"
+ },
+ "FromUnitToBaseFunc": "{x}",
+ "FromBaseToUnitFunc": "{x}",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "m²/m" ]
+ }
+ ]
+ },
+ {
+ "SingularName": "SquareCentimeterPerMeter",
+ "PluralName": "SquareCentimetersPerMeter",
+ "FromUnitToBaseFunc": "{x} * 1e-4",
+ "FromBaseToUnitFunc": "{x} / 1e-4",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "cm²/m" ]
+ }
+ ]
+ },
+ {
+ "SingularName": "SquareMillimeterPerMeter",
+ "PluralName": "SquareMillimetersPerMeter",
+ "FromUnitToBaseFunc": "{x} * 1e-6",
+ "FromBaseToUnitFunc": "{x} / 1e-6",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "mm²/m" ]
+ }
+ ]
+ },
+ {
+ "SingularName": "SquareInchPerFoot",
+ "PluralName": "SquareInchesPerFoot",
+ "FromUnitToBaseFunc": "{x} * 0.00064516 / 0.3048",
+ "FromBaseToUnitFunc": "{x} * 0.3048 / 0.00064516",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "in²/ft" ]
+ }
+ ]
+ },
+ {
+ "SingularName": "SquareInchPerInch",
+ "PluralName": "SquareInchesPerInch",
+ "FromUnitToBaseFunc": "{x} * 0.00064516 / 0.0254",
+ "FromBaseToUnitFunc": "{x} * 0.0254 / 0.00064516",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "in²/in" ]
+ }
+ ]
+ },
+ {
+ "SingularName": "SquareFootPerFoot",
+ "PluralName": "SquareFeetPerFoot",
+ "FromUnitToBaseFunc": "{x} * 0.09290304 / 0.3048",
+ "FromBaseToUnitFunc": "{x} * 0.3048 / 0.09290304",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "ft²/ft" ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Common/UnitEnumValues.g.json b/Common/UnitEnumValues.g.json
index 178c2b2055..7fab19e1d2 100644
--- a/Common/UnitEnumValues.g.json
+++ b/Common/UnitEnumValues.g.json
@@ -2034,5 +2034,13 @@
"SquareMeterKelvinPerKilowatt": 5,
"SquareMeterKelvinPerWatt": 4,
"SquareMillimeterKelvinPerWatt": 13
+ },
+ "AreaPerLength": {
+ "SquareCentimeterPerMeter": 10,
+ "SquareFootPerFoot": 4,
+ "SquareInchPerFoot": 3,
+ "SquareInchPerInch": 7,
+ "SquareMeterPerMeter": 1,
+ "SquareMillimeterPerMeter": 5
}
}
diff --git a/Common/UnitRelations.json b/Common/UnitRelations.json
index 0f72721c1d..18db3c53e6 100644
--- a/Common/UnitRelations.json
+++ b/Common/UnitRelations.json
@@ -7,6 +7,7 @@
"AmountOfSubstance.Mole = MolarFlow.MolePerSecond * Duration.Second",
"AmountOfSubstance.Mole = Molarity.MolePerCubicMeter * Volume.CubicMeter",
"Angle.Radian = RotationalSpeed.RadianPerSecond * Duration.Second",
+ "Area.SquareMeter = AreaPerLength.SquareMeterPerMeter * Length.Meter -- NoInferredDivision",
"Area.SquareMeter = KinematicViscosity.SquareMeterPerSecond * Duration.Second -- NoInferredDivision",
"Area.SquareMeter = Length.Meter * Length.Meter",
"Area.SquareMeter = Volume.CubicMeter * ReciprocalLength.InverseMeter",
diff --git a/UnitsNet.NumberExtensions.CS14.Tests/GeneratedCode/NumberToAreaPerLengthExtensionsTest.g.cs b/UnitsNet.NumberExtensions.CS14.Tests/GeneratedCode/NumberToAreaPerLengthExtensionsTest.g.cs
new file mode 100644
index 0000000000..bedb3ca1fc
--- /dev/null
+++ b/UnitsNet.NumberExtensions.CS14.Tests/GeneratedCode/NumberToAreaPerLengthExtensionsTest.g.cs
@@ -0,0 +1,52 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by \generate-code.bat.
+//
+// Changes to this file will be lost when the code is regenerated.
+// The build server regenerates the code before each build and a pre-build
+// step will regenerate the code on each local build.
+//
+// See https://github.com/angularsen/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
+//
+// Add CustomCode\Quantities\MyQuantity.extra.cs files to add code to generated quantities.
+// Add UnitDefinitions\MyQuantity.json and run generate-code.bat to generate new units or quantities.
+//
+//
+//------------------------------------------------------------------------------
+
+// Licensed under MIT No Attribution, see LICENSE file at the root.
+// Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). Maintained at https://github.com/angularsen/UnitsNet.
+
+using UnitsNet.NumberExtensions.NumberToAreaPerLength;
+using Xunit;
+
+namespace UnitsNet.Tests
+{
+ public class NumberToAreaPerLengthExtensionsTests
+ {
+ [Fact]
+ public void NumberToSquareCentimetersPerMeterTest() =>
+ Assert.Equal(AreaPerLength.FromSquareCentimetersPerMeter(2), 2.SquareCentimetersPerMeter);
+
+ [Fact]
+ public void NumberToSquareFeetPerFootTest() =>
+ Assert.Equal(AreaPerLength.FromSquareFeetPerFoot(2), 2.SquareFeetPerFoot);
+
+ [Fact]
+ public void NumberToSquareInchesPerFootTest() =>
+ Assert.Equal(AreaPerLength.FromSquareInchesPerFoot(2), 2.SquareInchesPerFoot);
+
+ [Fact]
+ public void NumberToSquareInchesPerInchTest() =>
+ Assert.Equal(AreaPerLength.FromSquareInchesPerInch(2), 2.SquareInchesPerInch);
+
+ [Fact]
+ public void NumberToSquareMetersPerMeterTest() =>
+ Assert.Equal(AreaPerLength.FromSquareMetersPerMeter(2), 2.SquareMetersPerMeter);
+
+ [Fact]
+ public void NumberToSquareMillimetersPerMeterTest() =>
+ Assert.Equal(AreaPerLength.FromSquareMillimetersPerMeter(2), 2.SquareMillimetersPerMeter);
+
+ }
+}
diff --git a/UnitsNet.NumberExtensions.CS14/GeneratedCode/NumberToAreaPerLengthExtensions.g.cs b/UnitsNet.NumberExtensions.CS14/GeneratedCode/NumberToAreaPerLengthExtensions.g.cs
new file mode 100644
index 0000000000..ce3e24ba13
--- /dev/null
+++ b/UnitsNet.NumberExtensions.CS14/GeneratedCode/NumberToAreaPerLengthExtensions.g.cs
@@ -0,0 +1,95 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by \generate-code.bat.
+//
+// Changes to this file will be lost when the code is regenerated.
+// The build server regenerates the code before each build and a pre-build
+// step will regenerate the code on each local build.
+//
+// See https://github.com/angularsen/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
+//
+// Add CustomCode\Quantities\MyQuantity.extra.cs files to add code to generated quantities.
+// Add UnitDefinitions\MyQuantity.json and run generate-code.bat to generate new units or quantities.
+//
+//
+//------------------------------------------------------------------------------
+
+// Licensed under MIT No Attribution, see LICENSE file at the root.
+// Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). Maintained at https://github.com/angularsen/UnitsNet.
+
+using System;
+
+#if NET7_0_OR_GREATER
+using System.Numerics;
+#endif
+
+#nullable enable
+
+namespace UnitsNet.NumberExtensions.NumberToAreaPerLength
+{
+ ///
+ /// A number to AreaPerLength Extensions
+ ///
+ public static class NumberToAreaPerLengthExtensions
+ {
+#pragma warning disable CS1591
+ extension(T value)
+#pragma warning restore CS1591
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+#else
+ , IConvertible
+#endif
+ {
+ ///
+ public AreaPerLength SquareCentimetersPerMeter
+#if NET7_0_OR_GREATER
+ => AreaPerLength.FromSquareCentimetersPerMeter(double.CreateChecked(value));
+#else
+ => AreaPerLength.FromSquareCentimetersPerMeter(value.ToDouble(null));
+#endif
+
+ ///
+ public AreaPerLength SquareFeetPerFoot
+#if NET7_0_OR_GREATER
+ => AreaPerLength.FromSquareFeetPerFoot(double.CreateChecked(value));
+#else
+ => AreaPerLength.FromSquareFeetPerFoot(value.ToDouble(null));
+#endif
+
+ ///
+ public AreaPerLength SquareInchesPerFoot
+#if NET7_0_OR_GREATER
+ => AreaPerLength.FromSquareInchesPerFoot(double.CreateChecked(value));
+#else
+ => AreaPerLength.FromSquareInchesPerFoot(value.ToDouble(null));
+#endif
+
+ ///
+ public AreaPerLength SquareInchesPerInch
+#if NET7_0_OR_GREATER
+ => AreaPerLength.FromSquareInchesPerInch(double.CreateChecked(value));
+#else
+ => AreaPerLength.FromSquareInchesPerInch(value.ToDouble(null));
+#endif
+
+ ///
+ public AreaPerLength SquareMetersPerMeter
+#if NET7_0_OR_GREATER
+ => AreaPerLength.FromSquareMetersPerMeter(double.CreateChecked(value));
+#else
+ => AreaPerLength.FromSquareMetersPerMeter(value.ToDouble(null));
+#endif
+
+ ///
+ public AreaPerLength SquareMillimetersPerMeter
+#if NET7_0_OR_GREATER
+ => AreaPerLength.FromSquareMillimetersPerMeter(double.CreateChecked(value));
+#else
+ => AreaPerLength.FromSquareMillimetersPerMeter(value.ToDouble(null));
+#endif
+
+ }
+ }
+}
diff --git a/UnitsNet.NumberExtensions.Tests/GeneratedCode/NumberToAreaPerLengthExtensionsTest.g.cs b/UnitsNet.NumberExtensions.Tests/GeneratedCode/NumberToAreaPerLengthExtensionsTest.g.cs
new file mode 100644
index 0000000000..801cd9f5f5
--- /dev/null
+++ b/UnitsNet.NumberExtensions.Tests/GeneratedCode/NumberToAreaPerLengthExtensionsTest.g.cs
@@ -0,0 +1,52 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by \generate-code.bat.
+//
+// Changes to this file will be lost when the code is regenerated.
+// The build server regenerates the code before each build and a pre-build
+// step will regenerate the code on each local build.
+//
+// See https://github.com/angularsen/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
+//
+// Add CustomCode\Quantities\MyQuantity.extra.cs files to add code to generated quantities.
+// Add UnitDefinitions\MyQuantity.json and run generate-code.bat to generate new units or quantities.
+//
+//
+//------------------------------------------------------------------------------
+
+// Licensed under MIT No Attribution, see LICENSE file at the root.
+// Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). Maintained at https://github.com/angularsen/UnitsNet.
+
+using UnitsNet.NumberExtensions.NumberToAreaPerLength;
+using Xunit;
+
+namespace UnitsNet.Tests
+{
+ public class NumberToAreaPerLengthExtensionsTests
+ {
+ [Fact]
+ public void NumberToSquareCentimetersPerMeterTest() =>
+ Assert.Equal(AreaPerLength.FromSquareCentimetersPerMeter(2), 2.SquareCentimetersPerMeter());
+
+ [Fact]
+ public void NumberToSquareFeetPerFootTest() =>
+ Assert.Equal(AreaPerLength.FromSquareFeetPerFoot(2), 2.SquareFeetPerFoot());
+
+ [Fact]
+ public void NumberToSquareInchesPerFootTest() =>
+ Assert.Equal(AreaPerLength.FromSquareInchesPerFoot(2), 2.SquareInchesPerFoot());
+
+ [Fact]
+ public void NumberToSquareInchesPerInchTest() =>
+ Assert.Equal(AreaPerLength.FromSquareInchesPerInch(2), 2.SquareInchesPerInch());
+
+ [Fact]
+ public void NumberToSquareMetersPerMeterTest() =>
+ Assert.Equal(AreaPerLength.FromSquareMetersPerMeter(2), 2.SquareMetersPerMeter());
+
+ [Fact]
+ public void NumberToSquareMillimetersPerMeterTest() =>
+ Assert.Equal(AreaPerLength.FromSquareMillimetersPerMeter(2), 2.SquareMillimetersPerMeter());
+
+ }
+}
diff --git a/UnitsNet.NumberExtensions/GeneratedCode/NumberToAreaPerLengthExtensions.g.cs b/UnitsNet.NumberExtensions/GeneratedCode/NumberToAreaPerLengthExtensions.g.cs
new file mode 100644
index 0000000000..777ead587f
--- /dev/null
+++ b/UnitsNet.NumberExtensions/GeneratedCode/NumberToAreaPerLengthExtensions.g.cs
@@ -0,0 +1,102 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by \generate-code.bat.
+//
+// Changes to this file will be lost when the code is regenerated.
+// The build server regenerates the code before each build and a pre-build
+// step will regenerate the code on each local build.
+//
+// See https://github.com/angularsen/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
+//
+// Add CustomCode\Quantities\MyQuantity.extra.cs files to add code to generated quantities.
+// Add UnitDefinitions\MyQuantity.json and run generate-code.bat to generate new units or quantities.
+//
+//
+//------------------------------------------------------------------------------
+
+// Licensed under MIT No Attribution, see LICENSE file at the root.
+// Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). Maintained at https://github.com/angularsen/UnitsNet.
+
+using System;
+
+#if NET7_0_OR_GREATER
+using System.Numerics;
+#endif
+
+#nullable enable
+
+namespace UnitsNet.NumberExtensions.NumberToAreaPerLength
+{
+ ///
+ /// A number to AreaPerLength Extensions
+ ///
+ public static class NumberToAreaPerLengthExtensions
+ {
+ ///
+ public static AreaPerLength SquareCentimetersPerMeter(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => AreaPerLength.FromSquareCentimetersPerMeter(double.CreateChecked(value));
+#else
+ , IConvertible
+ => AreaPerLength.FromSquareCentimetersPerMeter(value.ToDouble(null));
+#endif
+
+ ///
+ public static AreaPerLength SquareFeetPerFoot(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => AreaPerLength.FromSquareFeetPerFoot(double.CreateChecked(value));
+#else
+ , IConvertible
+ => AreaPerLength.FromSquareFeetPerFoot(value.ToDouble(null));
+#endif
+
+ ///
+ public static AreaPerLength SquareInchesPerFoot(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => AreaPerLength.FromSquareInchesPerFoot(double.CreateChecked(value));
+#else
+ , IConvertible
+ => AreaPerLength.FromSquareInchesPerFoot(value.ToDouble(null));
+#endif
+
+ ///
+ public static AreaPerLength SquareInchesPerInch(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => AreaPerLength.FromSquareInchesPerInch(double.CreateChecked(value));
+#else
+ , IConvertible
+ => AreaPerLength.FromSquareInchesPerInch(value.ToDouble(null));
+#endif
+
+ ///
+ public static AreaPerLength SquareMetersPerMeter(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => AreaPerLength.FromSquareMetersPerMeter(double.CreateChecked(value));
+#else
+ , IConvertible
+ => AreaPerLength.FromSquareMetersPerMeter(value.ToDouble(null));
+#endif
+
+ ///
+ public static AreaPerLength SquareMillimetersPerMeter(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => AreaPerLength.FromSquareMillimetersPerMeter(double.CreateChecked(value));
+#else
+ , IConvertible
+ => AreaPerLength.FromSquareMillimetersPerMeter(value.ToDouble(null));
+#endif
+
+ }
+}
diff --git a/UnitsNet.Tests/CustomCode/AreaPerLengthTests.cs b/UnitsNet.Tests/CustomCode/AreaPerLengthTests.cs
new file mode 100644
index 0000000000..87ef089d59
--- /dev/null
+++ b/UnitsNet.Tests/CustomCode/AreaPerLengthTests.cs
@@ -0,0 +1,40 @@
+// Licensed under MIT No Attribution, see LICENSE file at the root.
+// Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). Maintained at https://github.com/angularsen/UnitsNet.
+
+using Xunit;
+
+namespace UnitsNet.Tests
+{
+ public class AreaPerLengthTests : AreaPerLengthTestsBase
+ {
+ // Sanity checked against area-per-length conversion tables:
+ // - Cognite PROSPER units: https://docs.cognite.com/cdf/integration/guides/simulators/connectors/prosper/prosper_units
+ // - Nucor Skyline technical product manual: https://www.nucorskyline.com/file%20library/document%20library/english/brochures/product_manual_en.pdf
+
+ protected override double SquareMetersPerMeterInOneSquareMeterPerMeter => 1;
+
+ protected override double SquareCentimetersPerMeterInOneSquareMeterPerMeter => 1E4;
+
+ protected override double SquareMillimetersPerMeterInOneSquareMeterPerMeter => 1E6;
+
+ protected override double SquareInchesPerFootInOneSquareMeterPerMeter => 472.44094488188976;
+
+ protected override double SquareInchesPerInchInOneSquareMeterPerMeter => 39.370078740157481;
+
+ protected override double SquareFeetPerFootInOneSquareMeterPerMeter => 3.2808398950131234;
+
+ [Fact]
+ public void AreaPerLengthTimesLengthEqualsArea()
+ {
+ Area area = AreaPerLength.FromSquareMillimetersPerMeter(500) * Length.FromMeters(10);
+ Assert.Equal(5000, area.SquareMillimeters);
+ }
+
+ [Fact]
+ public void LengthTimesAreaPerLengthEqualsArea()
+ {
+ Area area = Length.FromFeet(20) * AreaPerLength.FromSquareInchesPerFoot(3);
+ Assert.Equal(60, area.SquareInches, 12);
+ }
+ }
+}
diff --git a/UnitsNet.Tests/GeneratedCode/IQuantityTests.g.cs b/UnitsNet.Tests/GeneratedCode/IQuantityTests.g.cs
index 219abb6d52..2fd3521866 100644
--- a/UnitsNet.Tests/GeneratedCode/IQuantityTests.g.cs
+++ b/UnitsNet.Tests/GeneratedCode/IQuantityTests.g.cs
@@ -42,6 +42,7 @@ void Assertion(int expectedValue, Enum expectedUnit, IQuantity quantity)
Assertion(3, AreaUnit.UsSurveySquareFoot, Quantity.From(3, AreaUnit.UsSurveySquareFoot));
Assertion(3, AreaDensityUnit.PoundPerThousandSquareFeet, Quantity.From(3, AreaDensityUnit.PoundPerThousandSquareFeet));
Assertion(3, AreaMomentOfInertiaUnit.MillimeterToTheFourth, Quantity.From(3, AreaMomentOfInertiaUnit.MillimeterToTheFourth));
+ Assertion(3, AreaPerLengthUnit.SquareMillimeterPerMeter, Quantity.From(3, AreaPerLengthUnit.SquareMillimeterPerMeter));
Assertion(3, BitRateUnit.TeraoctetPerSecond, Quantity.From(3, BitRateUnit.TeraoctetPerSecond));
Assertion(3, BrakeSpecificFuelConsumptionUnit.PoundPerMechanicalHorsepowerHour, Quantity.From(3, BrakeSpecificFuelConsumptionUnit.PoundPerMechanicalHorsepowerHour));
Assertion(3, CoefficientOfThermalExpansionUnit.PpmPerKelvin, Quantity.From(3, CoefficientOfThermalExpansionUnit.PpmPerKelvin));
@@ -177,6 +178,7 @@ public void QuantityInfo_IsSameAsStaticInfoProperty()
Assertion(Area.Info, Area.Zero);
Assertion(AreaDensity.Info, AreaDensity.Zero);
Assertion(AreaMomentOfInertia.Info, AreaMomentOfInertia.Zero);
+ Assertion(AreaPerLength.Info, AreaPerLength.Zero);
Assertion(BitRate.Info, BitRate.Zero);
Assertion(BrakeSpecificFuelConsumption.Info, BrakeSpecificFuelConsumption.Zero);
Assertion(CoefficientOfThermalExpansion.Info, CoefficientOfThermalExpansion.Zero);
diff --git a/UnitsNet.Tests/GeneratedCode/TestsBase/AreaPerLengthTestsBase.g.cs b/UnitsNet.Tests/GeneratedCode/TestsBase/AreaPerLengthTestsBase.g.cs
new file mode 100644
index 0000000000..12258cdfc1
--- /dev/null
+++ b/UnitsNet.Tests/GeneratedCode/TestsBase/AreaPerLengthTestsBase.g.cs
@@ -0,0 +1,741 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by \generate-code.bat.
+//
+// Changes to this file will be lost when the code is regenerated.
+// The build server regenerates the code before each build and a pre-build
+// step will regenerate the code on each local build.
+//
+// See https://github.com/angularsen/UnitsNet/wiki/Adding-a-New-Unit for how to add or edit units.
+//
+// Add CustomCode\Quantities\MyQuantity.extra.cs files to add code to generated quantities.
+// Add UnitDefinitions\MyQuantity.json and run generate-code.bat to generate new units or quantities.
+//
+//
+//------------------------------------------------------------------------------
+
+// Licensed under MIT No Attribution, see LICENSE file at the root.
+// Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). Maintained at https://github.com/angularsen/UnitsNet.
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Threading;
+using UnitsNet.InternalHelpers;
+using UnitsNet.Tests.Helpers;
+using UnitsNet.Tests.TestsBase;
+using UnitsNet.Units;
+using Xunit;
+
+// Disable build warning CS1718: Comparison made to same variable; did you mean to compare something else?
+#pragma warning disable 1718
+
+// ReSharper disable once CheckNamespace
+namespace UnitsNet.Tests
+{
+ ///
+ /// Test of AreaPerLength.
+ ///
+// ReSharper disable once PartialTypeWithSinglePart
+ public abstract partial class AreaPerLengthTestsBase : QuantityTestsBase
+ {
+ protected abstract double SquareCentimetersPerMeterInOneSquareMeterPerMeter { get; }
+ protected abstract double SquareFeetPerFootInOneSquareMeterPerMeter { get; }
+ protected abstract double SquareInchesPerFootInOneSquareMeterPerMeter { get; }
+ protected abstract double SquareInchesPerInchInOneSquareMeterPerMeter { get; }
+ protected abstract double SquareMetersPerMeterInOneSquareMeterPerMeter { get; }
+ protected abstract double SquareMillimetersPerMeterInOneSquareMeterPerMeter { get; }
+
+// ReSharper disable VirtualMemberNeverOverriden.Global
+ protected virtual double SquareCentimetersPerMeterTolerance { get { return 1e-5; } }
+ protected virtual double SquareFeetPerFootTolerance { get { return 1e-5; } }
+ protected virtual double SquareInchesPerFootTolerance { get { return 1e-5; } }
+ protected virtual double SquareInchesPerInchTolerance { get { return 1e-5; } }
+ protected virtual double SquareMetersPerMeterTolerance { get { return 1e-5; } }
+ protected virtual double SquareMillimetersPerMeterTolerance { get { return 1e-5; } }
+// ReSharper restore VirtualMemberNeverOverriden.Global
+
+ protected (double UnitsInBaseUnit, double Tolerence) GetConversionFactor(AreaPerLengthUnit unit)
+ {
+ return unit switch
+ {
+ AreaPerLengthUnit.SquareCentimeterPerMeter => (SquareCentimetersPerMeterInOneSquareMeterPerMeter, SquareCentimetersPerMeterTolerance),
+ AreaPerLengthUnit.SquareFootPerFoot => (SquareFeetPerFootInOneSquareMeterPerMeter, SquareFeetPerFootTolerance),
+ AreaPerLengthUnit.SquareInchPerFoot => (SquareInchesPerFootInOneSquareMeterPerMeter, SquareInchesPerFootTolerance),
+ AreaPerLengthUnit.SquareInchPerInch => (SquareInchesPerInchInOneSquareMeterPerMeter, SquareInchesPerInchTolerance),
+ AreaPerLengthUnit.SquareMeterPerMeter => (SquareMetersPerMeterInOneSquareMeterPerMeter, SquareMetersPerMeterTolerance),
+ AreaPerLengthUnit.SquareMillimeterPerMeter => (SquareMillimetersPerMeterInOneSquareMeterPerMeter, SquareMillimetersPerMeterTolerance),
+ _ => throw new NotSupportedException()
+ };
+ }
+
+ public static IEnumerable