Skip to content

Commit 8930ab5

Browse files
authored
Cleanup SumOfDigits and its tests (TheAlgorithms#4994)
1 parent 1ea95ff commit 8930ab5

File tree

2 files changed

+31
-44
lines changed

2 files changed

+31
-44
lines changed
Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
package com.thealgorithms.maths;
22

3-
public class SumOfDigits {
4-
5-
public static void main(String[] args) {
6-
assert sumOfDigits(-123) == 6 && sumOfDigitsRecursion(-123) == 6 && sumOfDigitsFast(-123) == 6;
7-
8-
assert sumOfDigits(0) == 0 && sumOfDigitsRecursion(0) == 0 && sumOfDigitsFast(0) == 0;
9-
10-
assert sumOfDigits(12345) == 15 && sumOfDigitsRecursion(12345) == 15 && sumOfDigitsFast(12345) == 15;
3+
public final class SumOfDigits {
4+
private SumOfDigits() {
115
}
126

137
/**
@@ -17,12 +11,12 @@ public static void main(String[] args) {
1711
* @return sum of digits of given {@code number}
1812
*/
1913
public static int sumOfDigits(int number) {
20-
number = number < 0 ? -number : number;
21-
/* calculate abs value */
14+
final int base = 10;
15+
number = Math.abs(number);
2216
int sum = 0;
2317
while (number != 0) {
24-
sum += number % 10;
25-
number /= 10;
18+
sum += number % base;
19+
number /= base;
2620
}
2721
return sum;
2822
}
@@ -34,9 +28,9 @@ public static int sumOfDigits(int number) {
3428
* @return sum of digits of given {@code number}
3529
*/
3630
public static int sumOfDigitsRecursion(int number) {
37-
number = number < 0 ? -number : number;
38-
/* calculate abs value */
39-
return number < 10 ? number : number % 10 + sumOfDigitsRecursion(number / 10);
31+
final int base = 10;
32+
number = Math.abs(number);
33+
return number < base ? number : number % base + sumOfDigitsRecursion(number / base);
4034
}
4135

4236
/**
@@ -45,14 +39,7 @@ public static int sumOfDigitsRecursion(int number) {
4539
* @param number the number contains digits
4640
* @return sum of digits of given {@code number}
4741
*/
48-
public static int sumOfDigitsFast(int number) {
49-
number = number < 0 ? -number : number;
50-
/* calculate abs value */
51-
char[] digits = (number + "").toCharArray();
52-
int sum = 0;
53-
for (int i = 0; i < digits.length; ++i) {
54-
sum += digits[i] - '0';
55-
}
56-
return sum;
42+
public static int sumOfDigitsFast(final int number) {
43+
return String.valueOf(Math.abs(number)).chars().map(c -> c - '0').reduce(0, Integer::sum);
5744
}
5845
}
Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
package com.thealgorithms.maths;
22

3-
import static org.junit.jupiter.api.Assertions.*;
4-
5-
import org.junit.jupiter.api.Test;
3+
import java.util.stream.Stream;
4+
import org.junit.jupiter.api.Assertions;
5+
import org.junit.jupiter.params.ParameterizedTest;
6+
import org.junit.jupiter.params.provider.Arguments;
7+
import org.junit.jupiter.params.provider.MethodSource;
68

79
class SumOfDigitsTest {
10+
@ParameterizedTest
11+
@MethodSource("testCases")
12+
void sumOfDigitsTest(final int expected, final int input) {
13+
Assertions.assertEquals(expected, SumOfDigits.sumOfDigits(input));
14+
}
815

9-
SumOfDigits SoD = new SumOfDigits();
10-
11-
@Test
12-
void testZero() {
13-
assertEquals(0, SumOfDigits.sumOfDigits(0));
14-
assertEquals(0, SumOfDigits.sumOfDigitsRecursion(0));
15-
assertEquals(0, SumOfDigits.sumOfDigitsFast(0));
16+
@ParameterizedTest
17+
@MethodSource("testCases")
18+
void sumOfDigitsRecursionTest(final int expected, final int input) {
19+
Assertions.assertEquals(expected, SumOfDigits.sumOfDigitsRecursion(input));
1620
}
1721

18-
@Test
19-
void testPositive() {
20-
assertEquals(15, SumOfDigits.sumOfDigits(12345));
21-
assertEquals(15, SumOfDigits.sumOfDigitsRecursion(12345));
22-
assertEquals(15, SumOfDigits.sumOfDigitsFast(12345));
22+
@ParameterizedTest
23+
@MethodSource("testCases")
24+
void sumOfDigitsFastTest(final int expected, final int input) {
25+
Assertions.assertEquals(expected, SumOfDigits.sumOfDigitsFast(input));
2326
}
2427

25-
@Test
26-
void testNegative() {
27-
assertEquals(6, SumOfDigits.sumOfDigits(-123));
28-
assertEquals(6, SumOfDigits.sumOfDigitsRecursion(-123));
29-
assertEquals(6, SumOfDigits.sumOfDigitsFast(-123));
28+
private static Stream<Arguments> testCases() {
29+
return Stream.of(Arguments.of(0, 0), Arguments.of(1, 1), Arguments.of(15, 12345), Arguments.of(6, -123), Arguments.of(1, -100000), Arguments.of(8, 512));
3030
}
3131
}

0 commit comments

Comments
 (0)