public void TryFirst_WherePredicateMatchesNoItems_ReturnsNoValue()
        {
            IEnumerable<string> source = new[] { "Foo", "Baz", "Boo", "Quix" };

            var result = source.TryFirst(x => false);
            Assert.IsFalse(result.HasValue);
        }
        public void TryFirst_WithFirstItemNull_ReturnsNoValue()
        {
            IEnumerable<string> source = new[] { null, "Foo", "Baz" };

            var result = source.TryFirst();
            Assert.IsFalse(result.HasValue);

            result = source.TryFirst(x => true);
            Assert.IsFalse(result.HasValue);
        }
        public void TryFirst_WherePredicateMatchesItem_ReturnsFirstMatchingItem()
        {
            IEnumerable<string> source = new[] { "Foo", "Baz", "Boo", "Quix" };

            var result = source.TryFirst(x => x.StartsWith("B"));
            Assert.IsTrue(result.HasValue);
            Assert.AreEqual("Baz", result.Value);
        }
        public void TryFirst_WithManyItems_ReturnsFirstItem()
        {
            IEnumerable<int> source = new[] { 42, 84, 168 };

            var result = source.TryFirst();
            Assert.IsTrue(result.HasValue);
            Assert.AreEqual(42, result.Value);

            result = source.TryFirst(x => true);
            Assert.IsTrue(result.HasValue);
            Assert.AreEqual(42, result.Value);
        }