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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy