Skip to content

Commit 0522022

Browse files
authored
Bael 7892 (#16491)
* BAEL-7892: Test for comparing numbers * BAEL-7892: Added a test for floating point numbers * BAEL-7892: Fix typos
1 parent bb22793 commit 0522022

1 file changed

Lines changed: 158 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
package com.baeldung.comparenumbers;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
6+
7+
import java.math.BigDecimal;
8+
import java.math.BigInteger;
9+
import java.util.stream.Stream;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.params.ParameterizedTest;
12+
import org.junit.jupiter.params.provider.Arguments;
13+
import org.junit.jupiter.params.provider.MethodSource;
14+
import org.junit.jupiter.params.provider.ValueSource;
15+
16+
class ComparingNumbersOfDifferentClassesUnitTest {
17+
18+
@ValueSource(strings = {"1", "2", "3", "4", "5"})
19+
@ParameterizedTest
20+
void givenSameNumbersButDifferentPrimitives_WhenCheckEquality_ThenTheyEqual(String number) {
21+
int integerNumber = Integer.parseInt(number);
22+
long longNumber = Long.parseLong(number);
23+
assertEquals(longNumber, integerNumber);
24+
}
25+
26+
@ValueSource(strings = {"1", "2", "3", "4", "5"})
27+
@ParameterizedTest
28+
void givenSameNumbersButDifferentPrimitivesWithIntegerOverflow_WhenCheckEquality_ThenTheyNotEqual(String number) {
29+
int integerNumber = Integer.MAX_VALUE + Integer.parseInt(number);
30+
long longNumber = Integer.MAX_VALUE + Long.parseLong(number);
31+
assertNotEquals(longNumber, integerNumber);
32+
}
33+
34+
@ValueSource(strings = {"1", "2", "3", "4", "5"})
35+
@ParameterizedTest
36+
void givenSameNumbersButDifferentPrimitivesTypes_WhenCheckEquality_ThenTheyEqual(String number) {
37+
int integerNumber = Integer.parseInt(number);
38+
double doubleNumber = Double.parseDouble(number);
39+
assertEquals(doubleNumber, integerNumber);
40+
}
41+
42+
@ValueSource(strings = {"1", "2", "3", "4", "5"})
43+
@ParameterizedTest
44+
void givenDifferentNumbersButDifferentPrimitivesTypes_WhenCheckEquality_ThenTheyNotEqual(String number) {
45+
int integerNumber = Integer.parseInt(number);
46+
double doubleNumber = Double.parseDouble(number) + 0.0000000000001;
47+
assertNotEquals(doubleNumber, integerNumber);
48+
}
49+
50+
@Test
51+
void givenSameNumbersButDifferentPrimitivesWithLongOverflow_WhenCheckEquality_ThenTheyEqual() {
52+
long longValue = BigInteger.valueOf(Long.MAX_VALUE)
53+
.add(BigInteger.ONE)
54+
.multiply(BigInteger.TWO).longValue();
55+
int integerValue = BigInteger.valueOf(Long.MAX_VALUE)
56+
.add(BigInteger.ONE).intValue();
57+
assertThat(longValue).isEqualTo(integerValue);
58+
}
59+
@Test
60+
void givenSameNumbersButDifferentPrimitivesWithDoubleOverflow_WhenCheckEquality_ThenTheyEqual() {
61+
double firstDoubleValue = BigDecimal.valueOf(Double.MAX_VALUE).add(BigDecimal.valueOf(42)).doubleValue();
62+
double secondDoubleValue = BigDecimal.valueOf(Double.MAX_VALUE).doubleValue();
63+
assertEquals(firstDoubleValue, secondDoubleValue);
64+
}
65+
66+
@Test
67+
void givenSameNumbersWithDoubleRoundingErrors_WhenCheckEquality_ThenTheyNotEqual() {
68+
double doubleValue = 0.3 / 0.1;
69+
int integerValue = 30 / 10;
70+
assertNotEquals(doubleValue, integerValue);
71+
}
72+
73+
@ValueSource(strings = {"1", "2", "3", "4", "5"})
74+
@ParameterizedTest
75+
void givenSameNumbersButDifferentWrappers_WhenCheckEquality_ThenTheyNotEqual(String number) {
76+
Integer integerNumber = Integer.valueOf(number);
77+
Long longNumber = Long.valueOf(number);
78+
assertNotEquals(longNumber, integerNumber);
79+
}
80+
81+
@ValueSource(strings = {"1", "2", "3", "4", "5"})
82+
@ParameterizedTest
83+
void givenSameNumbersButWrapperTypes_WhenCheckEquality_ThenTheyNotEqual(String number) {
84+
Float floatNumber = Float.valueOf(number);
85+
Integer integerNumber = Integer.valueOf(number);
86+
assertNotEquals(floatNumber, integerNumber);
87+
}
88+
89+
@MethodSource("numbersWithDifferentScaleProvider")
90+
@ParameterizedTest
91+
void givenBigDecimalsWithDifferentScale_WhenCheckEquality_ThenTheyNotEqual(String firstNumber,
92+
String secondNumber) {
93+
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
94+
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
95+
96+
assertNotEquals(firstBigDecimal, secondBigDecimal);
97+
}
98+
99+
@MethodSource("numbersWithDifferentScaleProvider")
100+
@ParameterizedTest
101+
void givenBigDecimalsWithDifferentScale_WhenCompare_ThenTheyEqual(String firstNumber,
102+
String secondNumber) {
103+
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
104+
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
105+
106+
assertEquals(0, firstBigDecimal.compareTo(secondBigDecimal));
107+
}
108+
109+
@MethodSource("numbersWithDifferentScaleProvider")
110+
@ParameterizedTest
111+
void givenBigDecimalsWithDifferentScale_WhenCompareWithAssertJ_ThenTheyEqual(String firstNumber,
112+
String secondNumber) {
113+
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
114+
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
115+
116+
assertThat(firstBigDecimal).isEqualByComparingTo(secondBigDecimal);
117+
}
118+
119+
120+
@MethodSource("numbersWithSameScaleProvider")
121+
@ParameterizedTest
122+
void givenBigDecimalsWithSameScale_WhenCheckEquality_ThenTheyEqual(String firstNumber,
123+
String secondNumber) {
124+
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
125+
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
126+
127+
assertEquals(firstBigDecimal, secondBigDecimal);
128+
}
129+
130+
@MethodSource("numbersWithSameScaleProvider")
131+
@ParameterizedTest
132+
void givenBigDecimalsWithSameScale_WhenCompare_ThenTheyEqual(String firstNumber,
133+
String secondNumber) {
134+
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
135+
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
136+
137+
assertEquals(0, firstBigDecimal.compareTo(secondBigDecimal));
138+
}
139+
140+
141+
static Stream<Arguments> numbersWithDifferentScaleProvider() {
142+
return Stream.of(
143+
Arguments.of("0", "0.0"), Arguments.of("1", "1.0"),
144+
Arguments.of("2", "2.0"), Arguments.of("3", "3.0"),
145+
Arguments.of("4", "4.0"), Arguments.of("5", "5.0"),
146+
Arguments.of("6", "6.0"), Arguments.of("7", "7.0")
147+
);
148+
}
149+
150+
static Stream<Arguments> numbersWithSameScaleProvider() {
151+
return Stream.of(
152+
Arguments.of("0", "0"), Arguments.of("1", "1"),
153+
Arguments.of("2", "2"), Arguments.of("3", "3"),
154+
Arguments.of("4", "4"), Arguments.of("5", "5"),
155+
Arguments.of("6", "6"), Arguments.of("7", "7")
156+
);
157+
}
158+
}

0 commit comments

Comments
 (0)