semver4j icon indicating copy to clipboard operation
semver4j copied to clipboard

Compare versions without patch level returns unexpected results

Open npitch opened this issue 2 years ago • 1 comments

 >=1.100 satisfied by 1.2.0 : false
 1.2.0 satisfies >=1.100 : true
 1.2.0 isEqual 1.100 : true
 1.100 isEqual 1.2.0 : false

This is the result from executing the following code:

public static void main(String[] args) {
        String requirement = ">=1.100";
        String version = "1.2.0";

        Requirement r = Requirement.buildNPM(requirement);
        boolean satisfiedBy = r.isSatisfiedBy(version);
        System.out.println(String.format(" %s satisfied by %s : %s", r, version, satisfiedBy));

        boolean satisfies = new Semver(version, SemverType.NPM).satisfies(requirement);
        System.out.println(String.format(" %s satisfies %s : %s", version, requirement, satisfies));

        String v1 = "1.2.0";
        String v2 = "1.100";
        boolean isEqualV1V2 = new Semver(v1, SemverType.NPM).isEqualTo(new Semver(v2, SemverType.NPM));
        System.out.println(String.format(" %s isEqual %s : %s", v1, v2, isEqualV1V2));

        boolean isEqualV2V1 = new Semver(v2, SemverType.NPM).isEqualTo(new Semver(v1, SemverType.NPM));
        System.out.println(String.format(" %s isEqual %s : %s", v2, v1, isEqualV2V1));

    } 

and one of the bugs is in the following code: Semver#isEqualTo

        if (this.type == SemverType.NPM) {
            if (this.getMajor() != version.getMajor()) return false;
            if (version.getMinor() == null) return true;
            if (version.getPatch() == null) return true;
        }

if (version.getPatch() == null) return true;

npitch avatar Aug 27 '21 15:08 npitch

@npitch if you are still interesting, I've made copy of this lib and fix bug reported by you. Look for version 2.0.1

piotrooo avatar Jul 22 '22 22:07 piotrooo