Bael 7892 (#16491)
* BAEL-7892: Test for comparing numbers * BAEL-7892: Added a test for floating point numbers * BAEL-7892: Fix typos
This commit is contained in:
parent
bb22793bd1
commit
0522022a08
@ -0,0 +1,158 @@
|
|||||||
|
package com.baeldung.comparenumbers;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.Arguments;
|
||||||
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
|
import org.junit.jupiter.params.provider.ValueSource;
|
||||||
|
|
||||||
|
class ComparingNumbersOfDifferentClassesUnitTest {
|
||||||
|
|
||||||
|
@ValueSource(strings = {"1", "2", "3", "4", "5"})
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenSameNumbersButDifferentPrimitives_WhenCheckEquality_ThenTheyEqual(String number) {
|
||||||
|
int integerNumber = Integer.parseInt(number);
|
||||||
|
long longNumber = Long.parseLong(number);
|
||||||
|
assertEquals(longNumber, integerNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ValueSource(strings = {"1", "2", "3", "4", "5"})
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenSameNumbersButDifferentPrimitivesWithIntegerOverflow_WhenCheckEquality_ThenTheyNotEqual(String number) {
|
||||||
|
int integerNumber = Integer.MAX_VALUE + Integer.parseInt(number);
|
||||||
|
long longNumber = Integer.MAX_VALUE + Long.parseLong(number);
|
||||||
|
assertNotEquals(longNumber, integerNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ValueSource(strings = {"1", "2", "3", "4", "5"})
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenSameNumbersButDifferentPrimitivesTypes_WhenCheckEquality_ThenTheyEqual(String number) {
|
||||||
|
int integerNumber = Integer.parseInt(number);
|
||||||
|
double doubleNumber = Double.parseDouble(number);
|
||||||
|
assertEquals(doubleNumber, integerNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ValueSource(strings = {"1", "2", "3", "4", "5"})
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenDifferentNumbersButDifferentPrimitivesTypes_WhenCheckEquality_ThenTheyNotEqual(String number) {
|
||||||
|
int integerNumber = Integer.parseInt(number);
|
||||||
|
double doubleNumber = Double.parseDouble(number) + 0.0000000000001;
|
||||||
|
assertNotEquals(doubleNumber, integerNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenSameNumbersButDifferentPrimitivesWithLongOverflow_WhenCheckEquality_ThenTheyEqual() {
|
||||||
|
long longValue = BigInteger.valueOf(Long.MAX_VALUE)
|
||||||
|
.add(BigInteger.ONE)
|
||||||
|
.multiply(BigInteger.TWO).longValue();
|
||||||
|
int integerValue = BigInteger.valueOf(Long.MAX_VALUE)
|
||||||
|
.add(BigInteger.ONE).intValue();
|
||||||
|
assertThat(longValue).isEqualTo(integerValue);
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
void givenSameNumbersButDifferentPrimitivesWithDoubleOverflow_WhenCheckEquality_ThenTheyEqual() {
|
||||||
|
double firstDoubleValue = BigDecimal.valueOf(Double.MAX_VALUE).add(BigDecimal.valueOf(42)).doubleValue();
|
||||||
|
double secondDoubleValue = BigDecimal.valueOf(Double.MAX_VALUE).doubleValue();
|
||||||
|
assertEquals(firstDoubleValue, secondDoubleValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenSameNumbersWithDoubleRoundingErrors_WhenCheckEquality_ThenTheyNotEqual() {
|
||||||
|
double doubleValue = 0.3 / 0.1;
|
||||||
|
int integerValue = 30 / 10;
|
||||||
|
assertNotEquals(doubleValue, integerValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ValueSource(strings = {"1", "2", "3", "4", "5"})
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenSameNumbersButDifferentWrappers_WhenCheckEquality_ThenTheyNotEqual(String number) {
|
||||||
|
Integer integerNumber = Integer.valueOf(number);
|
||||||
|
Long longNumber = Long.valueOf(number);
|
||||||
|
assertNotEquals(longNumber, integerNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ValueSource(strings = {"1", "2", "3", "4", "5"})
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenSameNumbersButWrapperTypes_WhenCheckEquality_ThenTheyNotEqual(String number) {
|
||||||
|
Float floatNumber = Float.valueOf(number);
|
||||||
|
Integer integerNumber = Integer.valueOf(number);
|
||||||
|
assertNotEquals(floatNumber, integerNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
@MethodSource("numbersWithDifferentScaleProvider")
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenBigDecimalsWithDifferentScale_WhenCheckEquality_ThenTheyNotEqual(String firstNumber,
|
||||||
|
String secondNumber) {
|
||||||
|
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
|
||||||
|
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
|
||||||
|
|
||||||
|
assertNotEquals(firstBigDecimal, secondBigDecimal);
|
||||||
|
}
|
||||||
|
|
||||||
|
@MethodSource("numbersWithDifferentScaleProvider")
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenBigDecimalsWithDifferentScale_WhenCompare_ThenTheyEqual(String firstNumber,
|
||||||
|
String secondNumber) {
|
||||||
|
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
|
||||||
|
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
|
||||||
|
|
||||||
|
assertEquals(0, firstBigDecimal.compareTo(secondBigDecimal));
|
||||||
|
}
|
||||||
|
|
||||||
|
@MethodSource("numbersWithDifferentScaleProvider")
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenBigDecimalsWithDifferentScale_WhenCompareWithAssertJ_ThenTheyEqual(String firstNumber,
|
||||||
|
String secondNumber) {
|
||||||
|
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
|
||||||
|
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
|
||||||
|
|
||||||
|
assertThat(firstBigDecimal).isEqualByComparingTo(secondBigDecimal);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@MethodSource("numbersWithSameScaleProvider")
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenBigDecimalsWithSameScale_WhenCheckEquality_ThenTheyEqual(String firstNumber,
|
||||||
|
String secondNumber) {
|
||||||
|
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
|
||||||
|
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
|
||||||
|
|
||||||
|
assertEquals(firstBigDecimal, secondBigDecimal);
|
||||||
|
}
|
||||||
|
|
||||||
|
@MethodSource("numbersWithSameScaleProvider")
|
||||||
|
@ParameterizedTest
|
||||||
|
void givenBigDecimalsWithSameScale_WhenCompare_ThenTheyEqual(String firstNumber,
|
||||||
|
String secondNumber) {
|
||||||
|
BigDecimal firstBigDecimal = new BigDecimal(firstNumber);
|
||||||
|
BigDecimal secondBigDecimal = new BigDecimal(secondNumber);
|
||||||
|
|
||||||
|
assertEquals(0, firstBigDecimal.compareTo(secondBigDecimal));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static Stream<Arguments> numbersWithDifferentScaleProvider() {
|
||||||
|
return Stream.of(
|
||||||
|
Arguments.of("0", "0.0"), Arguments.of("1", "1.0"),
|
||||||
|
Arguments.of("2", "2.0"), Arguments.of("3", "3.0"),
|
||||||
|
Arguments.of("4", "4.0"), Arguments.of("5", "5.0"),
|
||||||
|
Arguments.of("6", "6.0"), Arguments.of("7", "7.0")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Stream<Arguments> numbersWithSameScaleProvider() {
|
||||||
|
return Stream.of(
|
||||||
|
Arguments.of("0", "0"), Arguments.of("1", "1"),
|
||||||
|
Arguments.of("2", "2"), Arguments.of("3", "3"),
|
||||||
|
Arguments.of("4", "4"), Arguments.of("5", "5"),
|
||||||
|
Arguments.of("6", "6"), Arguments.of("7", "7")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user