Example #1
0
        internal Arguments(string prefix, params KeyValuePair <string, string>[] pairs)
        {
            this._prefix = prefix ?? string.Empty;
            ChainableEqualizer <KeyValuePair <string, string> > chainableEqualizer = Eq <KeyValuePair <string, string> > .By((KeyValuePair <string, string> x, KeyValuePair <string, string> y) => string.Equals(x.Key, y.Key, StringComparison.OrdinalIgnoreCase), (KeyValuePair <string, string> x) => x.Key.ToLowerInvariant().GetHashCode());

            this._pairs      = ((IEnumerable <KeyValuePair <string, string> >)(pairs ?? new KeyValuePair <string, string> [0])).Distinct <KeyValuePair <string, string> >(chainableEqualizer).ToArray <KeyValuePair <string, string> >();
            this._dictionary = ((IEnumerable <KeyValuePair <string, string> >) this._pairs).ToDictionary <KeyValuePair <string, string>, string, string>((KeyValuePair <string, string> x) => x.Key, (KeyValuePair <string, string> x) => x.Value, StringComparer.OrdinalIgnoreCase);
        }
        internal Arguments(string prefix, params KeyValuePair <string, string>[] pairs)
        {
            _prefix = prefix ?? string.Empty;

            var uniqueKeys = Eq <KeyValuePair <string, string> > .By(
                (x, y) => string.Equals(x.Key, y.Key, StringComparison.OrdinalIgnoreCase),
                x => x.Key.ToLowerInvariant().GetHashCode());

            _pairs      = (pairs ?? new KeyValuePair <string, string> [0]).Distinct(uniqueKeys).ToArray();
            _dictionary = _pairs.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase);
        }
        public void SortBy_CustomEqualizer_EqualizerHonored()
        {
            OrderSubject            one = new OrderSubject(1, 1), two = new OrderSubject(2, 2);
            var                     subject           = new[] { one, two };
            IEqualityComparer <int> signDoesNotMatter = Eq <int> .By(
                (x, y) => Math.Abs(x).Equals(Math.Abs(y)),
                i => Math.Abs(i).GetHashCode());

            var actual = subject.SortBy(s => s.I1, new[] { -2, 1 }, signDoesNotMatter);

            Assert.That(actual, Is.EqualTo(new[] { two, one }));
        }
        public void Chaining_IsDestructive()
        {
            EqualitySubject x1 = new EqualitySubject("x", 1, 1m), x2 = new EqualitySubject("x", 1, 2m);
            ChainableEqualizer <EqualitySubject> sAndI = new SelectorEqualizer <EqualitySubject, string>(s => s.S)
                                                         .Then(s => s.I);

            Assert.That(sAndI.Equals(x1, x2), Is.True);

            var allProp = sAndI.Then(Eq <EqualitySubject> .By(s => s.D));

            Assert.That(allProp.Equals(x1, x2), Is.False);
            Assert.That(sAndI.Equals(x1, x2), Is.False);
        }
Example #5
0
        public void Chaining_IsDestructive()
        {
            EqualitySubject x1 = new EqualitySubject("x", 1, 1m), x2 = new EqualitySubject("x", 1, 2m);

            ChainableEqualizer <EqualitySubject> sAndI = new DelegatedEqualizer <EqualitySubject>((x, y) => x.S.Equals(y.S), Hasher.Zero)
                                                         .Then((x, y) => x.I.Equals(y.I), Hasher.Zero);

            Assert.That(sAndI.Equals(x1, x2), Is.True);

            var allProp = sAndI.Then(Eq <EqualitySubject> .By((x, y) => x.D.Equals(y.D), x => x.D.GetHashCode()));

            Assert.That(allProp.Equals(x1, x2), Is.False);
            Assert.That(sAndI.Equals(x1, x2), Is.False);
        }
