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); }
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); }
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); }
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); }