diff --git a/src/Humanizer.Tests.Shared/HeadingTests.cs b/src/Humanizer.Tests.Shared/HeadingTests.cs
index aeb7153f1..3ba6b0ad5 100644
--- a/src/Humanizer.Tests.Shared/HeadingTests.cs
+++ b/src/Humanizer.Tests.Shared/HeadingTests.cs
@@ -158,5 +158,36 @@ public void ToHeadingArrow(double heading, char expected)
{
Assert.Equal(expected, heading.ToHeadingArrow());
}
+
+ [InlineData('↑', 0)]
+ [InlineData('↗', 45)]
+ [InlineData('→', 90)]
+ [InlineData('↘', 135)]
+ [InlineData('↓', 180)]
+ [InlineData('↙', 225)]
+ [InlineData('←', 270)]
+ [InlineData('↖', 315)]
+ [InlineData('\n', -1)]
+ [Theory]
+ public void FromHeadingArrow(char heading, double expected)
+ {
+ Assert.Equal(expected, heading.FromHeadingArrow());
+ }
+
+ [InlineData("↑", 0)]
+ [InlineData("↗", 45)]
+ [InlineData("→", 90)]
+ [InlineData("↘", 135)]
+ [InlineData("↓", 180)]
+ [InlineData("↙", 225)]
+ [InlineData("←", 270)]
+ [InlineData("↖", 315)]
+ [InlineData("", -1)]
+ [InlineData("xyz", -1)]
+ [Theory]
+ public void FromHeadingArrow_Also_Works_With_Strings(string heading, double expected)
+ {
+ Assert.Equal(expected, heading.FromHeadingArrow());
+ }
}
}
diff --git a/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.approved.txt b/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.approved.txt
index 2cd4303cb..91e266757 100644
--- a/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.approved.txt
+++ b/src/Humanizer.Tests/ApiApprover/PublicApiApprovalTest.approve_public_api.approved.txt
@@ -127,6 +127,8 @@ namespace Humanizer
public class static HeadingExtensions
{
public static double FromAbbreviatedHeading(this string heading, System.Globalization.CultureInfo culture = null) { }
+ public static double FromHeadingArrow(this char heading) { }
+ public static double FromHeadingArrow(this string heading) { }
public static string ToHeading(this double heading, Humanizer.HeadingStyle style = 0, System.Globalization.CultureInfo culture = null) { }
public static char ToHeadingArrow(this double heading) { }
}
diff --git a/src/Humanizer/HeadingExtensions.cs b/src/Humanizer/HeadingExtensions.cs
index 9f99d1a0d..760a4bb52 100644
--- a/src/Humanizer/HeadingExtensions.cs
+++ b/src/Humanizer/HeadingExtensions.cs
@@ -1,5 +1,6 @@
using System;
using System.Globalization;
+
using Humanizer.Localisation;
namespace Humanizer
@@ -93,5 +94,38 @@ public static double FromAbbreviatedHeading(this string heading, CultureInfo cul
return -1;
}
+
+ ///
+ /// Returns a heading based on the heading arrow.
+ ///
+ public static double FromHeadingArrow(this char heading)
+ {
+ var index = Array.IndexOf(headingArrows, heading);
+
+ if (index == -1)
+ {
+ return -1;
+ }
+
+ return (index * 45.0);
+ }
+
+ ///
+ /// Returns a heading based on the heading arrow.
+ ///
+ public static double FromHeadingArrow(this string heading)
+ {
+ if (heading == null)
+ {
+ throw new ArgumentNullException(nameof(heading));
+ }
+
+ if (heading.Length != 1)
+ {
+ return -1;
+ }
+
+ return heading[0].FromHeadingArrow();
+ }
}
}