diff --git a/core-java-modules/core-java-numbers-7/pom.xml b/core-java-modules/core-java-numbers-7/pom.xml new file mode 100644 index 0000000000..dec3084108 --- /dev/null +++ b/core-java-modules/core-java-numbers-7/pom.xml @@ -0,0 +1,37 @@ + + 4.0.0 + core-java-numbers-7 + core-java-numbers-7 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + com.google.guava + guava + ${guava.version} + + + + core-java-numbers-7 + + + src/main/resources + true + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/doubleisint/CheckDoubleIsAnIntegerUnitTest.java b/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/doubleisint/CheckDoubleIsAnIntegerUnitTest.java new file mode 100644 index 0000000000..90d2c52595 --- /dev/null +++ b/core-java-modules/core-java-numbers-7/src/test/java/com/baeldung/doubleisint/CheckDoubleIsAnIntegerUnitTest.java @@ -0,0 +1,83 @@ +package com.baeldung.doubleisint; + +import com.google.common.math.DoubleMath; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class CheckDoubleIsAnIntegerUnitTest { + + boolean notNaNOrInfinity(double d) { + return !(Double.isNaN(d) || Double.isInfinite(d)); + } + + @Test + void whenConvertingToInt_thenGetExpectedResult() { + double d1 = 42.0D; + boolean d1IsInteger = notNaNOrInfinity(d1) && (int) d1 == d1; + assertTrue(d1IsInteger); + + double d2 = 42.42D; + boolean d2IsInteger = notNaNOrInfinity(d2) && (int) d2 == d2; + assertFalse(d2IsInteger); + + double d3 = 2.0D * Integer.MAX_VALUE; + boolean d3IsInteger = notNaNOrInfinity(d3) && (int) d3 == d3; + assertTrue(!d3IsInteger); // <-- fails if exceeding Integer's range + } + + @Test + void whenUsingModuloOperator_thenGetExpectedResult() { + double d1 = 42.0D; + boolean d1IsInteger = notNaNOrInfinity(d1) && (d1 % 1) == 0; + assertTrue(d1IsInteger); + + double d2 = 42.42D; + boolean d2IsInteger = notNaNOrInfinity(d2) && (d2 % 1) == 0; + assertFalse(d2IsInteger); + + double d3 = 2.0D * Integer.MAX_VALUE; + boolean d3IsInteger = notNaNOrInfinity(d3) && (d3 % 1) == 0; + assertTrue(d3IsInteger); + + } + + + @Test + void whenCheckingFloorOrCeilingValue_thenGetExpectedResult() { + double d1 = 42.0D; + boolean d1IsInteger = notNaNOrInfinity(d1) && Math.floor(d1) == d1; + assertTrue(d1IsInteger); + + double d2 = 42.42D; + boolean d2IsInteger = notNaNOrInfinity(d2) && Math.floor(d2) == d2; + assertFalse(d2IsInteger); + + double d3 = 2.0D * Integer.MAX_VALUE; + boolean d3IsInteger = notNaNOrInfinity(d3) && Math.floor(d3) == d3; + assertTrue(d3IsInteger); + + } + + @Test + void whenUsingGuava_thenGetExpectedResult() { + double d1 = 42.0D; + boolean d1IsInteger = DoubleMath.isMathematicalInteger(d1); + assertTrue(d1IsInteger); + + double d2 = 42.42D; + boolean d2IsInteger = DoubleMath.isMathematicalInteger(d2); + assertFalse(d2IsInteger); + + double d3 = 2.0D * Integer.MAX_VALUE; + boolean d3IsInteger = DoubleMath.isMathematicalInteger(d3); + assertTrue(d3IsInteger); + + boolean isInfinityInt = DoubleMath.isMathematicalInteger(Double.POSITIVE_INFINITY); + assertFalse(isInfinityInt); + + boolean isNanInt = DoubleMath.isMathematicalInteger(Double.NaN); + assertFalse(isNanInt); + } +} \ No newline at end of file diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index b3ef8167a5..c0c44eba9a 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -166,6 +166,7 @@ core-java-numbers-4 core-java-numbers-5 core-java-numbers-6 + core-java-numbers-7 core-java-optional core-java-perf core-java-properties @@ -225,5 +226,4 @@ -