From 851c56d546bdab2bb26f3d2c7b058c1696ad6568 Mon Sep 17 00:00:00 2001 From: Peter Kurfer <peter.kurfer@fh-rosenheim.de> Date: Thu, 2 Nov 2017 12:35:56 +0100 Subject: [PATCH] Copied solution from assignment 04 as starting point --- .gitignore | 9 + LICENSE | 2 +- README.md | 6 +- build.gradle | 36 ++++ gradle.properties | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54712 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 172 ++++++++++++++++++ gradlew.bat | 84 +++++++++ settings.gradle | 18 ++ .../prg3/a05/collections/SimpleFilter.java | 18 ++ .../inf/prg3/a05/collections/SimpleList.java | 90 +++++++++ .../prg3/a05/collections/SimpleListImpl.java | 124 +++++++++++++ src/main/resources/log4j2.xml | 13 ++ .../tests/collections/SimpleListTests.java | 113 ++++++++++++ .../inf/prg3/a05/tests/models/Person.java | 71 ++++++++ 16 files changed, 763 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/java/de/fhro/inf/prg3/a05/collections/SimpleFilter.java create mode 100644 src/main/java/de/fhro/inf/prg3/a05/collections/SimpleList.java create mode 100644 src/main/java/de/fhro/inf/prg3/a05/collections/SimpleListImpl.java create mode 100644 src/main/resources/log4j2.xml create mode 100644 src/test/java/de/fhro/inf/prg3/a05/tests/collections/SimpleListTests.java create mode 100644 src/test/java/de/fhro/inf/prg3/a05/tests/models/Person.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..65f75cf --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.DS_Store +.gradle +/build/ +/out/ +gradle-app.setting +!gradle-wrapper.jar +.gradletasknamecache +.idea/ +*.iml diff --git a/LICENSE b/LICENSE index e7dccd4..ed3a58d 100644 --- a/LICENSE +++ b/LICENSE @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 98bc09b..0274a1a 100644 --- a/README.md +++ b/README.md @@ -1 +1,5 @@ -# 05-generic-bounds \ No newline at end of file +# 05-generic-bounds + +* PECS `map` +* `Plant`, `Flower`, `Shrub`, `PlantBed` +* `splitByColor` diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..18dc052 --- /dev/null +++ b/build.gradle @@ -0,0 +1,36 @@ +group 'de.fhro.inf.prg3' +version '1.0-SNAPSHOT' + +apply plugin: 'java' +apply plugin: 'org.junit.platform.gradle.plugin' + +sourceCompatibility = 1.8 + +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0' + } +} + +repositories { + mavenCentral() +} + +dependencies { + testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}") + testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}") + testRuntime("org.junit.platform:junit-platform-launcher:${junitPlatformVersion}") + compile("org.apache.logging.log4j:log4j-core:${log4jVersion}") + runtime("org.apache.logging.log4j:log4j-jul:${log4jVersion}") + compile "org.apache.commons:commons-lang3:$commons_lang3_version" +} + +junitPlatform { + logManager 'org.apache.logging.log4j.jul.LogManager' + reportsDir file('build/test-results/junit-platform') +} + + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..44ff5c9 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,4 @@ +junitPlatformVersion = 1.0.0 +junitJupiterVersion = 5.0.0 +log4jVersion = 2.9.0 +commons_lang3_version=3.6 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..ed88a042a287c140a32e1639edfc91b2a233da8c GIT binary patch literal 54712 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..74bb778 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.2.1-bin.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..8403dc3 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,18 @@ +/* + * This settings file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * In a single project build this file can be empty or even removed. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user guide at https://docs.gradle.org/4.2.1/userguide/multi_project_builds.html + */ + +/* +// To declare projects as part of a multi-project build use the 'include' method +include 'shared' +include 'api' +include 'services:webservice' +*/ + +rootProject.name = '05-generic-bounds' diff --git a/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleFilter.java b/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleFilter.java new file mode 100644 index 0000000..d7e0d4e --- /dev/null +++ b/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleFilter.java @@ -0,0 +1,18 @@ +package de.fhro.inf.prg3.a05.collections; + +/** + * @author Peter Kurfer + * Created on 10/6/17. + */ +@FunctionalInterface +public interface SimpleFilter<T> { + + /** + * Determines if a item matches a condition + * + * @param item Object to evaluate + * @return true if the referenced object should be included. + */ + boolean include(T item); +} + diff --git a/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleList.java b/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleList.java new file mode 100644 index 0000000..5c4d93e --- /dev/null +++ b/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleList.java @@ -0,0 +1,90 @@ +package de.fhro.inf.prg3.a05.collections; + +import java.util.function.Function; + +/** + * A simple list containing just a few basic methods + * Inherits the Iterable interface to ease the handling (e.g. extended for-loop) + * + * @param <T> type of the items which will be saved in the list + */ +public interface SimpleList<T> extends Iterable<T> { + + /** + * Add a given object to the back of the list. + * + * @param o item to add + */ + void add(T o); + + /** + * @param clazz Class instance to solve the instantiation problem + */ + @SuppressWarnings("unchecked") + default void addDefault(Class<T> clazz) { + try { + /* better solution would be to use Google Guava to get a type token + and use this token to create a new instance + because we didn't include a reference to Guava this is the easiest way to create new instance of T */ + this.add(clazz.newInstance()); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + /** + * @return current size of the list + */ + int size(); + + /** + * Generate a new list using the given filter instance. + * + * @param filter SimpleFilter instance to determine which elements should be included + * @return a new, filtered list + */ + @SuppressWarnings("unchecked") + default SimpleList<T> filter(SimpleFilter<T> filter) { + SimpleList<T> result; + try { + result = (SimpleList<T>) getClass().newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + result = new SimpleListImpl<>(); + } + + for (T o : this) { + if (filter.include(o)) { + result.add(o); + } + } + return result; + } + + /** + * @param transform + * @param <R> + * @return + */ + @SuppressWarnings("unchecked") + default <R> SimpleList<R> map(Function<T, R> transform) { + SimpleList<R> result; + try { + result = (SimpleList<R>) getClass().newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + result = new SimpleListImpl<>(); + } + for (T t : this) { + result.add(transform.apply(t)); + } + return result; + } + + /* Java 9 + private <V> SimpleList<V> createNew(Class<SimpleList<V>> clazz){ + try { + return clazz.getConstructor().newInstance() + } catch (Exception e) { + return new SimpleListImpl<>(); + } + }*/ +} diff --git a/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleListImpl.java b/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleListImpl.java new file mode 100644 index 0000000..ce5e786 --- /dev/null +++ b/src/main/java/de/fhro/inf/prg3/a05/collections/SimpleListImpl.java @@ -0,0 +1,124 @@ +package de.fhro.inf.prg3.a05.collections; + +import java.util.Iterator; + +/** + * Default implementation of the SimpleList interface + * + * @author Peter Kurfer + * Created on 10/6/17. + */ +public class SimpleListImpl<T> implements SimpleList<T> { + + private ListElement<T> head; + private int size; + + /** + * Default constructor + */ + public SimpleListImpl() { + head = null; + } + + /** + * Add an object to the end of the list + * + * @param item item to add + */ + @Override + public void add(T item) { + /* special case empty list */ + if (head == null) { + head = new ListElement<>(item); + } else { + /* any other list length */ + ListElement<T> current = head; + while (current.getNext() != null) { + current = current.getNext(); + } + current.setNext(new ListElement<>(item)); + } + size++; + } + + /** + * @return size of the list + */ + @Override + public int size() { + return size; + } + + /** + * Create a new iterator + */ + @Override + public Iterator<T> iterator() { + return new SimpleIterator(); + } + + /** + * Helper class which implements the Iterator<TE> interface + * Has to be non static because otherwise it could not access the head of the list + */ + private class SimpleIterator implements Iterator<T> { + + private ListElement<T> current = head; + + /** + * @inheritDoc + */ + @Override + public boolean hasNext() { + return current != null; + } + + /** + * @inheritDoc + */ + @Override + public T next() { + T tmp = current.getItem(); + current = current.getNext(); + return tmp; + } + } + + /** + * Helper class for the linked list + * can be static because the ListElement does not need to access the SimpleList instance + */ + private static class ListElement<T> { + private T item; + private ListElement<T> next; + + ListElement(T item) { + this.item = item; + this.next = null; + } + + /** + * @return get object in the element + */ + public T getItem() { + return item; + } + + /** + * @return successor of the ListElement - may be NULL + */ + public ListElement<T> getNext() { + return next; + } + + /** + * Sets the successor of the ListElement + * + * @param next ListElement + */ + public void setNext(ListElement<T> next) { + this.next = next; + } + } + +} diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..99d963a --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Configuration status="WARN"> + <Appenders> + <Console name="Console" target="SYSTEM_OUT"> + <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> + </Console> + </Appenders> + <Loggers> + <Root level="all"> + <AppenderRef ref="Console"/> + </Root> + </Loggers> +</Configuration> \ No newline at end of file diff --git a/src/test/java/de/fhro/inf/prg3/a05/tests/collections/SimpleListTests.java b/src/test/java/de/fhro/inf/prg3/a05/tests/collections/SimpleListTests.java new file mode 100644 index 0000000..0bf94c4 --- /dev/null +++ b/src/test/java/de/fhro/inf/prg3/a05/tests/collections/SimpleListTests.java @@ -0,0 +1,113 @@ +package de.fhro.inf.prg3.a05.tests.collections; + +import de.fhro.inf.prg3.a05.collections.SimpleFilter; +import de.fhro.inf.prg3.a05.collections.SimpleList; +import de.fhro.inf.prg3.a05.collections.SimpleListImpl; +import de.fhro.inf.prg3.a05.tests.models.Person; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Iterator; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * @author Peter Kurfer + * Created on 10/6/17. + */ +class SimpleListTests { + + private final Logger logger = LogManager.getLogger(); + private SimpleList<Integer> testList; + + @BeforeEach + void setup(){ + testList = new SimpleListImpl<>(); + + testList.add(1); + testList.add(2); + testList.add(3); + testList.add(4); + testList.add(5); + } + + @Test + void testAddElements(){ + logger.info("Testing if adding and iterating elements is implemented correctly"); + int counter = 0; + for(Object o : testList){ + counter++; + } + assertEquals(5, counter); + } + + @Test + void testSize(){ + logger.info("Testing if size() method is implemented correctly"); + assertEquals(5, testList.size()); + } + + @Test + void testFilterAnonymousClass(){ + logger.info("Testing the filter possibilities by filtering for all elements greater 2"); + SimpleList<Integer> result = testList.filter(new SimpleFilter<Integer>() { + @Override + public boolean include(Integer item) { + return item > 2; + } + }); + + for(Integer i : result){ + assertTrue(i > 2); + } + } + + @Test + void testFilterLambda(){ + logger.info("Testing the filter possibilities by filtering for all elements which are dividable by 2"); + SimpleList<Integer> result = testList.filter(o -> o % 2 == 0); + for(Integer i : result){ + assertTrue(i % 2 == 0); + } + } + + @Test + void testAddEmpty() throws Exception { + logger.info("Testing to add a new empty list element"); + SimpleList<Person> l = new SimpleListImpl<>(); + l.addDefault(Person.class); + assertEquals(1, l.size()); + } + + @Test + void testSimpleListMap(){ + logger.info("Testing default map method"); + SimpleList<Integer> mapped = testList.map(i -> i + 1); + assertEquals(5, mapped.size()); + for(Integer i : mapped) { + assertTrue(i > 1); + assertTrue(i < 7); + } + } + + @Test + void testMap() { + logger.info("Testing default map method by mapping every value to its square"); + SimpleList<Double> result = testList.map(i -> Math.pow(i, 2)); + Iterator<Integer> origIt = testList.iterator(); + Iterator<Double> mapIt = result.iterator(); + while (origIt.hasNext() && mapIt.hasNext()) { + assertEquals(Math.pow(origIt.next(), 2), mapIt.next(), 0.1); + } + } + + @Test + void testSimpleListMapChangedType() { + logger.info("Testing default map method by mapping every integer to a char value"); + SimpleList<Character> mapped = testList.map(i -> ((char) (i + 64))); + assertEquals(5, mapped.size()); + } +} diff --git a/src/test/java/de/fhro/inf/prg3/a05/tests/models/Person.java b/src/test/java/de/fhro/inf/prg3/a05/tests/models/Person.java new file mode 100644 index 0000000..94b22b4 --- /dev/null +++ b/src/test/java/de/fhro/inf/prg3/a05/tests/models/Person.java @@ -0,0 +1,71 @@ +package de.fhro.inf.prg3.a05.tests.models; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * Demo model with an empty constructor to be able to test the addEmpty() method + * @author Peter Kurfer + * Created on 10/19/17. + */ +public class Person { + + private String firstName; + private String lastName; + + public Person() { + } + + public Person(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + + if (!(o instanceof Person)) return false; + + Person person = (Person) o; + + return new EqualsBuilder() + .append(getFirstName(), person.getFirstName()) + .append(getLastName(), person.getLastName()) + .isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder(17, 37) + .append(getFirstName()) + .append(getLastName()) + .toHashCode(); + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("firstName", firstName) + .append("lastName", lastName) + .toString(); + } +} + -- GitLab