/// <summary> /// Specifies whether this comparer expects to compare keys or /// values. /// </summary> /// <returns> /// <b>true</b> iff all the underlying compares implement the /// <see cref="IEntryAwareComparer"/> interface and all /// <code>IsKeyComparator()</code> calls return <b>true</b>. /// </returns> public bool IsKeyComparer() { IComparer[] comparers = Comparers; for (int i = 0, c = comparers.Length; i < c; i++) { if (!SafeComparer.IsKeyComparer(comparers[i])) { return(false); } } return(true); }
public void TestInverseComparer() { InverseComparer ic1 = new InverseComparer(); InverseComparer ic2 = new InverseComparer(); Assert.IsNotNull(ic1); Assert.AreEqual(ic1, ic2); Assert.AreEqual(ic1.ToString(), ic2.ToString()); Assert.AreEqual(ic1.GetHashCode(), ic2.GetHashCode()); InverseComparer ic3 = new InverseComparer(IdentityExtractor.Instance); Assert.AreNotEqual(ic1, ic3); Assert.IsNotNull(ic3.Comparer); Assert.AreEqual(ic3.Comparer, IdentityExtractor.Instance); Assert.AreEqual(ic1.Compare(null, null), 0); Assert.AreEqual(ic1.Compare(new object(), null), -1); Assert.AreEqual(ic1.Compare(null, new object()), 1); try { Assert.AreEqual(ic1.Compare(new object(), new object()), 0); } catch (Exception e) { Assert.IsInstanceOf(typeof(ArgumentException), e); } SafeComparer sc = new SafeComparer(IdentityExtractor.Instance); Assert.AreEqual(ic1.Compare(10, 100), 1); Assert.AreEqual(ic3.Compare(10, 100), -sc.Compare(10, 100)); TestQueryCacheEntry entry1 = new TestQueryCacheEntry("k2", "aaa"); TestQueryCacheEntry entry2 = new TestQueryCacheEntry("k1", "zzz"); ic3 = new InverseComparer(IdentityExtractor.Instance); sc = new SafeComparer(IdentityExtractor.Instance); Assert.AreEqual(ic3.CompareEntries(entry2, entry1), -1); Assert.AreEqual(ic3.CompareEntries(entry2, entry1), -sc.CompareEntries(entry2, entry1)); InverseComparer ic4 = new InverseComparer(new KeyExtractor("Key")); Assert.AreEqual(ic4.Compare(entry1, entry2), -1); }
public void TestSafeComparer() { SafeComparer sc1 = new SafeComparer(); SafeComparer sc2 = new SafeComparer(); Assert.IsNotNull(sc1); Assert.AreEqual(sc1, sc2); Assert.AreEqual(sc1.ToString(), sc2.ToString()); Assert.AreEqual(sc1.GetHashCode(), sc2.GetHashCode()); SafeComparer sc3 = new SafeComparer(IdentityExtractor.Instance); Assert.AreNotEqual(sc1, sc3); Assert.IsNotNull(sc3.Comparer); Assert.AreEqual(sc3.Comparer, IdentityExtractor.Instance); Assert.AreEqual(sc1.Compare(null, null), 0); Assert.AreEqual(sc1.Compare(new object(), null), 1); Assert.AreEqual(sc1.Compare(null, new object()), -1); try { Assert.AreEqual(sc1.Compare(new object(), new object()), 0); } catch (Exception e) { Assert.IsInstanceOf(typeof(ArgumentException), e); } Assert.AreEqual(sc1.Compare(10, 100), -1); Assert.AreEqual(sc3.Compare(10, 100), -1); TestQueryCacheEntry entry1 = new TestQueryCacheEntry("k2", "ana"); TestQueryCacheEntry entry2 = new TestQueryCacheEntry("k1", "cana"); sc3 = new SafeComparer(IdentityExtractor.Instance); Assert.AreEqual(sc3.CompareEntries(entry2, entry1), 1); IComparer c = new Comparer(CultureInfo.CurrentCulture); sc3 = new SafeComparer(c); Assert.AreEqual(sc3.CompareEntries(entry1, entry2), -1); }