diff --git a/CHANGELOG.md b/CHANGELOG.md
index f8f548c..18acc97 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Added
- IcdEnvironment.GetUtcTime() to get UTC representaiton of current time.
+ - Extension methods for determining if a sequence is in order
## [9.9.0] - 2019-09-16
### Added
diff --git a/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs b/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs
index 2de5281..dbe4261 100644
--- a/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs
+++ b/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs
@@ -284,6 +284,15 @@ namespace ICD.Common.Utils.Tests.Extensions
Assert.AreEqual(5, items.Length);
}
+ [TestCase(true)]
+ [TestCase(true, 1, 2, 3, 4)]
+ [TestCase(true, 1, 2, 2, 3, 4)]
+ [TestCase(false, 4, 3, 2, 1)]
+ public void AreOrderedTest(bool expected, params int[] items)
+ {
+ Assert.AreEqual(expected, items.AreOrdered());
+ }
+
[Test]
public void OrderTest()
{
diff --git a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs
index 6c977cb..ada0f46 100644
--- a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs
+++ b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs
@@ -648,6 +648,50 @@ namespace ICD.Common.Utils.Extensions
yield return default(T);
}
+ ///
+ /// Returns true if the given sequence is ordered.
+ ///
+ ///
+ ///
+ ///
+ public static bool AreOrdered(this IEnumerable extends)
+ {
+ if (extends == null)
+ throw new ArgumentNullException("extends");
+
+ return extends.AreOrdered(Comparer.Default);
+ }
+
+ ///
+ /// Returns true if the given sequence is ordered.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static bool AreOrdered(this IEnumerable extends, IComparer comparer)
+ {
+ if (extends == null)
+ throw new ArgumentNullException("extends");
+
+ if (comparer == null)
+ throw new ArgumentNullException("comparer");
+
+ bool first = true;
+ T previous = default(T);
+
+ foreach (T item in extends)
+ {
+ if (!first && comparer.Compare(item, previous) < 0)
+ return false;
+
+ first = false;
+ previous = item;
+ }
+
+ return true;
+ }
+
///
/// Default ordering for the items in the sequence.
///