From a567d3187141f582d891442bb09ec935ec1dcfcd Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Tue, 31 Oct 2023 18:15:47 +0700 Subject: [PATCH 01/27] add some methods --- .../com/baeldung/uuid/UUIDLongGenerator.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDLongGenerator.java diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDLongGenerator.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDLongGenerator.java new file mode 100644 index 0000000000..8ac71b1ce6 --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDLongGenerator.java @@ -0,0 +1,58 @@ +package com.baeldung.uuid; + +import java.nio.ByteBuffer; +import java.util.UUID; + +public class UUIDLongGenerator { + public long getLeastSignificantBits(){ + return UUID.randomUUID().getLeastSignificantBits(); + } + + public long getMostSignificantBits(){ + return UUID.randomUUID().getMostSignificantBits(); + } + + public long gethashCode(){ + return UUID.randomUUID().toString().hashCode(); + } + + public long combineByteBuffer(){ + UUID uuid = UUID.randomUUID(); + ByteBuffer bb = ByteBuffer.wrap(new byte[16]); + bb.putLong(uuid.getMostSignificantBits()); + bb.putLong(uuid.getLeastSignificantBits()); + bb.rewind(); // Kembalikan posisi buffer ke awal + return bb.getLong(); + } + + public long combineBitwise(){ + UUID uniqueUUID; + uniqueUUID = UUID.randomUUID(); + return (uniqueUUID.getMostSignificantBits() << 32) | (uniqueUUID.getLeastSignificantBits() & 0xFFFFFFFFL); + } + + public long combineDirect(){ + UUID uniqueUUID = UUID.randomUUID(); + long mostSignificantBits = uniqueUUID.getMostSignificantBits(); + long leastSignificantBits = uniqueUUID.getLeastSignificantBits(); + return mostSignificantBits ^ (leastSignificantBits >> 1); + } + + public long combinePermutation(){ + UUID uuid = UUID.randomUUID(); + long mostSigBits = uuid.getMostSignificantBits(); + long leastSigBits = uuid.getLeastSignificantBits(); + byte[] uuidBytes = new byte[16]; + + for (int i = 0; i < 8; i++) { + uuidBytes[i] = (byte) (mostSigBits >>> (8 * (7 - i))); + uuidBytes[i + 8] = (byte) (leastSigBits >>> (8 * (7 - i))); + } + + long result = 0; + for (byte b : uuidBytes) { + result = (result << 8) | (b & 0xFF); + } + return result; + } +} From ece5cdeb6ee96e85f29d556ed080f7ce13e8a2f8 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Tue, 31 Oct 2023 18:17:54 +0700 Subject: [PATCH 02/27] add unit test --- .../uuid/UUIDLongGeneratorUnitTest.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java new file mode 100644 index 0000000000..24add0a14a --- /dev/null +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java @@ -0,0 +1,63 @@ +package com.baeldung.uuid; + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.text.DecimalFormat; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.IntStream; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class UUIDLongGeneratorUnitTest { + final static int n = 1000000; + UUIDLongGenerator uuidLongGenerator = new UUIDLongGenerator(); + + @Test + void whenForeachGenerateLongValue_thenCollisionsCheck() { + printTableHeader(); + for (Method method : uuidLongGenerator.getClass().getDeclaredMethods()) { + collisionAndNegativeCheck(method); + } + } + + private void printTableHeader() { + System.out.format("%-30s %-15s %-15s %-15s %-15s%n", "Approach", "collisions", "negatives", "collision", "negative"); + System.out.format("%-30s %-15s %-15s %-15s %-15s%n", "(method name)", "count", "count", "probability", "probability"); + System.out.println("--------------------------------------------------------------------------------------------"); + } + + private void printOutput(String method, int collisionsCount, int negativeCount, double collisionsProbability, double negativeProbability) { + DecimalFormat decimalFormat = new DecimalFormat("#.#####"); + System.out.format("%-30s %-15s %-15s %-15s %-15s%n", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability)); + } + + private void collisionAndNegativeCheck(Method method) { + Set uniqueValues = new HashSet<>(); + AtomicInteger collisions = new AtomicInteger(0); + AtomicInteger negative = new AtomicInteger(0); + + IntStream.range(0, n).forEach(i -> { + try { + long uniqueValue = (long) method.invoke(uuidLongGenerator); + if (!uniqueValues.add(uniqueValue)) { + collisions.incrementAndGet(); + } + if (uniqueValue < 0) { + negative.incrementAndGet(); + } + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + }); + + double collisionsProbability = (double) collisions.get() / n; + double negativeProbability = (double) negative.get() / n; + printOutput(method.getName(), collisions.get(), negative.get(), collisionsProbability, negativeProbability); + + assertTrue(collisionsProbability <= 0.001); // threshold = 0.001 + } +} From 016579337010ab145058a3b25dc8b437f8c6f1b6 Mon Sep 17 00:00:00 2001 From: Hangga Aji Sayekti Date: Wed, 1 Nov 2023 10:36:43 +0700 Subject: [PATCH 03/27] Update core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java IntStream to loop Co-authored-by: Liam Williams --- .../uuid/UUIDLongGeneratorUnitTest.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java index 24add0a14a..6d2dff959c 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java @@ -37,20 +37,16 @@ public class UUIDLongGeneratorUnitTest { private void collisionAndNegativeCheck(Method method) { Set uniqueValues = new HashSet<>(); - AtomicInteger collisions = new AtomicInteger(0); - AtomicInteger negative = new AtomicInteger(0); + int collisions = 0; + int negative = 0; - IntStream.range(0, n).forEach(i -> { - try { - long uniqueValue = (long) method.invoke(uuidLongGenerator); - if (!uniqueValues.add(uniqueValue)) { - collisions.incrementAndGet(); - } - if (uniqueValue < 0) { - negative.incrementAndGet(); - } - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); + for (int i = 0; i < n; i++) { + long uniqueValue = (long) method.invoke(uuidLongGenerator); + if (!uniqueValues.add(uniqueValue)) { + collisions++; + } + if (uniqueValue < 0) { + negative++; } }); From b55db89b5fb10e1fb4d678505f86fe54a82b355c Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Wed, 1 Nov 2023 10:37:14 +0700 Subject: [PATCH 04/27] update --- ...or.java => UUIDPositiveLongGenerator.java} | 22 ++++--- .../uuid/UUIDLongGeneratorUnitTest.java | 63 ------------------- .../UUIDPositiveLongGeneratorUnitTest.java | 60 ++++++++++++++++++ 3 files changed, 73 insertions(+), 72 deletions(-) rename core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/{UUIDLongGenerator.java => UUIDPositiveLongGenerator.java} (68%) delete mode 100644 core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java create mode 100644 core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDLongGenerator.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java similarity index 68% rename from core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDLongGenerator.java rename to core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java index 8ac71b1ce6..bc8177837c 100644 --- a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDLongGenerator.java +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java @@ -3,17 +3,21 @@ package com.baeldung.uuid; import java.nio.ByteBuffer; import java.util.UUID; -public class UUIDLongGenerator { +/** + * Methods are called by reflection in the unit test + */ +@SuppressWarnings("unused") +public class UUIDPositiveLongGenerator { public long getLeastSignificantBits(){ - return UUID.randomUUID().getLeastSignificantBits(); + return Math.abs(UUID.randomUUID().getLeastSignificantBits()); } public long getMostSignificantBits(){ - return UUID.randomUUID().getMostSignificantBits(); + return Math.abs(UUID.randomUUID().getMostSignificantBits()); } public long gethashCode(){ - return UUID.randomUUID().toString().hashCode(); + return Math.abs(UUID.randomUUID().toString().hashCode()); } public long combineByteBuffer(){ @@ -21,21 +25,21 @@ public class UUIDLongGenerator { ByteBuffer bb = ByteBuffer.wrap(new byte[16]); bb.putLong(uuid.getMostSignificantBits()); bb.putLong(uuid.getLeastSignificantBits()); - bb.rewind(); // Kembalikan posisi buffer ke awal - return bb.getLong(); + bb.rewind(); + return Math.abs(bb.getLong()); } public long combineBitwise(){ UUID uniqueUUID; uniqueUUID = UUID.randomUUID(); - return (uniqueUUID.getMostSignificantBits() << 32) | (uniqueUUID.getLeastSignificantBits() & 0xFFFFFFFFL); + return Math.abs((uniqueUUID.getMostSignificantBits() << 32) | (uniqueUUID.getLeastSignificantBits() & 0xFFFFFFFFL)); } public long combineDirect(){ UUID uniqueUUID = UUID.randomUUID(); long mostSignificantBits = uniqueUUID.getMostSignificantBits(); long leastSignificantBits = uniqueUUID.getLeastSignificantBits(); - return mostSignificantBits ^ (leastSignificantBits >> 1); + return Math.abs(mostSignificantBits ^ (leastSignificantBits >> 1)); } public long combinePermutation(){ @@ -53,6 +57,6 @@ public class UUIDLongGenerator { for (byte b : uuidBytes) { result = (result << 8) | (b & 0xFF); } - return result; + return Math.abs(result); } } diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java deleted file mode 100644 index 24add0a14a..0000000000 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.uuid; - -import org.junit.jupiter.api.Test; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.text.DecimalFormat; -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.IntStream; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -public class UUIDLongGeneratorUnitTest { - final static int n = 1000000; - UUIDLongGenerator uuidLongGenerator = new UUIDLongGenerator(); - - @Test - void whenForeachGenerateLongValue_thenCollisionsCheck() { - printTableHeader(); - for (Method method : uuidLongGenerator.getClass().getDeclaredMethods()) { - collisionAndNegativeCheck(method); - } - } - - private void printTableHeader() { - System.out.format("%-30s %-15s %-15s %-15s %-15s%n", "Approach", "collisions", "negatives", "collision", "negative"); - System.out.format("%-30s %-15s %-15s %-15s %-15s%n", "(method name)", "count", "count", "probability", "probability"); - System.out.println("--------------------------------------------------------------------------------------------"); - } - - private void printOutput(String method, int collisionsCount, int negativeCount, double collisionsProbability, double negativeProbability) { - DecimalFormat decimalFormat = new DecimalFormat("#.#####"); - System.out.format("%-30s %-15s %-15s %-15s %-15s%n", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability)); - } - - private void collisionAndNegativeCheck(Method method) { - Set uniqueValues = new HashSet<>(); - AtomicInteger collisions = new AtomicInteger(0); - AtomicInteger negative = new AtomicInteger(0); - - IntStream.range(0, n).forEach(i -> { - try { - long uniqueValue = (long) method.invoke(uuidLongGenerator); - if (!uniqueValues.add(uniqueValue)) { - collisions.incrementAndGet(); - } - if (uniqueValue < 0) { - negative.incrementAndGet(); - } - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - }); - - double collisionsProbability = (double) collisions.get() / n; - double negativeProbability = (double) negative.get() / n; - printOutput(method.getName(), collisions.get(), negative.get(), collisionsProbability, negativeProbability); - - assertTrue(collisionsProbability <= 0.001); // threshold = 0.001 - } -} diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java new file mode 100644 index 0000000000..2df49b20fd --- /dev/null +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -0,0 +1,60 @@ +package com.baeldung.uuid; + +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.text.DecimalFormat; +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +public class UUIDPositiveLongGeneratorUnitTest { + private final static int n = 1000000; + private final UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); + private final Logger logger = LoggerFactory.getLogger(UUIDPositiveLongGeneratorUnitTest.class); + + @Test + void whenForeachGenerateLongValue_thenCollisionsCheck() throws InvocationTargetException, IllegalAccessException { + printTableHeader(); + for (Method method : uuidLongGenerator.getClass().getDeclaredMethods()) { + collisionAndNegativeCheck(method); + } + } + + + private void printTableHeader() { + logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", "Approach", "collisions", "negatives", "collision", "negative")); + logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", "(method name)", "count", "count", "probability", "probability")); + logger.info("--------------------------------------------------------------------------------------------"); + } + + private void printOutput(String method, int collisionsCount, int negativeCount, double collisionsProbability, double negativeProbability) { + DecimalFormat decimalFormat = new DecimalFormat("#.#####"); + //logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability))); + logger.info("%-30s{} %-15s{} %-15s{} %-15s{} %-15s{}", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability)); + } + + + private void collisionAndNegativeCheck(Method method) throws InvocationTargetException, IllegalAccessException { + Set uniqueValues = new HashSet<>(); + int collisions = 0; + int negative = 0; + for (int i = 0; i < n; i++) { + long uniqueValue = (long) method.invoke(uuidLongGenerator); + if (!uniqueValues.add(uniqueValue)) { + collisions++; + } + if (uniqueValue < 0) { + negative++; + } + } + double collisionsProbability = (double) collisions / n; + double negativeProbability = (double) negative / n; + printOutput(method.getName(), collisions, negative, collisionsProbability, negativeProbability); + assertThat(collisionsProbability).isLessThan(0.001); + } +} From 579f35981e6910a3b9957f6a95300edcd5ce7015 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Wed, 1 Nov 2023 11:01:27 +0700 Subject: [PATCH 05/27] update, rename class --- .../uuid/UUIDLongGeneratorUnitTest.java | 60 ------------------- .../UUIDPositiveLongGeneratorUnitTest.java | 6 +- 2 files changed, 3 insertions(+), 63 deletions(-) delete mode 100644 core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java deleted file mode 100644 index fde726d259..0000000000 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDLongGeneratorUnitTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.baeldung.uuid; - -import org.apache.log4j.Logger; -import org.junit.jupiter.api.Test; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.text.DecimalFormat; -import java.util.HashSet; -import java.util.Set; - -import static org.assertj.core.api.Assertions.assertThat; - -public class UUIDLongGeneratorUnitTest { - private final static int n = 1000000; - private final static double COLLISION_THRESHOLD = 0.001; - private static final Logger logger = Logger.getLogger(UUIDLongGeneratorUnitTest.class); - private final UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); - - @Test - void whenForeachGenerateLongValue_thenCollisionsCheck() throws InvocationTargetException, IllegalAccessException { - printTableHeader(); - for (Method method : uuidLongGenerator.getClass().getDeclaredMethods()) { - collisionAndNegativeCheck(method); - } - } - - private void printTableHeader() { - logger.info(String.format("%-30s %-15s %-15s %-15s %-15s%n", "Approach", "collisions", "negatives", "collision", "negative")); - logger.info(String.format("%-30s %-15s %-15s %-15s %-15s%n", "(method name)", "count", "count", "probability", "probability")); - System.out.println("--------------------------------------------------------------------------------------------"); - } - - private void printOutput(String method, int collisionsCount, int negativeCount, double collisionsProbability, double negativeProbability) { - DecimalFormat decimalFormat = new DecimalFormat("#.#####"); - logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability))); - } - - private void collisionAndNegativeCheck(Method method) throws InvocationTargetException, IllegalAccessException { - Set uniqueValues = new HashSet<>(); - int collisions = 0; - int negative = 0; - - for (int i = 0; i < n; i++) { - long uniqueValue = (long) method.invoke(uuidLongGenerator); - if (!uniqueValues.add(uniqueValue)) { - collisions++; - } - if (uniqueValue < 0) { - negative++; - } - } - - double collisionsProbability = (double) collisions / n; - double negativeProbability = (double) negative / n; - printOutput(method.getName(), collisions, negative, collisionsProbability, negativeProbability); - - assertThat(collisionsProbability).isLessThan(COLLISION_THRESHOLD); - } -} diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index 2df49b20fd..c910a6eb16 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -14,6 +14,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class UUIDPositiveLongGeneratorUnitTest { private final static int n = 1000000; + private final static double COLLISION_THRESHOLD = 0.001; private final UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); private final Logger logger = LoggerFactory.getLogger(UUIDPositiveLongGeneratorUnitTest.class); @@ -34,8 +35,7 @@ public class UUIDPositiveLongGeneratorUnitTest { private void printOutput(String method, int collisionsCount, int negativeCount, double collisionsProbability, double negativeProbability) { DecimalFormat decimalFormat = new DecimalFormat("#.#####"); - //logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability))); - logger.info("%-30s{} %-15s{} %-15s{} %-15s{} %-15s{}", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability)); + logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability))); } @@ -55,6 +55,6 @@ public class UUIDPositiveLongGeneratorUnitTest { double collisionsProbability = (double) collisions / n; double negativeProbability = (double) negative / n; printOutput(method.getName(), collisions, negative, collisionsProbability, negativeProbability); - assertThat(collisionsProbability).isLessThan(0.001); + assertThat(collisionsProbability).isLessThan(COLLISION_THRESHOLD); } } From 10ddc978542620d06d1ab34cf0ce71e6c5b56210 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Wed, 1 Nov 2023 12:44:04 +0700 Subject: [PATCH 06/27] update --- .../com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index c910a6eb16..5847ef44fb 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -22,7 +22,7 @@ public class UUIDPositiveLongGeneratorUnitTest { void whenForeachGenerateLongValue_thenCollisionsCheck() throws InvocationTargetException, IllegalAccessException { printTableHeader(); for (Method method : uuidLongGenerator.getClass().getDeclaredMethods()) { - collisionAndNegativeCheck(method); + collisionCheck(method); } } @@ -39,7 +39,7 @@ public class UUIDPositiveLongGeneratorUnitTest { } - private void collisionAndNegativeCheck(Method method) throws InvocationTargetException, IllegalAccessException { + private void collisionCheck(Method method) throws InvocationTargetException, IllegalAccessException { Set uniqueValues = new HashSet<>(); int collisions = 0; int negative = 0; From e0ca0be76af2e7b8a96a5d4e1c5165b1a0967b9d Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Wed, 1 Nov 2023 16:27:09 +0700 Subject: [PATCH 07/27] positive --- .../uuid/UUIDPositiveLongGeneratorUnitTest.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index 5847ef44fb..cd538af523 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -28,33 +28,27 @@ public class UUIDPositiveLongGeneratorUnitTest { private void printTableHeader() { - logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", "Approach", "collisions", "negatives", "collision", "negative")); - logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", "(method name)", "count", "count", "probability", "probability")); - logger.info("--------------------------------------------------------------------------------------------"); + logger.info(String.format("%-30s %-15s %-15s", "Approach(method name)", "collisions", "probability")); + logger.info("-----------------------------------------------------------------------"); } - private void printOutput(String method, int collisionsCount, int negativeCount, double collisionsProbability, double negativeProbability) { + private void printOutput(String method, int collisionsCount, double collisionsProbability) { DecimalFormat decimalFormat = new DecimalFormat("#.#####"); - logger.info(String.format("%-30s %-15s %-15s %-15s %-15s", method, collisionsCount, negativeCount, decimalFormat.format(collisionsProbability), decimalFormat.format(negativeProbability))); + logger.info(String.format("%-30s %-15s %-15s", method, collisionsCount, decimalFormat.format(collisionsProbability))); } private void collisionCheck(Method method) throws InvocationTargetException, IllegalAccessException { Set uniqueValues = new HashSet<>(); int collisions = 0; - int negative = 0; for (int i = 0; i < n; i++) { long uniqueValue = (long) method.invoke(uuidLongGenerator); if (!uniqueValues.add(uniqueValue)) { collisions++; } - if (uniqueValue < 0) { - negative++; - } } double collisionsProbability = (double) collisions / n; - double negativeProbability = (double) negative / n; - printOutput(method.getName(), collisions, negative, collisionsProbability, negativeProbability); + printOutput(method.getName(), collisions, collisionsProbability); assertThat(collisionsProbability).isLessThan(COLLISION_THRESHOLD); } } From 3286aab10c4b7a438e5b24c0a80bd368d7ad89e5 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Wed, 1 Nov 2023 18:24:02 +0700 Subject: [PATCH 08/27] bit 16 to 64 --- .../main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java index bc8177837c..bb3e0223f3 100644 --- a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java @@ -22,7 +22,7 @@ public class UUIDPositiveLongGenerator { public long combineByteBuffer(){ UUID uuid = UUID.randomUUID(); - ByteBuffer bb = ByteBuffer.wrap(new byte[16]); + ByteBuffer bb = ByteBuffer.wrap(new byte[64]); bb.putLong(uuid.getMostSignificantBits()); bb.putLong(uuid.getLeastSignificantBits()); bb.rewind(); From 039753af1fc5b661ba0a15524814d9b650988264 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Wed, 1 Nov 2023 18:26:54 +0700 Subject: [PATCH 09/27] back to 16 --- .../main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java index bb3e0223f3..bc8177837c 100644 --- a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java @@ -22,7 +22,7 @@ public class UUIDPositiveLongGenerator { public long combineByteBuffer(){ UUID uuid = UUID.randomUUID(); - ByteBuffer bb = ByteBuffer.wrap(new byte[64]); + ByteBuffer bb = ByteBuffer.wrap(new byte[16]); bb.putLong(uuid.getMostSignificantBits()); bb.putLong(uuid.getLeastSignificantBits()); bb.rewind(); From b946f580f48f8dd33a12f192544aea0176a6846b Mon Sep 17 00:00:00 2001 From: Hangga Aji Sayekti Date: Thu, 2 Nov 2023 09:39:17 +0700 Subject: [PATCH 10/27] Update core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java Minor style issue: put a space between () and { in each of these methods Co-authored-by: Liam Williams --- .../main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java index bc8177837c..b47fee1968 100644 --- a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java @@ -8,7 +8,7 @@ import java.util.UUID; */ @SuppressWarnings("unused") public class UUIDPositiveLongGenerator { - public long getLeastSignificantBits(){ + public long getLeastSignificantBits() { return Math.abs(UUID.randomUUID().getLeastSignificantBits()); } From 9fe75192ecea51637320985266159328aca02c4a Mon Sep 17 00:00:00 2001 From: Hangga Aji Sayekti Date: Thu, 2 Nov 2023 09:39:43 +0700 Subject: [PATCH 11/27] Update core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java assert that the value is positive Co-authored-by: Liam Williams --- .../com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index cd538af523..854279446b 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -43,6 +43,7 @@ public class UUIDPositiveLongGeneratorUnitTest { int collisions = 0; for (int i = 0; i < n; i++) { long uniqueValue = (long) method.invoke(uuidLongGenerator); + assertThat(uniqueValue).isPositive(); if (!uniqueValues.add(uniqueValue)) { collisions++; } From f25f06795b20c4d8947efcbaf779a02bc25b32e3 Mon Sep 17 00:00:00 2001 From: Hangga Aji Sayekti Date: Thu, 2 Nov 2023 09:40:04 +0700 Subject: [PATCH 12/27] Update core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java Simplify the throws clause Co-authored-by: Liam Williams --- .../com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index 854279446b..90ba11984f 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -38,7 +38,7 @@ public class UUIDPositiveLongGeneratorUnitTest { } - private void collisionCheck(Method method) throws InvocationTargetException, IllegalAccessException { + private void collisionCheck(Method method) throws Exception { Set uniqueValues = new HashSet<>(); int collisions = 0; for (int i = 0; i < n; i++) { From a5d0a15419cfcfeb3d0843e381188a58996bbe3e Mon Sep 17 00:00:00 2001 From: Hangga Aji Sayekti Date: Thu, 2 Nov 2023 09:40:20 +0700 Subject: [PATCH 13/27] Update core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java Simplify the throws clause Co-authored-by: Liam Williams --- .../com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index 90ba11984f..ebb061216b 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -19,7 +19,7 @@ public class UUIDPositiveLongGeneratorUnitTest { private final Logger logger = LoggerFactory.getLogger(UUIDPositiveLongGeneratorUnitTest.class); @Test - void whenForeachGenerateLongValue_thenCollisionsCheck() throws InvocationTargetException, IllegalAccessException { + void whenForeachGenerateLongValue_thenCollisionsCheck() throws Exception { printTableHeader(); for (Method method : uuidLongGenerator.getClass().getDeclaredMethods()) { collisionCheck(method); From 8f1a091a431bcd423d59343327f8a9b8540fc9df Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Thu, 2 Nov 2023 09:42:31 +0700 Subject: [PATCH 14/27] update : add space after () --- .../com/baeldung/uuid/UUIDPositiveLongGenerator.java | 12 ++++++------ .../uuid/UUIDPositiveLongGeneratorUnitTest.java | 7 +++---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java index b47fee1968..7b98c05684 100644 --- a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java @@ -12,15 +12,15 @@ public class UUIDPositiveLongGenerator { return Math.abs(UUID.randomUUID().getLeastSignificantBits()); } - public long getMostSignificantBits(){ + public long getMostSignificantBits() { return Math.abs(UUID.randomUUID().getMostSignificantBits()); } - public long gethashCode(){ + public long gethashCode() { return Math.abs(UUID.randomUUID().toString().hashCode()); } - public long combineByteBuffer(){ + public long combineByteBuffer() { UUID uuid = UUID.randomUUID(); ByteBuffer bb = ByteBuffer.wrap(new byte[16]); bb.putLong(uuid.getMostSignificantBits()); @@ -29,20 +29,20 @@ public class UUIDPositiveLongGenerator { return Math.abs(bb.getLong()); } - public long combineBitwise(){ + public long combineBitwise() { UUID uniqueUUID; uniqueUUID = UUID.randomUUID(); return Math.abs((uniqueUUID.getMostSignificantBits() << 32) | (uniqueUUID.getLeastSignificantBits() & 0xFFFFFFFFL)); } - public long combineDirect(){ + public long combineDirect() { UUID uniqueUUID = UUID.randomUUID(); long mostSignificantBits = uniqueUUID.getMostSignificantBits(); long leastSignificantBits = uniqueUUID.getLeastSignificantBits(); return Math.abs(mostSignificantBits ^ (leastSignificantBits >> 1)); } - public long combinePermutation(){ + public long combinePermutation() { UUID uuid = UUID.randomUUID(); long mostSigBits = uuid.getMostSignificantBits(); long leastSigBits = uuid.getLeastSignificantBits(); diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index ebb061216b..cc377254c4 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -4,7 +4,6 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.DecimalFormat; import java.util.HashSet; @@ -13,7 +12,7 @@ import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; public class UUIDPositiveLongGeneratorUnitTest { - private final static int n = 1000000; + private final static int N = 1000000; private final static double COLLISION_THRESHOLD = 0.001; private final UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); private final Logger logger = LoggerFactory.getLogger(UUIDPositiveLongGeneratorUnitTest.class); @@ -41,14 +40,14 @@ public class UUIDPositiveLongGeneratorUnitTest { private void collisionCheck(Method method) throws Exception { Set uniqueValues = new HashSet<>(); int collisions = 0; - for (int i = 0; i < n; i++) { + for (int i = 0; i < N; i++) { long uniqueValue = (long) method.invoke(uuidLongGenerator); assertThat(uniqueValue).isPositive(); if (!uniqueValues.add(uniqueValue)) { collisions++; } } - double collisionsProbability = (double) collisions / n; + double collisionsProbability = (double) collisions / N; printOutput(method.getName(), collisions, collisionsProbability); assertThat(collisionsProbability).isLessThan(COLLISION_THRESHOLD); } From 69d17b634d22690d4a7981287126e9837a5c9e6d Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Thu, 2 Nov 2023 11:25:19 +0700 Subject: [PATCH 15/27] N to NUMBER_OF_CHECKS --- .../baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index cc377254c4..9db7a2f271 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -12,7 +12,7 @@ import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; public class UUIDPositiveLongGeneratorUnitTest { - private final static int N = 1000000; + private final static int NUMBER_OF_CHECKS = 1000000; private final static double COLLISION_THRESHOLD = 0.001; private final UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); private final Logger logger = LoggerFactory.getLogger(UUIDPositiveLongGeneratorUnitTest.class); @@ -40,14 +40,14 @@ public class UUIDPositiveLongGeneratorUnitTest { private void collisionCheck(Method method) throws Exception { Set uniqueValues = new HashSet<>(); int collisions = 0; - for (int i = 0; i < N; i++) { + for (int i = 0; i < NUMBER_OF_CHECKS; i++) { long uniqueValue = (long) method.invoke(uuidLongGenerator); assertThat(uniqueValue).isPositive(); if (!uniqueValues.add(uniqueValue)) { collisions++; } } - double collisionsProbability = (double) collisions / N; + double collisionsProbability = (double) collisions / NUMBER_OF_CHECKS; printOutput(method.getName(), collisions, collisionsProbability); assertThat(collisionsProbability).isLessThan(COLLISION_THRESHOLD); } From 0f222559dc3a77c7e557682b7b410bc2305058e2 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Thu, 2 Nov 2023 14:16:43 +0700 Subject: [PATCH 16/27] simplyfying log --- .../core-java-uuid/src/test/resources/logback.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/resources/logback.xml b/core-java-modules/core-java-uuid/src/test/resources/logback.xml index 56af2d397e..092215ceed 100644 --- a/core-java-modules/core-java-uuid/src/test/resources/logback.xml +++ b/core-java-modules/core-java-uuid/src/test/resources/logback.xml @@ -2,8 +2,8 @@ - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - + %d{HH:mm:ss} - %msg%n + @@ -12,6 +12,7 @@ + From 7cc4de47ef85d2002fd9a13db57e3c455fd9e2c6 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Thu, 2 Nov 2023 16:55:49 +0700 Subject: [PATCH 17/27] remove some space --- .../com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index 9db7a2f271..fab07df2a0 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -25,7 +25,6 @@ public class UUIDPositiveLongGeneratorUnitTest { } } - private void printTableHeader() { logger.info(String.format("%-30s %-15s %-15s", "Approach(method name)", "collisions", "probability")); logger.info("-----------------------------------------------------------------------"); @@ -36,7 +35,6 @@ public class UUIDPositiveLongGeneratorUnitTest { logger.info(String.format("%-30s %-15s %-15s", method, collisionsCount, decimalFormat.format(collisionsProbability))); } - private void collisionCheck(Method method) throws Exception { Set uniqueValues = new HashSet<>(); int collisions = 0; From 18220b12af536a7c75860210c86ec9ea6ba0dc55 Mon Sep 17 00:00:00 2001 From: Hangga Aji Sayekti Date: Thu, 2 Nov 2023 21:05:07 +0700 Subject: [PATCH 18/27] Update core-java-modules/core-java-uuid/src/test/resources/logback.xml Ok.. Co-authored-by: Liam Williams --- core-java-modules/core-java-uuid/src/test/resources/logback.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java-modules/core-java-uuid/src/test/resources/logback.xml b/core-java-modules/core-java-uuid/src/test/resources/logback.xml index 092215ceed..8d3b4ff505 100644 --- a/core-java-modules/core-java-uuid/src/test/resources/logback.xml +++ b/core-java-modules/core-java-uuid/src/test/resources/logback.xml @@ -12,7 +12,6 @@ - From 39bc0b9eaad2eb6a2ee06d30a965496252ffeccf Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Thu, 2 Nov 2023 21:08:06 +0700 Subject: [PATCH 19/27] logback --- .../core-java-uuid/src/test/resources/logback.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/resources/logback.xml b/core-java-modules/core-java-uuid/src/test/resources/logback.xml index 8d3b4ff505..a076f8db47 100644 --- a/core-java-modules/core-java-uuid/src/test/resources/logback.xml +++ b/core-java-modules/core-java-uuid/src/test/resources/logback.xml @@ -2,8 +2,7 @@ - %d{HH:mm:ss} - %msg%n - + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n From 899700f27e7357cdb27653c0cb7be1a06323888d Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Fri, 3 Nov 2023 15:45:12 +0700 Subject: [PATCH 20/27] [Update] add time field --- .../UUIDPositiveLongGeneratorUnitTest.java | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index fab07df2a0..62b059f0e5 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -6,8 +6,7 @@ import org.slf4j.LoggerFactory; import java.lang.reflect.Method; import java.text.DecimalFormat; -import java.util.HashSet; -import java.util.Set; +import java.util.*; import static org.assertj.core.api.Assertions.assertThat; @@ -17,8 +16,11 @@ public class UUIDPositiveLongGeneratorUnitTest { private final UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); private final Logger logger = LoggerFactory.getLogger(UUIDPositiveLongGeneratorUnitTest.class); + List times = new ArrayList<>(); + @Test void whenForeachGenerateLongValue_thenCollisionsCheck() throws Exception { + times.clear(); printTableHeader(); for (Method method : uuidLongGenerator.getClass().getDeclaredMethods()) { collisionCheck(method); @@ -26,16 +28,17 @@ public class UUIDPositiveLongGeneratorUnitTest { } private void printTableHeader() { - logger.info(String.format("%-30s %-15s %-15s", "Approach(method name)", "collisions", "probability")); - logger.info("-----------------------------------------------------------------------"); + logger.info(String.format("%-30s %15s %15s %15s", "Approach(method name)", "collisions", "probability","Time")); + logger.info("--------------------------------------------------------------------------------"); } - private void printOutput(String method, int collisionsCount, double collisionsProbability) { + private void printOutput(String method, int collisionsCount, double collisionsProbability, String time) { DecimalFormat decimalFormat = new DecimalFormat("#.#####"); - logger.info(String.format("%-30s %-15s %-15s", method, collisionsCount, decimalFormat.format(collisionsProbability))); + logger.info(String.format("%-30s %15s %15s %15s", method, collisionsCount, decimalFormat.format(collisionsProbability),time)); } private void collisionCheck(Method method) throws Exception { + long start = System.currentTimeMillis(); Set uniqueValues = new HashSet<>(); int collisions = 0; for (int i = 0; i < NUMBER_OF_CHECKS; i++) { @@ -46,7 +49,34 @@ public class UUIDPositiveLongGeneratorUnitTest { } } double collisionsProbability = (double) collisions / NUMBER_OF_CHECKS; - printOutput(method.getName(), collisions, collisionsProbability); + long end = System.currentTimeMillis(); + String time = convertMillisToTime(end - start); + printOutput(method.getName(), collisions, collisionsProbability, time); assertThat(collisionsProbability).isLessThan(COLLISION_THRESHOLD); + + } + + private String convertMillisToTime(long currentTimeMillis) { + + long totalMilliseconds = currentTimeMillis % 1000; + times.add(totalMilliseconds); + long totalSeconds = (currentTimeMillis / 1000) % 60; + long totalMinutes = (currentTimeMillis / 60000) % 60; + long hours = (currentTimeMillis / 3600000); + StringJoiner stringBuffer = new StringJoiner(""); + + if (hours > 0){ + stringBuffer.add(hours+"h "); + } + if (totalMinutes > 0){ + stringBuffer.add(totalMinutes+" m "); + } + if (totalSeconds > 0){ + stringBuffer.add(totalSeconds+" s "); + } + if (totalMilliseconds > 0){ + stringBuffer.add(totalMilliseconds+" ms"); + } + return stringBuffer.toString(); } } From b7bc968da2a4f81850e2c7415e22ed0ccc4c6cd7 Mon Sep 17 00:00:00 2001 From: Hangga Aji Sayekti Date: Fri, 3 Nov 2023 17:13:48 +0700 Subject: [PATCH 21/27] Update core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java Oh yeah.. Co-authored-by: Liam Williams --- .../main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java index 7b98c05684..13b32be856 100644 --- a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/uuid/UUIDPositiveLongGenerator.java @@ -16,7 +16,7 @@ public class UUIDPositiveLongGenerator { return Math.abs(UUID.randomUUID().getMostSignificantBits()); } - public long gethashCode() { + public long getHashCode() { return Math.abs(UUID.randomUUID().toString().hashCode()); } From 32940c41e4a6f0db1a29e2093f7c79ae83e7e2d9 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Sat, 4 Nov 2023 15:28:49 +0700 Subject: [PATCH 22/27] update time test --- .../com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index 62b059f0e5..70b47df163 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -28,13 +28,13 @@ public class UUIDPositiveLongGeneratorUnitTest { } private void printTableHeader() { - logger.info(String.format("%-30s %15s %15s %15s", "Approach(method name)", "collisions", "probability","Time")); + logger.info(String.format("%-25s %15s %15s %15s", "Approach(method name)", "collisions", "probability","Testing Time")); logger.info("--------------------------------------------------------------------------------"); } private void printOutput(String method, int collisionsCount, double collisionsProbability, String time) { DecimalFormat decimalFormat = new DecimalFormat("#.#####"); - logger.info(String.format("%-30s %15s %15s %15s", method, collisionsCount, decimalFormat.format(collisionsProbability),time)); + logger.info(String.format("%-25s %15s %15s %15s", method, collisionsCount, decimalFormat.format(collisionsProbability),time)); } private void collisionCheck(Method method) throws Exception { From 0c8b5bd210b716979891651a7af36582987c6183 Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Sat, 18 Nov 2023 06:09:14 +0700 Subject: [PATCH 23/27] retry with colision --- .../baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index 70b47df163..27ac4fe51e 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -56,6 +56,13 @@ public class UUIDPositiveLongGeneratorUnitTest { } + private boolean isUnique(long value) { + // Implementasikan logika pengecekan keunikan, misalnya, dengan memeriksa dalam database + // Mengembalikan true jika nilai unik, false jika ada tumbukan + return true; // Implementasikan sesuai kebutuhan aplikasi Anda + } + + private String convertMillisToTime(long currentTimeMillis) { long totalMilliseconds = currentTimeMillis % 1000; From 213fb362a0f94947f85e85eb9dafd4637f1daf1c Mon Sep 17 00:00:00 2001 From: "@hangga" Date: Sat, 18 Nov 2023 14:17:19 +0700 Subject: [PATCH 24/27] simplyfiying test --- .../UUIDPositiveLongGeneratorUnitTest.java | 77 +++---------------- 1 file changed, 10 insertions(+), 67 deletions(-) diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java index 27ac4fe51e..756bee94e6 100644 --- a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDPositiveLongGeneratorUnitTest.java @@ -1,89 +1,32 @@ package com.baeldung.uuid; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.lang.reflect.Method; -import java.text.DecimalFormat; -import java.util.*; +import java.util.HashSet; +import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; public class UUIDPositiveLongGeneratorUnitTest { - private final static int NUMBER_OF_CHECKS = 1000000; - private final static double COLLISION_THRESHOLD = 0.001; - private final UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); - private final Logger logger = LoggerFactory.getLogger(UUIDPositiveLongGeneratorUnitTest.class); - List times = new ArrayList<>(); + //private final UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); + + Set uniqueValues = new HashSet<>(); @Test void whenForeachGenerateLongValue_thenCollisionsCheck() throws Exception { - times.clear(); - printTableHeader(); + UUIDPositiveLongGenerator uuidLongGenerator = new UUIDPositiveLongGenerator(); for (Method method : uuidLongGenerator.getClass().getDeclaredMethods()) { - collisionCheck(method); - } - } - - private void printTableHeader() { - logger.info(String.format("%-25s %15s %15s %15s", "Approach(method name)", "collisions", "probability","Testing Time")); - logger.info("--------------------------------------------------------------------------------"); - } - - private void printOutput(String method, int collisionsCount, double collisionsProbability, String time) { - DecimalFormat decimalFormat = new DecimalFormat("#.#####"); - logger.info(String.format("%-25s %15s %15s %15s", method, collisionsCount, decimalFormat.format(collisionsProbability),time)); - } - - private void collisionCheck(Method method) throws Exception { - long start = System.currentTimeMillis(); - Set uniqueValues = new HashSet<>(); - int collisions = 0; - for (int i = 0; i < NUMBER_OF_CHECKS; i++) { - long uniqueValue = (long) method.invoke(uuidLongGenerator); + long uniqueValue; + do uniqueValue = (long) method.invoke(uuidLongGenerator); while (!isUnique(uniqueValue)); assertThat(uniqueValue).isPositive(); - if (!uniqueValues.add(uniqueValue)) { - collisions++; - } } - double collisionsProbability = (double) collisions / NUMBER_OF_CHECKS; - long end = System.currentTimeMillis(); - String time = convertMillisToTime(end - start); - printOutput(method.getName(), collisions, collisionsProbability, time); - assertThat(collisionsProbability).isLessThan(COLLISION_THRESHOLD); - } private boolean isUnique(long value) { - // Implementasikan logika pengecekan keunikan, misalnya, dengan memeriksa dalam database - // Mengembalikan true jika nilai unik, false jika ada tumbukan - return true; // Implementasikan sesuai kebutuhan aplikasi Anda + // Implement uniqueness checking logic, for example, by checking in the database + return uniqueValues.add(value); } - - private String convertMillisToTime(long currentTimeMillis) { - - long totalMilliseconds = currentTimeMillis % 1000; - times.add(totalMilliseconds); - long totalSeconds = (currentTimeMillis / 1000) % 60; - long totalMinutes = (currentTimeMillis / 60000) % 60; - long hours = (currentTimeMillis / 3600000); - StringJoiner stringBuffer = new StringJoiner(""); - - if (hours > 0){ - stringBuffer.add(hours+"h "); - } - if (totalMinutes > 0){ - stringBuffer.add(totalMinutes+" m "); - } - if (totalSeconds > 0){ - stringBuffer.add(totalSeconds+" s "); - } - if (totalMilliseconds > 0){ - stringBuffer.add(totalMilliseconds+" ms"); - } - return stringBuffer.toString(); - } } From d69a3ac6bdad86358b3e5c7b55c8779a7bc6143d Mon Sep 17 00:00:00 2001 From: Bhaskar Ghosh Dastidar Date: Mon, 27 Nov 2023 09:13:04 +0530 Subject: [PATCH 25/27] [BAEL-6787] Increment map value benchmark - JMH (#15268) * [BAEL-6787] jmh class added * [BAEL-6787] jmh pom --------- Co-authored-by: Bhaskar --- .../core-java-collections-maps-7/pom.xml | 10 +++ .../BenchmarkMapMethods.java | 2 +- .../BenchmarkMapMethodsJMH.java | 68 +++++++++++++++++++ .../IncrementMapValueWays.java | 2 +- .../IncrementMapValueUnitTest.java | 4 +- 5 files changed, 83 insertions(+), 3 deletions(-) rename core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/{ => incrementmapkey}/BenchmarkMapMethods.java (99%) create mode 100644 core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/BenchmarkMapMethodsJMH.java rename core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/{ => incrementmapkey}/IncrementMapValueWays.java (98%) rename core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/{ => incrementmapkey}/IncrementMapValueUnitTest.java (97%) diff --git a/core-java-modules/core-java-collections-maps-7/pom.xml b/core-java-modules/core-java-collections-maps-7/pom.xml index a05b1b3528..2d08c0a438 100644 --- a/core-java-modules/core-java-collections-maps-7/pom.xml +++ b/core-java-modules/core-java-collections-maps-7/pom.xml @@ -38,6 +38,16 @@ guava 32.1.2-jre + + org.openjdk.jmh + jmh-core + 1.37 + + + org.openjdk.jmh + jmh-generator-annprocess + 1.37 + diff --git a/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/BenchmarkMapMethods.java b/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/BenchmarkMapMethods.java similarity index 99% rename from core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/BenchmarkMapMethods.java rename to core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/BenchmarkMapMethods.java index eca028efe4..563b2ffdae 100644 --- a/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/BenchmarkMapMethods.java +++ b/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/BenchmarkMapMethods.java @@ -1,4 +1,4 @@ -package com.baeldung.map; +package com.baeldung.map.incrementmapkey; import java.util.HashMap; import java.util.Map; diff --git a/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/BenchmarkMapMethodsJMH.java b/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/BenchmarkMapMethodsJMH.java new file mode 100644 index 0000000000..4ddf3886e9 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/BenchmarkMapMethodsJMH.java @@ -0,0 +1,68 @@ +package com.baeldung.map.incrementmapkey; + +import java.util.concurrent.TimeUnit; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; + +@State(Scope.Benchmark) +public class BenchmarkMapMethodsJMH { + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + @Fork(value = 1, warmups = 1) + public void benchMarkGuavaMap() { + IncrementMapValueWays im = new IncrementMapValueWays(); + im.charFrequencyUsingAtomicMap(getString()); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + @Fork(value = 1, warmups = 1) + public void benchContainsKeyMap() { + IncrementMapValueWays im = new IncrementMapValueWays(); + im.charFrequencyUsingContainsKey(getString()); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + @Fork(value = 1, warmups = 1) + public void benchMarkComputeMethod() { + IncrementMapValueWays im = new IncrementMapValueWays(); + im.charFrequencyUsingCompute(getString()); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + @Fork(value = 1, warmups = 1) + public void benchMarkMergeMethod() { + IncrementMapValueWays im = new IncrementMapValueWays(); + im.charFrequencyUsingMerge(getString()); + } + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } + + private String getString() { + return + "Once upon a time in a quaint village nestled between rolling hills and whispering forests, there lived a solitary storyteller named Elias. Elias was known for spinning tales that transported listeners to magical realms and awakened forgotten dreams.\n" + + "\n" + + "His favorite spot was beneath an ancient oak tree, its sprawling branches offering shade to those who sought refuge from the bustle of daily life. Villagers of all ages would gather around Elias, their faces illuminated by the warmth of his stories.\n" + + "\n" + "One evening, as dusk painted the sky in hues of orange and purple, a curious young girl named Lily approached Elias. Her eyes sparkled with wonder as she asked for a tale unlike any other.\n" + "\n" + + "Elias smiled, sensing her thirst for adventure, and began a story about a forgotten kingdom veiled by mist, guarded by mystical creatures and enchanted by ancient spells. With each word, the air grew thick with anticipation, and the listeners were transported into a world where magic danced on the edges of reality.\n" + + "\n" + "As Elias weaved the story, Lily's imagination took flight. She envisioned herself as a brave warrior, wielding a shimmering sword against dark forces, her heart fueled by courage and kindness.\n" + "\n" + + "The night wore on, but the spell of the tale held everyone captive. The villagers laughed, gasped, and held their breaths, journeying alongside the characters through trials and triumphs.\n" + "\n" + + "As the final words lingered in the air, a sense of enchantment settled upon the listeners. They thanked Elias for the gift of his storytelling, each carrying a piece of the magical kingdom within their hearts.\n" + "\n" + + "Lily, inspired by the story, vowed to cherish the spirit of adventure and kindness in her own life. With a newfound spark in her eyes, she bid Elias goodnight, already dreaming of the countless adventures awaiting her.\n" + "\n" + + "Under the star-studded sky, Elias remained beneath the ancient oak, his heart aglow with the joy of sharing tales that ignited imagination and inspired dreams. And as the night embraced the village, whispers of the enchanted kingdom lingered in the breeze, promising endless possibilities to those who dared to believe."; + } +} diff --git a/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/IncrementMapValueWays.java b/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/IncrementMapValueWays.java similarity index 98% rename from core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/IncrementMapValueWays.java rename to core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/IncrementMapValueWays.java index 70b3c6c54d..e15b3aae8e 100644 --- a/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/IncrementMapValueWays.java +++ b/core-java-modules/core-java-collections-maps-7/src/main/java/com/baeldung/map/incrementmapkey/IncrementMapValueWays.java @@ -1,4 +1,4 @@ -package com.baeldung.map; +package com.baeldung.map.incrementmapkey; import java.util.HashMap; import java.util.Map; diff --git a/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/IncrementMapValueUnitTest.java b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/incrementmapkey/IncrementMapValueUnitTest.java similarity index 97% rename from core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/IncrementMapValueUnitTest.java rename to core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/incrementmapkey/IncrementMapValueUnitTest.java index df4f2b787e..64b9e1155d 100644 --- a/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/IncrementMapValueUnitTest.java +++ b/core-java-modules/core-java-collections-maps-7/src/test/java/com/baeldung/map/incrementmapkey/IncrementMapValueUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.map; +package com.baeldung.map.incrementmapkey; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -9,6 +9,8 @@ import java.util.stream.Stream; import org.junit.Assert; import org.junit.Test; +import com.baeldung.map.incrementmapkey.IncrementMapValueWays; + public class IncrementMapValueUnitTest { @Test From 5d6b5bf965f49e640726e8df7f707002df8c20fc Mon Sep 17 00:00:00 2001 From: MohamedHelmyKassab <137485958+MohamedHelmyKassab@users.noreply.github.com> Date: Mon, 27 Nov 2023 05:52:14 +0200 Subject: [PATCH 26/27] This commit is related to BAEL-7254 (#15299) This commit aims to add a new test class "ByteToCharArrayUnitTest" that validates the conversion process of a Byte array into a Char array. --- .../conversions/ByteToCharArrayUnitTest.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 core-java-modules/core-java-arrays-convert/src/test/java/com/baeldung/array/conversions/ByteToCharArrayUnitTest.java diff --git a/core-java-modules/core-java-arrays-convert/src/test/java/com/baeldung/array/conversions/ByteToCharArrayUnitTest.java b/core-java-modules/core-java-arrays-convert/src/test/java/com/baeldung/array/conversions/ByteToCharArrayUnitTest.java new file mode 100644 index 0000000000..c62520cedc --- /dev/null +++ b/core-java-modules/core-java-arrays-convert/src/test/java/com/baeldung/array/conversions/ByteToCharArrayUnitTest.java @@ -0,0 +1,47 @@ +package com.baeldung.array.conversions; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.StandardCharsets; + +import static org.junit.Assert.assertArrayEquals; + +public class ByteToCharArrayUnitTest { + public static byte[] byteArray = {65, 66, 67, 68}; + public static char[] expected = {'A', 'B', 'C', 'D'}; + + @Test + public void givenByteArray_WhenUsingStandardCharsets_thenConvertToCharArray() { + char[] charArray = new String(byteArray, StandardCharsets.UTF_8).toCharArray(); + assertArrayEquals(expected, charArray); + } + + @Test + public void givenByteArray_WhenUsingSUsingStreams_thenConvertToCharArray() throws IOException { + ByteArrayInputStream inputStream = new ByteArrayInputStream(byteArray); + InputStreamReader reader = new InputStreamReader(inputStream); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + int data; + while ((data = reader.read()) != -1) { + char ch = (char) data; + outputStream.write(ch); + } + char[] charArray = outputStream.toString().toCharArray(); + assertArrayEquals(expected, charArray); + } + + @Test + public void givenByteArray_WhenUsingCharBuffer_thenConvertToCharArray() { + ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray); + CharBuffer charBuffer = StandardCharsets.UTF_8.decode(byteBuffer); + char[] charArray = new char[charBuffer.remaining()]; + charBuffer.get(charArray); + assertArrayEquals(expected, charArray); + } +} From a0b5fb344309cd0a23b05ab119f4b9ffb937811d Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Mon, 27 Nov 2023 11:14:38 +0200 Subject: [PATCH 27/27] [JAVA-27545] Upgraded spring-jinq to spring-boot 3 (#15300) --- spring-jinq/pom.xml | 12 +++++++++--- .../jinq/config/JinqProviderConfiguration.java | 2 +- .../com/baeldung/spring/jinq/entities/Car.java | 16 +++++++++------- .../spring/jinq/entities/Manufacturer.java | 11 +++++------ .../repositories/BaseJinqRepositoryImpl.java | 4 ++-- .../java/com/baeldung/SpringContextTest.java | 1 - 6 files changed, 26 insertions(+), 20 deletions(-) diff --git a/spring-jinq/pom.xml b/spring-jinq/pom.xml index 14ac366e74..c1dee7fa9f 100644 --- a/spring-jinq/pom.xml +++ b/spring-jinq/pom.xml @@ -10,9 +10,9 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../parent-boot-2 + ../parent-boot-3 @@ -35,6 +35,11 @@ org.springframework spring-orm + + org.hibernate.orm + hibernate-core + ${hibernate-core.version} + org.springframework.boot @@ -58,7 +63,8 @@ - 1.8.29 + 2.0.1 + 6.4.0.Final \ No newline at end of file diff --git a/spring-jinq/src/main/java/com/baeldung/spring/jinq/config/JinqProviderConfiguration.java b/spring-jinq/src/main/java/com/baeldung/spring/jinq/config/JinqProviderConfiguration.java index 6d921045b7..01e16cf0f7 100644 --- a/spring-jinq/src/main/java/com/baeldung/spring/jinq/config/JinqProviderConfiguration.java +++ b/spring-jinq/src/main/java/com/baeldung/spring/jinq/config/JinqProviderConfiguration.java @@ -1,6 +1,6 @@ package com.baeldung.spring.jinq.config; -import javax.persistence.EntityManagerFactory; +import jakarta.persistence.EntityManagerFactory; import org.jinq.jpa.JinqJPAStreamProvider; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-jinq/src/main/java/com/baeldung/spring/jinq/entities/Car.java b/spring-jinq/src/main/java/com/baeldung/spring/jinq/entities/Car.java index 263e6c7622..a0b9620629 100644 --- a/spring-jinq/src/main/java/com/baeldung/spring/jinq/entities/Car.java +++ b/spring-jinq/src/main/java/com/baeldung/spring/jinq/entities/Car.java @@ -1,19 +1,23 @@ package com.baeldung.spring.jinq.entities; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; + + @Entity(name = "CAR") public class Car { + @Id private String model; private String description; private int year; private String engine; + @ManyToOne + @JoinColumn(name = "name") private Manufacturer manufacturer; - @Id public String getModel() { return model; } @@ -46,8 +50,6 @@ public class Car { this.engine = engine; } - @OneToOne - @JoinColumn(name = "name") public Manufacturer getManufacturer() { return manufacturer; } diff --git a/spring-jinq/src/main/java/com/baeldung/spring/jinq/entities/Manufacturer.java b/spring-jinq/src/main/java/com/baeldung/spring/jinq/entities/Manufacturer.java index f6e5fd23de..0021e45658 100644 --- a/spring-jinq/src/main/java/com/baeldung/spring/jinq/entities/Manufacturer.java +++ b/spring-jinq/src/main/java/com/baeldung/spring/jinq/entities/Manufacturer.java @@ -2,18 +2,19 @@ package com.baeldung.spring.jinq.entities; import java.util.List; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.OneToMany; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; @Entity(name = "MANUFACTURER") public class Manufacturer { + @Id private String name; private String city; + @OneToMany(mappedBy = "model") private List cars; - @Id public String getName() { return name; } @@ -30,7 +31,6 @@ public class Manufacturer { this.city = city; } - @OneToMany(mappedBy = "model") public List getCars() { return cars; } @@ -38,5 +38,4 @@ public class Manufacturer { public void setCars(List cars) { this.cars = cars; } - } diff --git a/spring-jinq/src/main/java/com/baeldung/spring/jinq/repositories/BaseJinqRepositoryImpl.java b/spring-jinq/src/main/java/com/baeldung/spring/jinq/repositories/BaseJinqRepositoryImpl.java index 42b81ecc59..e85231f537 100644 --- a/spring-jinq/src/main/java/com/baeldung/spring/jinq/repositories/BaseJinqRepositoryImpl.java +++ b/spring-jinq/src/main/java/com/baeldung/spring/jinq/repositories/BaseJinqRepositoryImpl.java @@ -1,7 +1,7 @@ package com.baeldung.spring.jinq.repositories; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import org.jinq.jpa.JPAJinqStream; import org.jinq.jpa.JinqJPAStreamProvider; diff --git a/spring-jinq/src/test/java/com/baeldung/SpringContextTest.java b/spring-jinq/src/test/java/com/baeldung/SpringContextTest.java index 1a486d1003..7c65a831c4 100644 --- a/spring-jinq/src/test/java/com/baeldung/SpringContextTest.java +++ b/spring-jinq/src/test/java/com/baeldung/SpringContextTest.java @@ -4,7 +4,6 @@ import com.baeldung.spring.jinq.JinqApplication; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import com.baeldung.spring.jinq.JinqApplication; @SpringBootTest(classes = JinqApplication.class) public class SpringContextTest {