diff --git a/Common/UnitDefinitions/JapaneseHydrometerScale.json b/Common/UnitDefinitions/JapaneseHydrometerScale.json
new file mode 100644
index 0000000000..8799dfaa43
--- /dev/null
+++ b/Common/UnitDefinitions/JapaneseHydrometerScale.json
@@ -0,0 +1,67 @@
+{
+ "Name": "JapaneseHydrometerScale",
+ "BaseUnit": "ReciprocalSpecificGravity",
+ "XmlDocSummary": "A dimensionless quantity representing hydrometer scale readings derived from reciprocal specific gravity, including degrees Baumé and Sake Meter Value.",
+ "Units": [
+ {
+ "SingularName": "ReciprocalSpecificGravity",
+ "PluralName": "ReciprocalSpecificGravities",
+ "FromUnitToBaseFunc": "{x}",
+ "FromBaseToUnitFunc": "{x}",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "1/SG" ]
+ }
+ ]
+ },
+ {
+ "SingularName": "DegreeBaumeHeavy",
+ "PluralName": "DegreesBaumeHeavy",
+ "FromUnitToBaseFunc": "1 - {x} / 144.3",
+ "FromBaseToUnitFunc": "144.3 * (1 - {x})",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "°Bé heavy" ]
+ },
+ {
+ "Culture": "ja-JP",
+ "Abbreviations": [ "°Bh" ]
+ }
+ ]
+ },
+ {
+ "SingularName": "DegreeBaumeLight",
+ "PluralName": "DegreesBaumeLight",
+ "FromUnitToBaseFunc": "({x} + 134.3) / 144.3",
+ "FromBaseToUnitFunc": "144.3 * {x} - 134.3",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "°Bé light" ]
+ },
+ {
+ "Culture": "ja-JP",
+ "Abbreviations": [ "°Bl" ]
+ }
+ ]
+ },
+ {
+ "SingularName": "SakeMeterValue",
+ "PluralName": "SakeMeterValues",
+ "FromUnitToBaseFunc": "1 + {x} / 1443",
+ "FromBaseToUnitFunc": "1443 * ({x} - 1)",
+ "Localization": [
+ {
+ "Culture": "en-US",
+ "Abbreviations": [ "SMV" ]
+ },
+ {
+ "Culture": "ja-JP",
+ "Abbreviations": [ "日本酒度" ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/Common/UnitEnumValues.g.json b/Common/UnitEnumValues.g.json
index a3ddd96516..f8c654f4dc 100644
--- a/Common/UnitEnumValues.g.json
+++ b/Common/UnitEnumValues.g.json
@@ -2047,5 +2047,11 @@
"SquareInchPerInch": 7,
"SquareMeterPerMeter": 1,
"SquareMillimeterPerMeter": 5
+ },
+ "JapaneseHydrometerScale": {
+ "DegreeBaumeHeavy": 6,
+ "DegreeBaumeLight": 9,
+ "ReciprocalSpecificGravity": 5,
+ "SakeMeterValue": 7
}
}
diff --git a/UnitsNet.NumberExtensions.CS14.Tests/GeneratedCode/NumberToJapaneseHydrometerScaleExtensionsTest.g.cs b/UnitsNet.NumberExtensions.CS14.Tests/GeneratedCode/NumberToJapaneseHydrometerScaleExtensionsTest.g.cs
new file mode 100644
index 0000000000..1e7da344a8
--- /dev/null
+++ b/UnitsNet.NumberExtensions.CS14.Tests/GeneratedCode/NumberToJapaneseHydrometerScaleExtensionsTest.g.cs
@@ -0,0 +1,44 @@
+//------------------------------------------------------------------------------
+//
+// 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.NumberToJapaneseHydrometerScale;
+using Xunit;
+
+namespace UnitsNet.Tests
+{
+ public class NumberToJapaneseHydrometerScaleExtensionsTests
+ {
+ [Fact]
+ public void NumberToDegreesBaumeHeavyTest() =>
+ Assert.Equal(JapaneseHydrometerScale.FromDegreesBaumeHeavy(2), 2.DegreesBaumeHeavy);
+
+ [Fact]
+ public void NumberToDegreesBaumeLightTest() =>
+ Assert.Equal(JapaneseHydrometerScale.FromDegreesBaumeLight(2), 2.DegreesBaumeLight);
+
+ [Fact]
+ public void NumberToReciprocalSpecificGravitiesTest() =>
+ Assert.Equal(JapaneseHydrometerScale.FromReciprocalSpecificGravities(2), 2.ReciprocalSpecificGravities);
+
+ [Fact]
+ public void NumberToSakeMeterValuesTest() =>
+ Assert.Equal(JapaneseHydrometerScale.FromSakeMeterValues(2), 2.SakeMeterValues);
+
+ }
+}
diff --git a/UnitsNet.NumberExtensions.CS14/GeneratedCode/NumberToJapaneseHydrometerScaleExtensions.g.cs b/UnitsNet.NumberExtensions.CS14/GeneratedCode/NumberToJapaneseHydrometerScaleExtensions.g.cs
new file mode 100644
index 0000000000..7dd132c622
--- /dev/null
+++ b/UnitsNet.NumberExtensions.CS14/GeneratedCode/NumberToJapaneseHydrometerScaleExtensions.g.cs
@@ -0,0 +1,79 @@
+//------------------------------------------------------------------------------
+//
+// 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.NumberToJapaneseHydrometerScale
+{
+ ///
+ /// A number to JapaneseHydrometerScale Extensions
+ ///
+ public static class NumberToJapaneseHydrometerScaleExtensions
+ {
+#pragma warning disable CS1591
+ extension(T value)
+#pragma warning restore CS1591
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+#else
+ , IConvertible
+#endif
+ {
+ ///
+ public JapaneseHydrometerScale DegreesBaumeHeavy
+#if NET7_0_OR_GREATER
+ => JapaneseHydrometerScale.FromDegreesBaumeHeavy(QuantityValue.CreateChecked(value));
+#else
+ => JapaneseHydrometerScale.FromDegreesBaumeHeavy(value.ToQuantityValue());
+#endif
+
+ ///
+ public JapaneseHydrometerScale DegreesBaumeLight
+#if NET7_0_OR_GREATER
+ => JapaneseHydrometerScale.FromDegreesBaumeLight(QuantityValue.CreateChecked(value));
+#else
+ => JapaneseHydrometerScale.FromDegreesBaumeLight(value.ToQuantityValue());
+#endif
+
+ ///
+ public JapaneseHydrometerScale ReciprocalSpecificGravities
+#if NET7_0_OR_GREATER
+ => JapaneseHydrometerScale.FromReciprocalSpecificGravities(QuantityValue.CreateChecked(value));
+#else
+ => JapaneseHydrometerScale.FromReciprocalSpecificGravities(value.ToQuantityValue());
+#endif
+
+ ///
+ public JapaneseHydrometerScale SakeMeterValues
+#if NET7_0_OR_GREATER
+ => JapaneseHydrometerScale.FromSakeMeterValues(QuantityValue.CreateChecked(value));
+#else
+ => JapaneseHydrometerScale.FromSakeMeterValues(value.ToQuantityValue());
+#endif
+
+ }
+ }
+}
diff --git a/UnitsNet.NumberExtensions.Tests/GeneratedCode/NumberToJapaneseHydrometerScaleExtensionsTest.g.cs b/UnitsNet.NumberExtensions.Tests/GeneratedCode/NumberToJapaneseHydrometerScaleExtensionsTest.g.cs
new file mode 100644
index 0000000000..75b290f0bd
--- /dev/null
+++ b/UnitsNet.NumberExtensions.Tests/GeneratedCode/NumberToJapaneseHydrometerScaleExtensionsTest.g.cs
@@ -0,0 +1,44 @@
+//------------------------------------------------------------------------------
+//
+// 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.NumberToJapaneseHydrometerScale;
+using Xunit;
+
+namespace UnitsNet.Tests
+{
+ public class NumberToJapaneseHydrometerScaleExtensionsTests
+ {
+ [Fact]
+ public void NumberToDegreesBaumeHeavyTest() =>
+ Assert.Equal(JapaneseHydrometerScale.FromDegreesBaumeHeavy(2), 2.DegreesBaumeHeavy());
+
+ [Fact]
+ public void NumberToDegreesBaumeLightTest() =>
+ Assert.Equal(JapaneseHydrometerScale.FromDegreesBaumeLight(2), 2.DegreesBaumeLight());
+
+ [Fact]
+ public void NumberToReciprocalSpecificGravitiesTest() =>
+ Assert.Equal(JapaneseHydrometerScale.FromReciprocalSpecificGravities(2), 2.ReciprocalSpecificGravities());
+
+ [Fact]
+ public void NumberToSakeMeterValuesTest() =>
+ Assert.Equal(JapaneseHydrometerScale.FromSakeMeterValues(2), 2.SakeMeterValues());
+
+ }
+}
diff --git a/UnitsNet.NumberExtensions/GeneratedCode/NumberToJapaneseHydrometerScaleExtensions.g.cs b/UnitsNet.NumberExtensions/GeneratedCode/NumberToJapaneseHydrometerScaleExtensions.g.cs
new file mode 100644
index 0000000000..31f0e319c8
--- /dev/null
+++ b/UnitsNet.NumberExtensions/GeneratedCode/NumberToJapaneseHydrometerScaleExtensions.g.cs
@@ -0,0 +1,80 @@
+//------------------------------------------------------------------------------
+//
+// 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.NumberToJapaneseHydrometerScale
+{
+ ///
+ /// A number to JapaneseHydrometerScale Extensions
+ ///
+ public static class NumberToJapaneseHydrometerScaleExtensions
+ {
+ ///
+ public static JapaneseHydrometerScale DegreesBaumeHeavy(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => JapaneseHydrometerScale.FromDegreesBaumeHeavy(QuantityValue.CreateChecked(value));
+#else
+ , IConvertible
+ => JapaneseHydrometerScale.FromDegreesBaumeHeavy(value.ToQuantityValue());
+#endif
+
+ ///
+ public static JapaneseHydrometerScale DegreesBaumeLight(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => JapaneseHydrometerScale.FromDegreesBaumeLight(QuantityValue.CreateChecked(value));
+#else
+ , IConvertible
+ => JapaneseHydrometerScale.FromDegreesBaumeLight(value.ToQuantityValue());
+#endif
+
+ ///
+ public static JapaneseHydrometerScale ReciprocalSpecificGravities(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => JapaneseHydrometerScale.FromReciprocalSpecificGravities(QuantityValue.CreateChecked(value));
+#else
+ , IConvertible
+ => JapaneseHydrometerScale.FromReciprocalSpecificGravities(value.ToQuantityValue());
+#endif
+
+ ///
+ public static JapaneseHydrometerScale SakeMeterValues(this T value)
+ where T : notnull
+#if NET7_0_OR_GREATER
+ , INumber
+ => JapaneseHydrometerScale.FromSakeMeterValues(QuantityValue.CreateChecked(value));
+#else
+ , IConvertible
+ => JapaneseHydrometerScale.FromSakeMeterValues(value.ToQuantityValue());
+#endif
+
+ }
+}
diff --git a/UnitsNet.Tests/CustomCode/JapaneseHydrometerScaleTests.cs b/UnitsNet.Tests/CustomCode/JapaneseHydrometerScaleTests.cs
new file mode 100644
index 0000000000..6b297102a1
--- /dev/null
+++ b/UnitsNet.Tests/CustomCode/JapaneseHydrometerScaleTests.cs
@@ -0,0 +1,32 @@
+//------------------------------------------------------------------------------
+//
+// 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.
+
+namespace UnitsNet.Tests.CustomCode
+{
+ public class JapaneseHydrometerScaleTests : JapaneseHydrometerScaleTestsBase
+ {
+ protected override double DegreesBaumeHeavyInOneReciprocalSpecificGravity => 0;
+
+ protected override double DegreesBaumeLightInOneReciprocalSpecificGravity => 10;
+
+ protected override double ReciprocalSpecificGravitiesInOneReciprocalSpecificGravity => 1;
+
+ protected override double SakeMeterValuesInOneReciprocalSpecificGravity => 0;
+ }
+}
diff --git a/UnitsNet.Tests/GeneratedCode/IQuantityTests.g.cs b/UnitsNet.Tests/GeneratedCode/IQuantityTests.g.cs
index cdb328511b..a8e285ad12 100644
--- a/UnitsNet.Tests/GeneratedCode/IQuantityTests.g.cs
+++ b/UnitsNet.Tests/GeneratedCode/IQuantityTests.g.cs
@@ -90,6 +90,7 @@ void Assertion(int expectedValue, Enum expectedUnit, IQuantity quantity)
Assertion(3, InformationUnit.Teraoctet, Quantity.From(3, InformationUnit.Teraoctet));
Assertion(3, IrradianceUnit.WattPerSquareMeter, Quantity.From(3, IrradianceUnit.WattPerSquareMeter));
Assertion(3, IrradiationUnit.WattHourPerSquareMeter, Quantity.From(3, IrradiationUnit.WattHourPerSquareMeter));
+ Assertion(3, JapaneseHydrometerScaleUnit.SakeMeterValue, Quantity.From(3, JapaneseHydrometerScaleUnit.SakeMeterValue));
Assertion(3, JerkUnit.StandardGravitiesPerSecond, Quantity.From(3, JerkUnit.StandardGravitiesPerSecond));
Assertion(3, KinematicViscosityUnit.Stokes, Quantity.From(3, KinematicViscosityUnit.Stokes));
Assertion(3, LeakRateUnit.TorrLiterPerSecond, Quantity.From(3, LeakRateUnit.TorrLiterPerSecond));
@@ -226,6 +227,7 @@ public void QuantityInfo_IsSameAsStaticInfoProperty()
Assertion(Information.Info, Information.Zero);
Assertion(Irradiance.Info, Irradiance.Zero);
Assertion(Irradiation.Info, Irradiation.Zero);
+ Assertion(JapaneseHydrometerScale.Info, JapaneseHydrometerScale.Zero);
Assertion(Jerk.Info, Jerk.Zero);
Assertion(KinematicViscosity.Info, KinematicViscosity.Zero);
Assertion(LeakRate.Info, LeakRate.Zero);
diff --git a/UnitsNet.Tests/GeneratedCode/TestsBase/JapaneseHydrometerScaleTestsBase.g.cs b/UnitsNet.Tests/GeneratedCode/TestsBase/JapaneseHydrometerScaleTestsBase.g.cs
new file mode 100644
index 0000000000..261f6ef6ec
--- /dev/null
+++ b/UnitsNet.Tests/GeneratedCode/TestsBase/JapaneseHydrometerScaleTestsBase.g.cs
@@ -0,0 +1,713 @@
+//------------------------------------------------------------------------------
+//
+// 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 JapaneseHydrometerScale.
+ ///
+// ReSharper disable once PartialTypeWithSinglePart
+ public abstract partial class JapaneseHydrometerScaleTestsBase : QuantityTestsBase
+ {
+ protected abstract double DegreesBaumeHeavyInOneReciprocalSpecificGravity { get; }
+ protected abstract double DegreesBaumeLightInOneReciprocalSpecificGravity { get; }
+ protected abstract double ReciprocalSpecificGravitiesInOneReciprocalSpecificGravity { get; }
+ protected abstract double SakeMeterValuesInOneReciprocalSpecificGravity { get; }
+
+// ReSharper disable VirtualMemberNeverOverriden.Global
+ protected virtual double DegreesBaumeHeavyTolerance { get { return 1e-5; } }
+ protected virtual double DegreesBaumeLightTolerance { get { return 1e-5; } }
+ protected virtual double ReciprocalSpecificGravitiesTolerance { get { return 1e-5; } }
+ protected virtual double SakeMeterValuesTolerance { get { return 1e-5; } }
+// ReSharper restore VirtualMemberNeverOverriden.Global
+
+ protected (double UnitsInBaseUnit, double Tolerence) GetConversionFactor(JapaneseHydrometerScaleUnit unit)
+ {
+ return unit switch
+ {
+ JapaneseHydrometerScaleUnit.DegreeBaumeHeavy => (DegreesBaumeHeavyInOneReciprocalSpecificGravity, DegreesBaumeHeavyTolerance),
+ JapaneseHydrometerScaleUnit.DegreeBaumeLight => (DegreesBaumeLightInOneReciprocalSpecificGravity, DegreesBaumeLightTolerance),
+ JapaneseHydrometerScaleUnit.ReciprocalSpecificGravity => (ReciprocalSpecificGravitiesInOneReciprocalSpecificGravity, ReciprocalSpecificGravitiesTolerance),
+ JapaneseHydrometerScaleUnit.SakeMeterValue => (SakeMeterValuesInOneReciprocalSpecificGravity, SakeMeterValuesTolerance),
+ _ => throw new NotSupportedException()
+ };
+ }
+
+ public static IEnumerable