Example #6
0
        internal Arguments(string prefix, params KeyValuePair <string, string>[] pairs)
        {
            this._prefix = prefix ?? string.Empty;
            bool equals(KeyValuePair <string, string> x, KeyValuePair <string, string> y) => string.Equals(x.Key, y.Key, StringComparison.OrdinalIgnoreCase);

            ChainableEqualizer <KeyValuePair <string, string> > chainableEqualizer = Eq <KeyValuePair <string, string> > .By(equals, x => x.Key.ToLowerInvariant().GetHashCode());

            _pairs = ((IEnumerable <KeyValuePair <string, string> >)(pairs ?? new KeyValuePair <string, string> [0])).Distinct(chainableEqualizer).ToArray();
            KeyValuePair <string, string>[] pairs1 = _pairs;
            string keySelector(KeyValuePair <string, string> x) => x.Key;

            StringComparer ordinalIgnoreCase = StringComparer.OrdinalIgnoreCase;

            _dictionary = ((IEnumerable <KeyValuePair <string, string> >)pairs1).ToDictionary(keySelector, x => x.Value, ordinalIgnoreCase);
        }
        public void ToHashSet_OnlyComparer_HashSetWithUniqueMembersAsComparer()
        {
            IEnumerable <DerivedType> subject = new[]
            {
                new DerivedType("one", 1),
                new DerivedType("two", 2),
                new DerivedType("ONE", 1)
            };
            IEqualityComparer <DerivedType> comparer = Eq <DerivedType> .By(
                (x, y) => x.Name.Equals(y.Name, StringComparison.OrdinalIgnoreCase),
                Hasher.Zero);

            HashSet <DerivedType> set = subject.ToHashSet(comparer);

            Assert.That(set, Has.Count.EqualTo(2));
        }
        public void Explore()
        {
            IEqualityComparer <EqualitySubject> subject = new SelectorEqualizer <EqualitySubject, int>(s => s.I);

            Assert.That(subject.Equals(new EqualitySubject {
                I = 1
            }, new EqualitySubject {
                I = 2
            }), Is.False);
            Assert.That(subject.GetHashCode(new EqualitySubject {
                I = 1
            }), Is.EqualTo(1.GetHashCode()));

            IEqualityComparer <EqualitySubject> byDAndI = new SelectorEqualizer <EqualitySubject, decimal>(s => s.D)
                                                          .Then(s => s.I);

            byDAndI = Eq <EqualitySubject> .By(s => s.D)
                      .Then(s => s.I);
        }
Example #9
0
        public void Explore()
        {
            Func <EqualitySubject, EqualitySubject, bool> compareI = (x, y) => x.I.Equals(y.I);
            var subject = new DelegatedEqualizer <EqualitySubject>(compareI, s => s.I.GetHashCode());
            var x1      = new EqualitySubject("x", 1, 1m);

            Assert.That(subject.Equals(x1, new EqualitySubject("y", 1, 2m)), Is.True);

            var custom = new DelegatedEqualizer <EqualitySubject>((x, y) => x.I.Equals(y.I), s => s.I.GetHashCode());

            Assert.That(custom.GetHashCode(x1), Is.EqualTo(x1.I.GetHashCode()));
            custom = new DelegatedEqualizer <EqualitySubject>((x, y) => x.I.Equals(y.I), s => Hasher.Default(s.I));
            Assert.That(custom.GetHashCode(x1), Is.EqualTo(x1.I.GetHashCode()));
            var @default = new DelegatedEqualizer <EqualitySubject>((x, y) => x.I.Equals(y.I), Hasher.Default);

            Assert.That(@default.GetHashCode(x1), Is.EqualTo(x1.GetHashCode()));
            var zero = new DelegatedEqualizer <EqualitySubject>((x, y) => x.I.Equals(y.I), Hasher.Zero);

            Assert.That(zero.GetHashCode(x1), Is.EqualTo(0));


            IEqualityComparer <EqualitySubject> bySAndI = new DelegatedEqualizer <EqualitySubject>((x, y) => x.S.Equals(y.S), Hasher.Zero)
                                                          .Then(new DelegatedEqualizer <EqualitySubject>((x, y) => x.I.Equals(y.I), Hasher.Default));

            bySAndI = new DelegatedEqualizer <EqualitySubject>((x, y) => x.S.Equals(y.S), Hasher.Zero)
                      .Then((x, y) => x.I == y.I, Hasher.Default);
            bySAndI = Eq <EqualitySubject> .By((x, y) => x.S.Equals(y.S), Hasher.Zero)
                      .Then((x, y) => x == y, Hasher.Default);

            IComparer <EqualitySubject> comparer = Cmp <EqualitySubject> .By(x => x.I);

            IEqualityComparer <EqualitySubject> eq         = new DelegatedEqualizer <EqualitySubject>(comparer, Hasher.Zero);
            Comparison <EqualitySubject>        comparison = (x, y) => x.D.CompareTo(y.D);

            eq = new DelegatedEqualizer <EqualitySubject>(comparison, Hasher.Zero);
        }