Skip to content
Snippets Groups Projects
Commit 5b135436 authored by Goik Martin's avatar Goik Martin
Browse files

Dividing summing exercise

parent d7809940
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
/.settings
/.idea
/summing.iml
/.classpath
/.project
/target
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.hdm-stuttgart.sd1</groupId>
<artifactId>summing</artifactId>
<version>0.9</version>
<name>Summing</name>
<url>https://freedocs.mi.hdm-stuttgart.de</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
package de.hdm_stuttgart.de.sd1.sum;
/**
* Summing up integer values.
*
*/
public class Summing {
/**
* @param args unused
*/
public static void main(String[] args) {
// Simple tests
System.out.println("1 + 2 + 3" + "=" + getSum(3));
System.out.println("1 + 2 + ... + 150" + "=" + getSum(150));
long start = System.nanoTime();
System.out.println("1 + 2 + ... + 65535" + "=" + getSum(65535));
long end = System.nanoTime();
System.out.println("Elapsed time: " + (end - start) + " nanoseconds");
}
/**
* Summing up all integers starting from 0 up to and including a given limit
* Example: Let the limit be 5, then the result is 1 + 2 + 3 + 4 + 5
*
* @param limit The last number to include into the computed sum
* @return The sum of 1 + 2 + ... + limit
*/
public static long getSum (int limit) {
int sum = 0;
for (int i = 1; i <= limit; i++) {
sum += i;
}
return sum;
}
}
\ No newline at end of file
......@@ -11,31 +11,23 @@ import de.hdm_stuttgart.de.sd1.sum.Summing;
*/
public class SummingTest {
/**
* Test loop implementation.
* Testing negative values and zero.
*/
@Test
public void testSum() {
public void testNonPositiveLimits() {
assertEquals(0, Summing.getSum(-5));
assertEquals(0, Summing.getSum(0));
assertEquals(1, Summing.getSum(1));
assertEquals(3, Summing.getSum(2));
assertEquals(15, Summing.getSum(5));
assertEquals(5050, Summing.getSum(100));
assertEquals(2147450880, Summing.getSum(65535));
}
/**
* Test non-loop implementation.
* Testing positive values.
*/
@Test
public void testSumGauss() {
assertEquals(0, Summing.getSumUsingGauss(0));
assertEquals(1, Summing.getSumUsingGauss(1));
assertEquals(3, Summing.getSumUsingGauss(2));
assertEquals(2147450880, Summing.getSumUsingGauss(65535));
assertEquals(0, Summing.getSumUsingGauss(-5));
assertEquals(15, Summing.getSumUsingGauss(5));
assertEquals(5050, Summing.getSumUsingGauss(100));
public void testPositiveLimits() {
assertEquals(1, Summing.getSum(1));
assertEquals(3, Summing.getSum(2));
assertEquals(15, Summing.getSum(5));
assertEquals(5050, Summing.getSum(100)); // Gauss at school
assertEquals(2147450880, Summing.getSum(65535));
}
}
\ No newline at end of file
/.settings
/.idea
/summing.iml
/.classpath
/.project
/target
File moved
......@@ -10,7 +10,15 @@ public class Summing {
* @param args unused
*/
public static void main(String[] args) {
// Simple tests
System.out.println("1 + 2 + 3" + "=" + getSum(3));
System.out.println("1 + 2 + ... + 150" + "=" + getSum(150));
long start = System.nanoTime();
System.out.println("1 + 2 + ... + 65535" + "=" + getSum(65535));
long end = System.nanoTime();
System.out.println("Elapsed time: " + (end - start) + " nanoseconds");
}
/**
......@@ -20,26 +28,12 @@ public class Summing {
* @param limit The last number to include into the computed sum
* @return The sum of 1 + 2 + ... + limit
*/
public static long getSum (int limit) {
int sum = 0;
for (int i = 1; i <= limit; i++) {
sum += i;
}
return sum;
}
/**
* Alternate implementaion offering better performance, see {@link #getSum(int)}
* @param limit See {@link #getSum(int)}
* @return See {@link #getSum(int)}
*/
public static long getSumUsingGauss (int limit) {
public static long getSum(int limit) {
if (limit < 0) {
return 0;
} else if (0 == limit % 2){
} else if (0 == limit % 2){ // even limit, divide by 2
return limit / 2 * (limit + 1); // Avoiding arithmetic overflow
} else {
} else { // uneven limit, divide (limit + 1 ) by 2
return (limit + 1) / 2 * limit; // Avoiding arithmetic overflow
}
}
......
package de.hdm_stuttgart.de.sd1.rounding;
import static org.junit.Assert.*;
import org.junit.Test;
import de.hdm_stuttgart.de.sd1.sum.Summing;
/**
* Unit tests
*/
public class SummingTest {
/**
* Testing negative values and zero.
*/
@Test
public void testNonPositiveLimits() {
assertEquals(0, Summing.getSum(-5));
assertEquals(0, Summing.getSum(0));
}
/**
* Testing positive values.
*/
@Test
public void testPositiveLimits() {
assertEquals(1, Summing.getSum(1));
assertEquals(3, Summing.getSum(2));
assertEquals(15, Summing.getSum(5));
assertEquals(5050, Summing.getSum(100)); // Gauss at school
assertEquals(2147450880, Summing.getSum(65535));
}
}
\ No newline at end of file
......@@ -47,7 +47,8 @@
<module>Sd1/Prime/V2</module>
<module>Sd1/NonsenseGenerator</module>
<module>Sd1/CollectionImplement/StringSet/Solution</module>
<module>Sd1/summing</module>
<module>Sd1/summing/V1</module>
<module>Sd1/summing/V2</module>
<module>Sd1/StringLengthSort/Solution</module>
<module>Sd1/Gcd/V1</module>
<module>Sd1/interest/V1</module>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment