Esempio n. 1
0
        public void IntersectBy_Uses_The_Specified_Key_Comparer()
        {
            var source = new[]
            {
                new Foo(0, 1),
                new Foo(0, 2),
                new Foo(1, 3),
                new Foo(-2, 5),
                new Foo(-2, 0),
                new Foo(3, 2)
            }.ForbidMultipleEnumeration();
            var other = new[]
            {
                new Foo(2, 5),
                new Foo(-3, 2)
            }.ForbidMultipleEnumeration();
            var comparer = XEqualityComparer <int> .By(Math.Abs);

            var result = source.IntersectBy(other, f => f.X, comparer);

            result.Should().Equal(
                new Foo(-2, 5),
                new Foo(3, 2)
                );
        }
Esempio n. 2
0
        public void DistinctUntilChangedBy_Uses_Specified_Comparer()
        {
            var source = new[]
            {
                new Foo(0, 1),
                new Foo(0, 2),
                new Foo(-1, 3),
                new Foo(1, 8),
                new Foo(2, 5),
                new Foo(0, 3),
                new Foo(2, 0),
                new Foo(-2, 2)
            }.ForbidMultipleEnumeration();

            var comparer = XEqualityComparer <int> .By(Math.Abs);

            var result = source.DistinctUntilChangedBy(f => f.X, comparer);

            result.Should().Equal(
                new Foo(0, 1),
                new Foo(-1, 3),
                new Foo(2, 5),
                new Foo(0, 3),
                new Foo(2, 0)
                );
        }
Esempio n. 3
0
        public void GroupUntilChangedBy_Uses_Specified_Comparer()
        {
            var source = new[]
            {
                new Foo(0, 1),
                new Foo(0, 2),
                new Foo(-1, 3),
                new Foo(1, 8),
                new Foo(2, 5),
                new Foo(0, 3),
                new Foo(2, 0),
                new Foo(-2, 2)
            }.ForbidMultipleEnumeration();

            var comparer = XEqualityComparer <int> .By(Math.Abs);

            var result = source.GroupUntilChangedBy(f => f.X, comparer).ToArray();

            result.Length.Should().Be(5);
            result[0].Key.Should().Be(0);
            result[0].Should().Equal(new Foo(0, 1), new Foo(0, 2));
            result[1].Key.Should().Be(-1);
            result[1].Should().Equal(new Foo(-1, 3), new Foo(1, 8));
            result[2].Key.Should().Be(2);
            result[2].Should().Equal(new Foo(2, 5));
            result[3].Key.Should().Be(0);
            result[3].Should().Equal(new Foo(0, 3));
            result[4].Key.Should().Be(2);
            result[4].Should().Equal(new Foo(2, 0), new Foo(-2, 2));
        }
Esempio n. 4
0
        public void DistinctUntilChanged_Uses_Specified_Comparer()
        {
            var source = new[] { -1, 1, -1, 2, 3, -3, 1, 3, -2, 2 }.ForbidMultipleEnumeration();
            var comparer = XEqualityComparer <int> .By(Math.Abs);

            var result = source.DistinctUntilChanged(comparer);

            result.Should().Equal(-1, 2, 3, 1, 3, -2);
        }
        public void ToHashSet_Uses_The_Provided_Comparer()
        {
            var items    = new[] { 4, -8, 15, 16, -23, 42 };
            var source   = items.ForbidMultipleEnumeration();
            var comparer = XEqualityComparer <int> .By(Math.Abs);

            var hashSet = source.ToHashSet(comparer);

            hashSet.Should().Equal(items, comparer.Equals);
        }
Esempio n. 6
0
        public void CommonPrefix_Uses_The_Specified_Comparer()
        {
            var source = new[] { 4, 8, 15, 16, 23, 42 }.ForbidMultipleEnumeration();
            var other = new[] { -4, 8, -15, -99, -123, 999 }.ForbidMultipleEnumeration();
            var comparer = XEqualityComparer <int> .By(Math.Abs);

            var result = source.CommonPrefix(other, comparer);

            result.Should().Equal(4, 8, 15);
        }
 public void GroupUntilChanged_Uses_Specified_Comparer()
 {
     var source = new[] { -1, 1, -1, 2, 3, -3, 1, 3, -2, 2 }.ForbidMultipleEnumeration();
     var comparer = XEqualityComparer<int>.By(Math.Abs);
     var result = source.GroupUntilChanged(comparer).ToArray();
     result.Length.Should().Be(6);
     result[0].Key.Should().Be(-1);
     result[0].Should().Equal(-1, 1, -1);
     result[1].Key.Should().Be(2);
     result[1].Should().Equal(2);
     result[2].Key.Should().Be(3);
     result[2].Should().Equal(3, -3);
     result[3].Key.Should().Be(1);
     result[3].Should().Equal(1);
     result[4].Key.Should().Be(3);
     result[4].Should().Equal(3);
     result[5].Key.Should().Be(-2);
     result[5].Should().Equal(-2, 2);
 }
Esempio n. 8
0
 /// <summary>
 /// 根据一个比较器返回非重复函数
 /// </summary>
 /// <typeparam name="TSource"></typeparam>
 /// <param name="source"></param>
 /// <param name="keySelector">比较器</param>
 /// <returns></returns>
 public static IEnumerable <TSource> DistinctBy <TSource>(this IEnumerable <TSource> source,
                                                          Func <TSource, dynamic> keySelector)
 {
     return(source.Distinct(XEqualityComparer <TSource> .Get(keySelector)));
 }