@Override
    public int hashCode(final Path.Type type, final PathAttributes attr) {
        int result = 0;
        for(ComparisonService delegate : delegates) {
            result = 31 * result + delegate.hashCode(type, attr);
        }
        return result;
    }
@Test
    public void testHashCode() {
        final PathAttributes attr = new PathAttributes().withModificationDate(1000L).withSize(2L);
        assertEquals(0, new ChainedComparisonService(new TimestampComparisonService()).hashCode(Path.Type.file, PathAttributes.EMPTY));
        assertNotEquals(0, new ChainedComparisonService(new TimestampComparisonService()).hashCode(Path.Type.file, attr));
        assertEquals(new ChainedComparisonService(new TimestampComparisonService()).hashCode(Path.Type.file, attr),
                new ChainedComparisonService(new TimestampComparisonService()).hashCode(Path.Type.file, attr));
        assertNotEquals(new TimestampComparisonService().hashCode(Path.Type.file, attr), new SizeComparisonService().hashCode(Path.Type.file, attr));
        assertNotEquals(new ChainedComparisonService(new TimestampComparisonService()).hashCode(Path.Type.file, attr),
                new ChainedComparisonService(new TimestampComparisonService(), new SizeComparisonService()).hashCode(Path.Type.file, attr));
    }