@Override
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }
        if (!(other instanceof Features)) {
            return false;
        }

        final Features that = (Features) other;
        return Objects.equals(this.features, that.features);
    }
@Test
    public void testEquals() {
        SupportedVersionRange v1 = new SupportedVersionRange((short) 1, (short) 2);
        Map<String, SupportedVersionRange> allFeatures = mkMap(mkEntry("feature_1", v1));
        Features<SupportedVersionRange> features = Features.supportedFeatures(allFeatures);
        Features<SupportedVersionRange> featuresClone = Features.supportedFeatures(allFeatures);
        assertEquals(features, featuresClone);

        SupportedVersionRange v2 = new SupportedVersionRange((short) 1, (short) 3);
        Map<String, SupportedVersionRange> allFeaturesDifferent = mkMap(mkEntry("feature_1", v2));
        Features<SupportedVersionRange> featuresDifferent = Features.supportedFeatures(allFeaturesDifferent);
        assertNotEquals(features, featuresDifferent);

        assertNotEquals(null, features);
    }