Skip to content

Commit 7201dc7

Browse files
marysiuniqMaria Paszkiewicz SCCvil02
authored
Added tests for NumberOfDigits (#5107)
Co-authored-by: Maria Paszkiewicz SCC <[email protected]> Co-authored-by: Piotr Idzik <[email protected]>
1 parent f39bb8f commit 7201dc7

File tree

2 files changed

+46
-25
lines changed

2 files changed

+46
-25
lines changed

src/main/java/com/thealgorithms/maths/NumberOfDigits.java

+6-25
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,16 @@
33
/**
44
* Find the number of digits in a number.
55
*/
6-
public class NumberOfDigits {
7-
8-
public static void main(String[] args) {
9-
int[] numbers = {
10-
0,
11-
12,
12-
123,
13-
1234,
14-
-12345,
15-
123456,
16-
1234567,
17-
12345678,
18-
123456789,
19-
};
20-
for (int i = 0; i < numbers.length; ++i) {
21-
assert numberOfDigits(numbers[i]) == i + 1;
22-
assert numberOfDigitsFast(numbers[i]) == i + 1;
23-
assert numberOfDigitsFaster(numbers[i]) == i + 1;
24-
assert numberOfDigitsRecursion(numbers[i]) == i + 1;
25-
}
6+
public final class NumberOfDigits {
7+
private NumberOfDigits() {
268
}
27-
289
/**
2910
* Find the number of digits in a number.
3011
*
3112
* @param number number to find
3213
* @return number of digits of given number
3314
*/
34-
private static int numberOfDigits(int number) {
15+
public static int numberOfDigits(int number) {
3516
int digits = 0;
3617
do {
3718
digits++;
@@ -46,7 +27,7 @@ private static int numberOfDigits(int number) {
4627
* @param number number to find
4728
* @return number of digits of given number
4829
*/
49-
private static int numberOfDigitsFast(int number) {
30+
public static int numberOfDigitsFast(int number) {
5031
return number == 0 ? 1 : (int) Math.floor(Math.log10(Math.abs(number)) + 1);
5132
}
5233

@@ -56,7 +37,7 @@ private static int numberOfDigitsFast(int number) {
5637
* @param number number to find
5738
* @return number of digits of given number
5839
*/
59-
private static int numberOfDigitsFaster(int number) {
40+
public static int numberOfDigitsFaster(int number) {
6041
return number < 0 ? (-number + "").length() : (number + "").length();
6142
}
6243

@@ -66,7 +47,7 @@ private static int numberOfDigitsFaster(int number) {
6647
* @param number number to find
6748
* @return number of digits of given number
6849
*/
69-
private static int numberOfDigitsRecursion(int number) {
50+
public static int numberOfDigitsRecursion(int number) {
7051
return number / 10 == 0 ? 1 : 1 + numberOfDigitsRecursion(number / 10);
7152
}
7253
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.thealgorithms.maths;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import java.util.function.IntFunction;
6+
import java.util.stream.Stream;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.params.ParameterizedTest;
9+
import org.junit.jupiter.params.provider.Arguments;
10+
import org.junit.jupiter.params.provider.MethodSource;
11+
12+
public class NumberOfDigitsTest {
13+
14+
@ParameterizedTest
15+
@MethodSource("testCases")
16+
void testNumberOfDigits(final int expected, final int number, final IntFunction<Integer> methodUnderTest) {
17+
assertEquals(expected, methodUnderTest.apply(number));
18+
assertEquals(expected, methodUnderTest.apply(-number));
19+
}
20+
21+
private static Stream<Arguments> testCases() {
22+
final Integer[][] inputs = new Integer[][] {
23+
{3, 100},
24+
{1, 0},
25+
{2, 12},
26+
{3, 123},
27+
{4, 1234},
28+
{5, 12345},
29+
{6, 123456},
30+
{7, 1234567},
31+
{8, 12345678},
32+
{9, 123456789},
33+
{9, 987654321},
34+
};
35+
36+
final IntFunction<Integer>[] methods = new IntFunction[] {NumberOfDigits::numberOfDigits, NumberOfDigits::numberOfDigitsFast, NumberOfDigits::numberOfDigitsFaster, NumberOfDigits::numberOfDigitsRecursion};
37+
38+
return Stream.of(inputs).flatMap(input -> Stream.of(methods).map(method -> Arguments.of(input[0], input[1], method)));
39+
}
40+
}

0 commit comments

Comments
 (0)