diff --git a/java-numbers-3/pom.xml b/java-numbers-3/pom.xml
index bf5fe9b0e7..ce0f61cd30 100644
--- a/java-numbers-3/pom.xml
+++ b/java-numbers-3/pom.xml
@@ -1,38 +1,58 @@
- 4.0.0
- java-numbers-3
- java-numbers-3
- jar
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+ java-numbers-3
+ java-numbers-3
+ jar
-
- com.baeldung
- parent-java
- 0.0.1-SNAPSHOT
- ../parent-java
-
-
-
-
- it.unimi.dsi
- dsiutils
- ${dsiutils.version}
-
-
-
-
- java-numbers-3
-
-
- src/main/resources
- true
-
-
-
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
-
- 2.6.0
-
+
+
+ it.unimi.dsi
+ dsiutils
+ ${dsiutils.version}
+
+
+ io.vavr
+ vavr
+ ${vavr.version}
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons.version}
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+ java-numbers-3
+
+
+ src/main/resources
+ true
+
+
+
+
+
+ 2.6.0
+ 0.10.2
+ 3.9
+ 3.6.1
+
diff --git a/java-numbers-3/src/test/java/com/baeldung/parsedouble/StringToDoubleParserUnitTest.java b/java-numbers-3/src/test/java/com/baeldung/parsedouble/StringToDoubleParserUnitTest.java
new file mode 100644
index 0000000000..b3dec3d14f
--- /dev/null
+++ b/java-numbers-3/src/test/java/com/baeldung/parsedouble/StringToDoubleParserUnitTest.java
@@ -0,0 +1,149 @@
+package com.baeldung.parsedouble;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Optional;
+
+import org.apache.commons.lang3.math.NumberUtils;
+import org.junit.Test;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.primitives.Doubles;
+
+import io.vavr.control.Try;
+
+public class StringToDoubleParserUnitTest {
+
+ @Test
+ public void givenNullValue_whenParseStringToDouble_thenDefaultNaNValueIsReturned() {
+ assertThat(parseStringToDouble(null)).isNaN();
+ }
+
+ @Test
+ public void givenEmptyStringValue_whenParseStringToDouble_thenDefaultNaNValueIsReturned() {
+ assertThat(parseStringToDouble("")).isNaN();
+ }
+
+ @Test
+ public void givenStringValue_whenParseStringToDouble_thenDoubleValueIsReturned() {
+ assertThat(parseStringToDouble("1")).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenStringValue_whenParseStringToDoubleWithDefault_thenDoubleValueIsReturned() {
+ assertThat(parseStringToDouble("1", 2.0d)).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenEmptyStringValue_whenParseStringToDoubleWithDefault_thenDefaultValueIsReturned() {
+ assertThat(parseStringToDouble("", 1.0d)).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenNullValue_whenParseStringToDoubleWithDefault_thenDefaultValueIsReturned() {
+ assertThat(parseStringToDouble(null, 1.0d)).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenStringValue_whenParseStringToOptionalDouble_thenOptionalValueIsReturned() {
+ assertThat(parseStringToOptionalDouble("1")).isEqualTo(Optional.of(1.0d));
+ }
+
+ @Test
+ public void givenNullValue_whenParseStringToOptionalDouble_thenOptionalValueIsEmpty() {
+ assertThat(parseStringToOptionalDouble(null)).isEqualTo(Optional.empty());
+ }
+
+ @Test
+ public void givenEmptyStringValue_whenParseStringToOptionalDouble_thenOptionalValueIsEmpty() {
+ assertThat(parseStringToOptionalDouble("")).isEqualTo(Optional.empty());
+ }
+
+ @Test
+ public void givenEmptyStringValue_whenParseStringToOptionalDouble_thenDefaulOptionalValueIsReturned() {
+ assertThat(parseStringToOptionalDouble("").orElse(1.0d)).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenNullValue_whenParseStringToOptionalDouble_thenDefaulOptionalValueIsReturned() {
+ assertThat(parseStringToOptionalDouble(null).orElse(1.0d)).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenStringValue_whenTryStringToDouble_thenDoubleValueIsReturned() {
+ assertThat(tryStringToDouble("1", 2.0d)).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenNullValue_whenTryStringToDoubleWithDefault_thenDoubleValueIsReturned() {
+ assertThat(tryStringToDouble(null, 2.0d)).isEqualTo(2.0d);
+ }
+
+ @Test
+ public void givenEmptyStringValue_whenTryStringToDoubleWithDefault_thenDoubleValueIsReturned() {
+ assertThat(tryStringToDouble("", 2.0d)).isEqualTo(2.0d);
+ }
+
+ @Test
+ public void givenTwoStringValues_whenTryParseFirstNonNull_thenDoubleValueIsReturned() {
+ assertThat(Doubles.tryParse(MoreObjects.firstNonNull("1.0", "2.0"))).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenNullStringValue_whenTryParseFirstNonNull_thenSecondDoubleValueIsReturned() {
+ assertThat(Doubles.tryParse(MoreObjects.firstNonNull(null, "2.0"))).isEqualTo(2.0d);
+ }
+
+ @Test
+ public void givenEmptyStringValue_whenTryParseFirstNonNull_thenNullIsReturned() {
+ assertThat(Doubles.tryParse(MoreObjects.firstNonNull("", "2.0"))).isEqualTo(null);
+ }
+
+ @Test
+ public void givenStringValue_whenToDouble_thenDoubleValueIsReturned() {
+ assertThat(NumberUtils.toDouble("1.0")).isEqualTo(1.0d);
+ }
+
+ @Test
+ public void givenNullValue_whenToDouble_thenLibraryDefaultDoubleValueIsReturned() {
+ String nullString = null;
+ assertThat(NumberUtils.toDouble(nullString)).isEqualTo(0.0d);
+ }
+
+ @Test
+ public void givenEmptyStringValue_whenToDouble_thenLibraryDefaultDoubleValueIsReturned() {
+ assertThat(NumberUtils.toDouble("")).isEqualTo(0.0d);
+ }
+
+ @Test
+ public void givenEmptyStringValue_whenToDoubleWithDefault_thenDoubleValueIsReturned() {
+ assertThat(NumberUtils.toDouble("", 2.0d)).isEqualTo(2.0d);
+ }
+
+ @Test
+ public void givenNullValue_whenToDoubleWithDefault_thenDoubleValueIsReturned() {
+ String nullString = null;
+ assertThat(NumberUtils.toDouble(nullString, 2.0d)).isEqualTo(2.0d);
+ }
+
+ @Test
+ public void givenStringValue_whenToDoubleWithDefault_thenDoubleValueIsReturned() {
+ assertThat(NumberUtils.toDouble("1.0", 2.0d)).isEqualTo(1.0d);
+ }
+
+ private static Optional parseStringToOptionalDouble(String value) {
+ return value == null || value.isEmpty() ? Optional.empty() : Optional.of(Double.valueOf(value));
+ }
+
+ private static double parseStringToDouble(String value) {
+ return value == null || value.isEmpty() ? Double.NaN : Double.parseDouble(value);
+ }
+
+ private static double parseStringToDouble(String value, double defaultValue) {
+ return value == null || value.isEmpty() ? defaultValue : Double.parseDouble(value);
+ }
+
+ private static double tryStringToDouble(String value, double defaultValue) {
+ return Try.of(() -> Double.parseDouble(value)).getOrElse(defaultValue);
+ }
+}