Skip to content

Commit d197e55

Browse files
committed
Added more test
1 parent bd9a9b1 commit d197e55

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

core-kotlin-modules/core-kotlin-strings-5/src/test/kotlin/com/baeldung/extractnumber/NumberExtractUnitTest.kt

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,37 @@ import org.junit.jupiter.api.Assertions
44
import org.junit.jupiter.api.Test
55
import org.junit.jupiter.params.ParameterizedTest
66
import org.junit.jupiter.params.provider.CsvSource
7+
import java.math.BigInteger
78

8-
fun extractUsingRegex(str: String): Long? {
9-
return Regex("\\d+").find(str)?.value?.toLongOrNull()
9+
fun extractUsingRegex(str: String): BigInteger? {
10+
return Regex("\\d+").find(str)?.value?.toBigIntegerOrNull()
1011
}
1112

12-
fun extractMultipleUsingRegex(str: String): List<Long> {
13-
return Regex("\\d+").findAll(str).map { it.value.toLong() }.toList()
13+
fun extractMultipleUsingRegex(str: String): List<BigInteger> {
14+
return Regex("\\d+").findAll(str).map { it.value.toBigInteger() }.toList()
1415
}
1516

16-
fun extractNumbersUsingSplitAndRegex(str: String): List<Long> {
17+
fun extractNumbersUsingSplitAndRegex(str: String): List<BigInteger> {
1718
return str.split(Regex("\\D+"))
1819
.filter { it.isNotBlank() }
19-
.map { it.toLong() }
20+
.map { it.toBigInteger() }
2021
}
2122

22-
fun extractNumbersUsingLoop(str: String): List<Long> {
23-
val numbers = mutableListOf<Long>()
23+
fun extractNumbersUsingLoop(str: String): List<BigInteger> {
24+
val numbers = mutableListOf<BigInteger>()
2425
val currentNumber = StringBuilder()
2526

2627
for (char in str) {
2728
if (char.isDigit()) {
2829
currentNumber.append(char)
2930
} else if (currentNumber.isNotEmpty()) {
30-
numbers.add(currentNumber.toString().toLong())
31+
numbers.add(currentNumber.toString().toBigInteger())
3132
currentNumber.clear()
3233
}
3334
}
3435

3536
if (currentNumber.isNotEmpty()) {
36-
numbers.add(currentNumber.toString().toLong())
37+
numbers.add(currentNumber.toString().toBigInteger())
3738
}
3839

3940
return numbers
@@ -49,11 +50,12 @@ class NumberExtractUnitTest {
4950
"string 123-234, 123",
5051
"no numbers,",
5152
"3 4 50 numbers6, 3",
52-
"123456789large numbers0, 123456789"
53+
"123456789large numbers0, 123456789",
54+
"91234567891011121314151617181920number,91234567891011121314151617181920"
5355
)
5456
fun `extract first occurrence of number from string using regex`(str: String, expected: String?) {
5557
val number = extractUsingRegex(str)
56-
Assertions.assertEquals(number, expected?.toLongOrNull())
58+
Assertions.assertEquals(number, expected?.toBigIntegerOrNull())
5759
}
5860

5961
@ParameterizedTest
@@ -63,11 +65,12 @@ class NumberExtractUnitTest {
6365
"string 123-234, 123:234",
6466
"no numbers,",
6567
"3 4 50 numbers6, 3:4:50:6",
66-
"123456789large numbers0, 123456789:0"
68+
"123456789large numbers0, 123456789:0",
69+
"91234567891011121314151617181920number,91234567891011121314151617181920"
6770
)
6871
fun `extract all occurrences of numbers from string using regex`(str: String, expected: String?) {
6972
val numbers = extractMultipleUsingRegex(str)
70-
val expectedList = expected?.split(":")?.map { it.toLong() } ?: emptyList()
73+
val expectedList = expected?.split(":")?.map { it.toBigInteger() } ?: emptyList()
7174
Assertions.assertEquals(expectedList, numbers)
7275
}
7376

@@ -78,11 +81,12 @@ class NumberExtractUnitTest {
7881
"string 123-234, 123:234",
7982
"no numbers,",
8083
"3 4 50 numbers6, 3:4:50:6",
81-
"123456789large numbers0, 123456789:0"
84+
"123456789large numbers0, 123456789:0",
85+
"91234567891011121314151617181920number,91234567891011121314151617181920"
8286
)
8387
fun `extract all occurrences of numbers from string using split and regex`(str: String, expected: String?) {
8488
val numbers = extractNumbersUsingSplitAndRegex(str)
85-
val expectedList = expected?.split(":")?.map { it.toLong() } ?: emptyList()
89+
val expectedList = expected?.split(":")?.map { it.toBigInteger() } ?: emptyList()
8690
Assertions.assertEquals(expectedList, numbers)
8791
}
8892

@@ -93,30 +97,31 @@ class NumberExtractUnitTest {
9397
"string 123-234, 123:234",
9498
"no numbers,",
9599
"3 4 50 numbers6, 3:4:50:6",
96-
"123456789large numbers0, 123456789:0"
100+
"123456789large numbers0, 123456789:0",
101+
"91234567891011121314151617181920number,91234567891011121314151617181920"
97102
)
98103
fun `extract all occurrences of numbers from string using loop`(str: String, expected: String?) {
99104
val numbers = extractNumbersUsingLoop(str)
100-
val expectedList = expected?.split(":")?.map { it.toLong() } ?: emptyList()
105+
val expectedList = expected?.split(":")?.map { it.toBigInteger() } ?: emptyList()
101106
Assertions.assertEquals(expectedList, numbers)
102107
}
103108

104109
@Test
105110
fun `check empty string scenario for loop`() {
106111
val numbers = extractNumbersUsingLoop("")
107-
Assertions.assertIterableEquals(numbers, listOf<Long>())
112+
Assertions.assertIterableEquals(numbers, listOf<BigInteger>())
108113
}
109114

110115
@Test
111116
fun `check empty string scenario for split`() {
112117
val numbers = extractNumbersUsingSplitAndRegex("")
113-
Assertions.assertIterableEquals(numbers, listOf<Long>())
118+
Assertions.assertIterableEquals(numbers, listOf<BigInteger>())
114119
}
115120

116121
@Test
117122
fun `check empty string scenario for regex`() {
118123
val numbers = extractMultipleUsingRegex("")
119-
Assertions.assertIterableEquals(numbers, listOf<Long>())
124+
Assertions.assertIterableEquals(numbers, listOf<BigInteger>())
120125
}
121126

122127
}

0 commit comments

Comments
 (0)