public void Should_compare_original_item_if_selector_returns_it()
    {
        var comparer = new ProjectionEqualityComparer <string, string>(s => s);

        comparer.Equals("value", "value").Should().BeTrue();
        comparer.Equals("value", "othervalue").Should().BeFalse();
    }
    public void Should_compare_nulls()
    {
        var comparer = new ProjectionEqualityComparer <string, string>(s => s);

        comparer.Equals(null, null).Should().BeTrue();
        comparer.Equals("value", null).Should().BeFalse();
        comparer.Equals(null, "value").Should().BeFalse();
    }
    public void Should_use_provided_comparer()
    {
        var caseInsensitiveComparer = new ProjectionEqualityComparer <string, string>(s => s, StringComparer.OrdinalIgnoreCase);

        caseInsensitiveComparer.Equals("value", "VALUE").Should().BeTrue();

        var caseSensitiveComparer = new ProjectionEqualityComparer <string, string>(s => s, StringComparer.Ordinal);

        caseSensitiveComparer.Equals("value", "VALUE").Should().BeFalse();
    }
    public void Should_compare_projected_objects(string value, string otherValue)
    {
        var comparer = new ProjectionEqualityComparer <string, string>(s => s.Substring(0, 3));

        comparer.Equals(value, otherValue).Should().BeTrue();
    }