From d5b9f1d11d9a92e01ea11c8e10482b84181bfd7d Mon Sep 17 00:00:00 2001 From: James McMahon Date: Tue, 27 Oct 2026 18:48:12 +0000 Subject: [PATCH] feat: add angular velocity RPM conversions --- .../MetricConversionsTests.cs | 12 ++++++++++++ .../AngularVelocityRpmExtensions.cs | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/DimensionalQuantities.Extensions.Metric/AngularVelocityRpmExtensions.cs diff --git a/src/DimensionalQuantities.Extensions.Metric.Tests/MetricConversionsTests.cs b/src/DimensionalQuantities.Extensions.Metric.Tests/MetricConversionsTests.cs index 5b2188b..bb7359e 100644 --- a/src/DimensionalQuantities.Extensions.Metric.Tests/MetricConversionsTests.cs +++ b/src/DimensionalQuantities.Extensions.Metric.Tests/MetricConversionsTests.cs @@ -49,6 +49,18 @@ public void CelsiusConvertsToAndFromAbsoluteKelvin() () => Assert.Equal(0, Temperature.FromKelvin(273.15).AsCelsius(), 10)); } + [Theory] + [InlineData(0d, 0d)] + [InlineData(60d, 2d)] + [InlineData(-120d, -4d)] + public void RpmConvertsToAndFromRadiansPerSecond(double rpm, double multiplesOfPi) + { + double radiansPerSecond = multiplesOfPi * Math.PI; + Assert.Multiple( + () => Assert.Equal(radiansPerSecond, AngularVelocity.FromRpm(rpm).AsRadiansPerSecond(), 10), + () => Assert.Equal(rpm, AngularVelocity.FromRadiansPerSecond(radiansPerSecond).ToRpm(), 10)); + } + [Fact] public void CatalogueAccessorsConvertFromKnownSiValues() { diff --git a/src/DimensionalQuantities.Extensions.Metric/AngularVelocityRpmExtensions.cs b/src/DimensionalQuantities.Extensions.Metric/AngularVelocityRpmExtensions.cs new file mode 100644 index 0000000..7720e54 --- /dev/null +++ b/src/DimensionalQuantities.Extensions.Metric/AngularVelocityRpmExtensions.cs @@ -0,0 +1,16 @@ +namespace DimensionalQuantities.Extensions.Metric; + +public static class AngularVelocityRpmExtensions +{ + private const double RadiansPerRpm = 2 * Math.PI / 60; + + extension(AngularVelocity) + { + public static AngularVelocity FromRpm(double value) => AngularVelocity.FromSiBaseUnit(value * RadiansPerRpm); + } + + extension(AngularVelocity angularVelocity) + { + public double ToRpm() => angularVelocity.AsSiBaseUnit() / RadiansPerRpm; + } +}