From 875ecfc12b68418841a0edb1ab150f994374dc3b Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Mon, 29 Jun 2020 10:23:20 +0300 Subject: [PATCH 1/7] BAEL-4175 - comparing version strings in java --- .../core-java-string-operations-2/pom.xml | 26 ++++ .../versioncomparison/VersionCompare.java | 25 ++++ .../VersionComparisonUnitTest.java | 135 ++++++++++++++++++ 3 files changed, 186 insertions(+) create mode 100644 core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/versioncomparison/VersionCompare.java create mode 100644 core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java diff --git a/core-java-modules/core-java-string-operations-2/pom.xml b/core-java-modules/core-java-string-operations-2/pom.xml index db32bf97a1..cbf5564206 100644 --- a/core-java-modules/core-java-string-operations-2/pom.xml +++ b/core-java-modules/core-java-string-operations-2/pom.xml @@ -75,6 +75,26 @@ ${assertj.version} test + + org.apache.maven + maven-artifact + 3.6.3 + + + org.gradle + gradle-core + 6.1.1 + + + com.fasterxml.jackson.core + jackson-core + 2.11.1 + + + com.vdurmont + semver4j + 3.1.0 + @@ -120,4 +140,10 @@ 1.14 + + + gradle-repo + https://repo.gradle.org/gradle/libs-releases-local/ + + diff --git a/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/versioncomparison/VersionCompare.java b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/versioncomparison/VersionCompare.java new file mode 100644 index 0000000000..5a1663e50d --- /dev/null +++ b/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/versioncomparison/VersionCompare.java @@ -0,0 +1,25 @@ +package com.baeldung.versioncomparison; + +public class VersionCompare { + + public static int compareVersions(String version1, String version2) { + int comparisonResult = 0; + + String[] version1Splits = version1.split("\\."); + String[] version2Splits = version2.split("\\."); + + int maxLengthOfVersionSplits = Math.max(version1Splits.length, version2Splits.length); + for (int i = 0; i < maxLengthOfVersionSplits; i++){ + Integer v1 = i < version1Splits.length ? Integer.parseInt(version1Splits[i]) : 0; + Integer v2 = i < version2Splits.length ? Integer.parseInt(version2Splits[i]) : 0; + int compare = v1.compareTo(v2); + if (compare != 0) { + comparisonResult = compare; + break; + } + } + + return comparisonResult; + } + +} diff --git a/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java new file mode 100644 index 0000000000..7221cdf6ec --- /dev/null +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java @@ -0,0 +1,135 @@ +package com.baeldung.versioncomparison; + +import org.junit.Test; + +import com.fasterxml.jackson.core.Version; +import com.vdurmont.semver4j.Semver; +import com.vdurmont.semver4j.Semver.VersionDiff; + +import org.apache.maven.artifact.versioning.ComparableVersion; +import org.gradle.util.VersionNumber; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class VersionComparisonUnitTest { + + @Test + public void givenVersionStrings_whenUsingMavenArtifact_thenCompareVersions() { + ComparableVersion version1_1 = new ComparableVersion("1.1"); + ComparableVersion version1_2 = new ComparableVersion("1.2"); + ComparableVersion version1_3 = new ComparableVersion("1.3"); + + assertTrue(version1_1.compareTo(version1_2) < 0); + assertTrue(version1_3.compareTo(version1_2) > 0); + + ComparableVersion version1_1_0 = new ComparableVersion("1.1.0"); + assertEquals(version1_1.compareTo(version1_1_0), 0); + + ComparableVersion version1_1_alpha = new ComparableVersion("1.1-alpha"); + assertTrue(version1_1.compareTo(version1_1_alpha) > 0); + + ComparableVersion version1_1_beta = new ComparableVersion("1.1-beta"); + ComparableVersion version1_1_milestone = new ComparableVersion("1.1-milestone"); + ComparableVersion version1_1_rc = new ComparableVersion("1.1-rc"); + ComparableVersion version1_1_snapshot = new ComparableVersion("1.1-snapshot"); + + assertTrue(version1_1_alpha.compareTo(version1_1_beta) < 0); + assertTrue(version1_1_beta.compareTo(version1_1_milestone) < 0); + assertTrue(version1_1_rc.compareTo(version1_1_snapshot) < 0); + assertTrue(version1_1_snapshot.compareTo(version1_1) < 0); + + ComparableVersion version1_1_c = new ComparableVersion("1.1-c"); + ComparableVersion version1_1_z = new ComparableVersion("1.1-z"); + ComparableVersion version1_1_1 = new ComparableVersion("1.1.1"); + + assertTrue(version1_1_c.compareTo(version1_1_z) < 0); + assertTrue(version1_1_z.compareTo(version1_1_1) < 0); + } + + @Test + public void givenVersionStrings_whenUsingGradle_thenCompareVersions() { + VersionNumber version1_1 = VersionNumber.parse("1.1"); + VersionNumber version1_2 = VersionNumber.parse("1.2"); + VersionNumber version1_3 = VersionNumber.parse("1.3"); + + assertTrue(version1_1.compareTo(version1_2) < 0); + assertTrue(version1_3.compareTo(version1_2) > 0); + + VersionNumber version1_1_0 = VersionNumber.parse("1.1.0"); + assertEquals(version1_1.compareTo(version1_1_0), 0); + + VersionNumber version1_1_1_1_alpha = VersionNumber.parse("1.1.1.1-alpha"); + assertTrue(version1_1.compareTo(version1_1_1_1_alpha) < 0); + + VersionNumber version1_1_beta = VersionNumber.parse("1.1.0.0-beta"); + assertTrue(version1_1_beta.compareTo(version1_1_1_1_alpha) < 0); + + VersionNumber version1_1_1_snapshot = VersionNumber.parse("1.1.1-snapshot"); + assertTrue(version1_1_1_1_alpha.compareTo(version1_1_1_snapshot) < 0); + } + + @Test + public void givenVersionStrings_whenUsingJackson_thenCompareVersions() { + Version version1_1 = new Version(1, 1, 0, null, null, null); + Version version1_2 = new Version(1, 2, 0, null, null, null); + Version version1_3 = new Version(1, 3, 0, null, null, null); + + assertTrue(version1_1.compareTo(version1_2) < 0); + assertTrue(version1_3.compareTo(version1_2) > 0); + + Version version1_1_1 = new Version(1, 1, 1, null, null, null); + assertTrue(version1_1.compareTo(version1_1_1) < 0); + + Version version1_1_maven = new Version(1, 1, 0, null, "org.apache.maven", null); + Version version1_1_gradle = new Version(1, 1, 0, null, "org.gradle", null); + assertTrue(version1_1_maven.compareTo(version1_1_gradle) < 0); + + Version version1_1_snapshot = new Version(1, 1, 0, "snapshot", null, null); + assertEquals(version1_1.compareTo(version1_1_snapshot), 0); + + assertEquals(version1_1_snapshot.isSnapshot(), true); + } + + @Test + public void givenVersionStrings_whenUsingSemver_thenCompareVersions() { + Semver version1_1 = new Semver("1.1.0"); + Semver version1_2 = new Semver("1.2.0"); + Semver version1_3 = new Semver("1.3.0"); + + assertTrue(version1_1.compareTo(version1_2) < 0); + assertTrue(version1_3.compareTo(version1_2) > 0); + + Semver version1_1_alpha = new Semver("1.1.0-alpha"); + assertTrue(version1_1.isGreaterThan(version1_1_alpha)); + + Semver version1_1_beta = new Semver("1.1.0-beta"); + Semver version1_1_milestone = new Semver("1.1.0-milestone"); + Semver version1_1_rc = new Semver("1.1.0-rc"); + Semver version1_1_snapshot = new Semver("1.1.0-snapshot"); + + assertTrue(version1_1_alpha.isLowerThan(version1_1_beta)); + assertTrue(version1_1_beta.compareTo(version1_1_milestone) < 0); + assertTrue(version1_1_rc.compareTo(version1_1_snapshot) < 0); + assertTrue(version1_1_snapshot.compareTo(version1_1) < 0); + + assertTrue(version1_1.isEqualTo("1.1.0")); + + assertEquals(version1_1.diff("2.1.0"), VersionDiff.MAJOR); + assertEquals(version1_1.diff("1.2.3"), VersionDiff.MINOR); + assertEquals(version1_1.diff("1.1.1"), VersionDiff.PATCH); + + assertTrue(version1_1.isStable()); + assertEquals(version1_1_alpha.isStable(), false); + } + + @Test + public void givenVersionStrings_whenUsingCustomVersionCompare_thenCompareVersions() { + assertTrue(VersionCompare.compareVersions("1.0.1", "1.1.2") < 0); + assertTrue(VersionCompare.compareVersions("1.0.1", "1.10") < 0); + assertTrue(VersionCompare.compareVersions("1.1.2", "1.0.1") > 0); + assertTrue(VersionCompare.compareVersions("1.1.2", "1.2") < 0); + assertEquals(VersionCompare.compareVersions("1.3.0", "1.3"), 0); + } + +} From d7f9bec70b353e64c30dd147f4fe50cbcd8d23d0 Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Thu, 9 Jul 2020 09:59:50 +0300 Subject: [PATCH 2/7] Update core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java Co-authored-by: KevinGilmore --- .../baeldung/versioncomparison/VersionComparisonUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java index 7221cdf6ec..a8e2e53853 100644 --- a/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java @@ -88,7 +88,7 @@ public class VersionComparisonUnitTest { Version version1_1_snapshot = new Version(1, 1, 0, "snapshot", null, null); assertEquals(version1_1.compareTo(version1_1_snapshot), 0); - assertEquals(version1_1_snapshot.isSnapshot(), true); + assertTrue(version1_1_snapshot.isSnapshot()); } @Test From 0c612f78e839989b80a5fbcca4c3f7c315995829 Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Thu, 9 Jul 2020 10:01:20 +0300 Subject: [PATCH 3/7] used assertFalse in place of assertEquals --- .../baeldung/versioncomparison/VersionComparisonUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java index a8e2e53853..859d54599c 100644 --- a/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java @@ -120,7 +120,7 @@ public class VersionComparisonUnitTest { assertEquals(version1_1.diff("1.1.1"), VersionDiff.PATCH); assertTrue(version1_1.isStable()); - assertEquals(version1_1_alpha.isStable(), false); + assertFalse(version1_1_alpha.isStable()); } @Test From 2e66a84425802f28ebd0c7bcdcf15352aeaba970 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Thu, 9 Jul 2020 10:02:05 +0300 Subject: [PATCH 4/7] correct import --- .../baeldung/versioncomparison/VersionComparisonUnitTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java index 859d54599c..be8dca0d10 100644 --- a/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java +++ b/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java @@ -10,6 +10,7 @@ import org.apache.maven.artifact.versioning.ComparableVersion; import org.gradle.util.VersionNumber; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class VersionComparisonUnitTest { From 7f16e3e80e071025c2b3dffb0f066a4355fb9ca9 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Thu, 9 Jul 2020 10:13:30 +0300 Subject: [PATCH 5/7] BAEL-4175 - moved code to a new module - core-java-string-operations-3 --- .../core-java-string-operations-2/pom.xml | 26 ------ .../core-java-string-operations-3/pom.xml | 89 +++++++++++++++++++ .../versioncomparison/VersionCompare.java | 0 .../VersionComparisonUnitTest.java | 0 core-java-modules/pom.xml | 1 + 5 files changed, 90 insertions(+), 26 deletions(-) create mode 100644 core-java-modules/core-java-string-operations-3/pom.xml rename core-java-modules/{core-java-string-operations-2 => core-java-string-operations-3}/src/main/java/com/baeldung/versioncomparison/VersionCompare.java (100%) rename core-java-modules/{core-java-string-operations-2 => core-java-string-operations-3}/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java (100%) diff --git a/core-java-modules/core-java-string-operations-2/pom.xml b/core-java-modules/core-java-string-operations-2/pom.xml index cbf5564206..db32bf97a1 100644 --- a/core-java-modules/core-java-string-operations-2/pom.xml +++ b/core-java-modules/core-java-string-operations-2/pom.xml @@ -75,26 +75,6 @@ ${assertj.version} test - - org.apache.maven - maven-artifact - 3.6.3 - - - org.gradle - gradle-core - 6.1.1 - - - com.fasterxml.jackson.core - jackson-core - 2.11.1 - - - com.vdurmont - semver4j - 3.1.0 - @@ -140,10 +120,4 @@ 1.14 - - - gradle-repo - https://repo.gradle.org/gradle/libs-releases-local/ - - diff --git a/core-java-modules/core-java-string-operations-3/pom.xml b/core-java-modules/core-java-string-operations-3/pom.xml new file mode 100644 index 0000000000..210c31b29a --- /dev/null +++ b/core-java-modules/core-java-string-operations-3/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + core-java-string-operations-3 + 0.1.0-SNAPSHOT + core-java-string-operations-3 + jar + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../ + + + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.apache.maven + maven-artifact + 3.6.3 + + + org.gradle + gradle-core + 6.1.1 + + + com.fasterxml.jackson.core + jackson-core + 2.11.1 + + + com.vdurmont + semver4j + 3.1.0 + + + + + core-java-string-operations-3 + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.0 + + + package + + shade + + + + + org.openjdk.jmh.Main + + + + + + + + + + src/main/resources + true + + + + + + 3.6.1 + + + + + gradle-repo + https://repo.gradle.org/gradle/libs-releases-local/ + + + diff --git a/core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/versioncomparison/VersionCompare.java b/core-java-modules/core-java-string-operations-3/src/main/java/com/baeldung/versioncomparison/VersionCompare.java similarity index 100% rename from core-java-modules/core-java-string-operations-2/src/main/java/com/baeldung/versioncomparison/VersionCompare.java rename to core-java-modules/core-java-string-operations-3/src/main/java/com/baeldung/versioncomparison/VersionCompare.java diff --git a/core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java similarity index 100% rename from core-java-modules/core-java-string-operations-2/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java rename to core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 26c374b51d..f55f1231f9 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -123,6 +123,7 @@ core-java-string-conversions-2 core-java-string-operations core-java-string-operations-2 + core-java-string-operations-3 core-java-strings core-java-sun From a027dc8833c7fc2f552d64f424e7b365b94c93e0 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Thu, 9 Jul 2020 10:19:08 +0300 Subject: [PATCH 6/7] POM fixes --- .../core-java-string-operations-3/pom.xml | 44 ++++--------------- 1 file changed, 8 insertions(+), 36 deletions(-) diff --git a/core-java-modules/core-java-string-operations-3/pom.xml b/core-java-modules/core-java-string-operations-3/pom.xml index 210c31b29a..5edff0e090 100644 --- a/core-java-modules/core-java-string-operations-3/pom.xml +++ b/core-java-modules/core-java-string-operations-3/pom.xml @@ -25,59 +25,31 @@ org.apache.maven maven-artifact - 3.6.3 + ${maven-artifact.version} org.gradle gradle-core - 6.1.1 + ${gradle-core.version} com.fasterxml.jackson.core jackson-core - 2.11.1 + ${jackson-core.version} com.vdurmont semver4j - 3.1.0 + ${semver4j.version} - - core-java-string-operations-3 - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.0 - - - package - - shade - - - - - org.openjdk.jmh.Main - - - - - - - - - - src/main/resources - true - - - - 3.6.1 + 3.6.3 + 6.1.1 + 2.11.1 + 3.1.0 From f43b2141dd1dae4f7776898f5ab533c95246aff8 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Mon, 13 Jul 2020 06:11:58 +0300 Subject: [PATCH 7/7] BAEL-4175 - swapped argument order for assertEquals --- .../VersionComparisonUnitTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java index be8dca0d10..145e9788e4 100644 --- a/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java +++ b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/versioncomparison/VersionComparisonUnitTest.java @@ -25,7 +25,7 @@ public class VersionComparisonUnitTest { assertTrue(version1_3.compareTo(version1_2) > 0); ComparableVersion version1_1_0 = new ComparableVersion("1.1.0"); - assertEquals(version1_1.compareTo(version1_1_0), 0); + assertEquals(0, version1_1.compareTo(version1_1_0)); ComparableVersion version1_1_alpha = new ComparableVersion("1.1-alpha"); assertTrue(version1_1.compareTo(version1_1_alpha) > 0); @@ -58,7 +58,7 @@ public class VersionComparisonUnitTest { assertTrue(version1_3.compareTo(version1_2) > 0); VersionNumber version1_1_0 = VersionNumber.parse("1.1.0"); - assertEquals(version1_1.compareTo(version1_1_0), 0); + assertEquals(0, version1_1.compareTo(version1_1_0)); VersionNumber version1_1_1_1_alpha = VersionNumber.parse("1.1.1.1-alpha"); assertTrue(version1_1.compareTo(version1_1_1_1_alpha) < 0); @@ -87,7 +87,7 @@ public class VersionComparisonUnitTest { assertTrue(version1_1_maven.compareTo(version1_1_gradle) < 0); Version version1_1_snapshot = new Version(1, 1, 0, "snapshot", null, null); - assertEquals(version1_1.compareTo(version1_1_snapshot), 0); + assertEquals(0, version1_1.compareTo(version1_1_snapshot)); assertTrue(version1_1_snapshot.isSnapshot()); } @@ -116,9 +116,9 @@ public class VersionComparisonUnitTest { assertTrue(version1_1.isEqualTo("1.1.0")); - assertEquals(version1_1.diff("2.1.0"), VersionDiff.MAJOR); - assertEquals(version1_1.diff("1.2.3"), VersionDiff.MINOR); - assertEquals(version1_1.diff("1.1.1"), VersionDiff.PATCH); + assertEquals(VersionDiff.MAJOR, version1_1.diff("2.1.0")); + assertEquals(VersionDiff.MINOR, version1_1.diff("1.2.3")); + assertEquals(VersionDiff.PATCH, version1_1.diff("1.1.1")); assertTrue(version1_1.isStable()); assertFalse(version1_1_alpha.isStable()); @@ -130,7 +130,7 @@ public class VersionComparisonUnitTest { assertTrue(VersionCompare.compareVersions("1.0.1", "1.10") < 0); assertTrue(VersionCompare.compareVersions("1.1.2", "1.0.1") > 0); assertTrue(VersionCompare.compareVersions("1.1.2", "1.2") < 0); - assertEquals(VersionCompare.compareVersions("1.3.0", "1.3"), 0); + assertEquals(0, VersionCompare.compareVersions("1.3.0", "1.3")); } }