From 6a44b074f0169a1b0f9e92347af929c5e471746e Mon Sep 17 00:00:00 2001
From: Camil Staps
Date: Sat, 18 Apr 2015 13:44:44 +0200
Subject: Reorganised projects
---
Week7 Polynomials/.gitignore | 3 +
Week7 Polynomials/Assignment (in Dutch).pdf | Bin 0 -> 132898 bytes
Week7 Polynomials/Week7.tar.gz | Bin 0 -> 5487 bytes
Week7 Polynomials/build.xml | 73 +
Week7 Polynomials/nbproject/build-impl.xml | 1413 ++++++++++++++++++++
Week7 Polynomials/nbproject/genfiles.properties | 8 +
Week7 Polynomials/nbproject/project.properties | 73 +
Week7 Polynomials/nbproject/project.xml | 15 +
Week7 Polynomials/src/main/Main.java | 23 +
Week7 Polynomials/src/polynomial/Polynomial.java | 189 +++
Week7 Polynomials/src/polynomial/Term.java | 145 ++
.../test/polynomial/PolynomialTest.java | 226 ++++
12 files changed, 2168 insertions(+)
create mode 100644 Week7 Polynomials/.gitignore
create mode 100644 Week7 Polynomials/Assignment (in Dutch).pdf
create mode 100644 Week7 Polynomials/Week7.tar.gz
create mode 100644 Week7 Polynomials/build.xml
create mode 100644 Week7 Polynomials/nbproject/build-impl.xml
create mode 100644 Week7 Polynomials/nbproject/genfiles.properties
create mode 100644 Week7 Polynomials/nbproject/project.properties
create mode 100644 Week7 Polynomials/nbproject/project.xml
create mode 100644 Week7 Polynomials/src/main/Main.java
create mode 100644 Week7 Polynomials/src/polynomial/Polynomial.java
create mode 100644 Week7 Polynomials/src/polynomial/Term.java
create mode 100644 Week7 Polynomials/test/polynomial/PolynomialTest.java
(limited to 'Week7 Polynomials')
diff --git a/Week7 Polynomials/.gitignore b/Week7 Polynomials/.gitignore
new file mode 100644
index 0000000..4523fc2
--- /dev/null
+++ b/Week7 Polynomials/.gitignore
@@ -0,0 +1,3 @@
+nbproject/private/
+build/
+dist/
diff --git a/Week7 Polynomials/Assignment (in Dutch).pdf b/Week7 Polynomials/Assignment (in Dutch).pdf
new file mode 100644
index 0000000..5c9bd0c
Binary files /dev/null and b/Week7 Polynomials/Assignment (in Dutch).pdf differ
diff --git a/Week7 Polynomials/Week7.tar.gz b/Week7 Polynomials/Week7.tar.gz
new file mode 100644
index 0000000..eaa77df
Binary files /dev/null and b/Week7 Polynomials/Week7.tar.gz differ
diff --git a/Week7 Polynomials/build.xml b/Week7 Polynomials/build.xml
new file mode 100644
index 0000000..a54a461
--- /dev/null
+++ b/Week7 Polynomials/build.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+ Builds, tests, and runs the project Week7 Polynomials.
+
+
+
diff --git a/Week7 Polynomials/nbproject/build-impl.xml b/Week7 Polynomials/nbproject/build-impl.xml
new file mode 100644
index 0000000..28a95e1
--- /dev/null
+++ b/Week7 Polynomials/nbproject/build-impl.xml
@@ -0,0 +1,1413 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set src.dir
+ Must set test.src.dir
+ Must set build.dir
+ Must set dist.dir
+ Must set build.classes.dir
+ Must set dist.javadoc.dir
+ Must set build.test.classes.dir
+ Must set build.test.results.dir
+ Must set build.classes.excludes
+ Must set dist.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set JVM to use for profiling in profiler.info.jvm
+ Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+ java -jar "${dist.jar.resolved}"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must set fix.includes
+
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+ Some tests failed; see details above.
+
+
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+ Must select one file in the IDE or set test.class
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Week7 Polynomials/nbproject/genfiles.properties b/Week7 Polynomials/nbproject/genfiles.properties
new file mode 100644
index 0000000..54a54b5
--- /dev/null
+++ b/Week7 Polynomials/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=e009bca9
+build.xml.script.CRC32=6ab8560a
+build.xml.stylesheet.CRC32=8064a381@1.75.2.48
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=e009bca9
+nbproject/build-impl.xml.script.CRC32=918db01b
+nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48
diff --git a/Week7 Polynomials/nbproject/project.properties b/Week7 Polynomials/nbproject/project.properties
new file mode 100644
index 0000000..bbf02d2
--- /dev/null
+++ b/Week7 Polynomials/nbproject/project.properties
@@ -0,0 +1,73 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processor.options=
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+ ${run.classpath}
+debug.test.classpath=\
+ ${run.test.classpath}
+# Files in build.classes.dir which should be excluded from distribution jar
+dist.archive.excludes=
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/Week7_Polynomials.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.processorpath=\
+ ${javac.classpath}
+javac.source=1.7
+javac.target=1.7
+javac.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}:\
+ ${libs.junit_4.classpath}
+javac.test.processorpath=\
+ ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+main.class=main.Main
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=true
+platform.active=default_platform
+run.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project.
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
+# To set system properties for unit tests define test-sys-prop.name=value:
+run.jvmargs=
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
diff --git a/Week7 Polynomials/nbproject/project.xml b/Week7 Polynomials/nbproject/project.xml
new file mode 100644
index 0000000..18f6583
--- /dev/null
+++ b/Week7 Polynomials/nbproject/project.xml
@@ -0,0 +1,15 @@
+
+
+ org.netbeans.modules.java.j2seproject
+
+
+ Week7 Polynomials
+
+
+
+
+
+
+
+
+
diff --git a/Week7 Polynomials/src/main/Main.java b/Week7 Polynomials/src/main/Main.java
new file mode 100644
index 0000000..725b8f3
--- /dev/null
+++ b/Week7 Polynomials/src/main/Main.java
@@ -0,0 +1,23 @@
+package main;
+
+import polynomial.Polynomial;
+
+/**
+ *
+ * @author Sjaak Smetsers
+ */
+public class Main {
+
+ public static void main(String[] args) {
+ Polynomial p1 = new Polynomial( "3.0 1 2 3" );
+ Polynomial p2 = new Polynomial( "4 0 5 3" );
+ Polynomial p3 = new Polynomial( "4 0 -5 3" );
+ Polynomial p4 = new Polynomial( "6 1" );
+
+ System.out.println( p1 );
+ System.out.println( p2 );
+ System.out.println( p3 );
+ System.out.println( p4 );
+ }
+
+}
diff --git a/Week7 Polynomials/src/polynomial/Polynomial.java b/Week7 Polynomials/src/polynomial/Polynomial.java
new file mode 100644
index 0000000..c87b96a
--- /dev/null
+++ b/Week7 Polynomials/src/polynomial/Polynomial.java
@@ -0,0 +1,189 @@
+package polynomial;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ * A class for representing Polynomials
+ *
+ * @author Sjaak Smetsers
+ * @date 10-03-2015
+ *
+ * @author Camil Staps, s4498062
+ * @date 17-03-2015
+ */
+public class Polynomial {
+
+ /**
+ * A polynomial is a sequence of terms here kept in an List.
+ * The assignment tells us 'it's handy' when terms are ordered by exponent.
+ * We don't seem to need that though, so there's no need to implement it.
+ */
+ List terms;
+
+ /**
+ * A constructor for creating the zero Polynomial zero is presented as an
+ * empty list of terms and not as a single term with 0 as a coefficient
+ */
+ public Polynomial() {
+ terms = new ArrayList<>();
+ }
+
+ /**
+ * A Constructor creating a polynomial from the argument string.
+ *
+ * This implementation, in contrast to the given implementation, allows for
+ * entering polynomials with two or more terms with the same exponent. Even
+ * though this is strictly not necessary and these inputs aren't legit, this
+ * behaviour is always better than the behaviour of the given implementation
+ * which would happily add two terms with the same exponent to our list.
+ *
+ * This implementation also directly checks that the coefficient unequals 0,
+ * which is also not need-to-have, but still nice-to-have.
+ *
+ * Both changes to the given implementation do not change the behaviour on
+ * legit input but do allow a user to mess up in some cases.
+ *
+ * @param s a String representing a list of terms which is converted to a
+ * scanner and passed to scanTerm for reading each individual term
+ */
+ public Polynomial( String s ) {
+ terms = new ArrayList<>();
+ Scanner scan = new Scanner(s);
+
+ for (Term t = Term.scanTerm(scan); t != null; t = Term.scanTerm(scan))
+ if (t.getCoef() != 0)
+ plus(t);
+ }
+
+ /**
+ * The copy constructor for making a deep copy
+ *
+ * @param p the copied polynomial
+ */
+ public Polynomial( Polynomial p ) {
+ terms = new ArrayList<>(p.terms.size());
+ for (Term t : p.terms) {
+ terms.add(new Term(t));
+ }
+ }
+
+ /**
+ * A straightforward conversion of a Polynomial into a string based on the
+ * toString for terms
+ *
+ * @return a readable string representation of this
+ */
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ boolean not_first = false;
+ for (Term t : terms) {
+ if (not_first && t.getCoef() >= 0)
+ sb.append("+");
+ sb.append(t);
+ not_first = true;
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Add a polynomial to this polynomial
+ * @param b the polynomial to add
+ */
+ public void plus(Polynomial b) {
+ for (Term t : b.terms)
+ plus(t);
+ }
+
+ /**
+ * Add a term
+ * @param t the term to add
+ */
+ private void plus(Term t) {
+ if (t.getCoef() == 0)
+ return;
+
+ Iterator iter = terms.iterator();
+ while (iter.hasNext()) {
+ Term this_t = iter.next();
+ if (this_t.getExp() == t.getExp()) {
+ this_t.plus(t);
+ if (this_t.getCoef() == 0)
+ iter.remove();
+ return;
+ }
+ }
+ terms.add(new Term(t));
+ }
+
+ /**
+ * Subtract a polynomial from this polynomial
+ * @param p the polynomial to subtract
+ */
+ public void minus(Polynomial p) {
+ Polynomial temp = new Polynomial(p);
+ temp.times(new Polynomial("-1 0"));
+ plus(temp);
+ }
+
+ /**
+ * Multiply a polynomial with this polynomial
+ * @param p the polynomial to multiply with
+ */
+ public void times(Polynomial p) {
+ Polynomial result = new Polynomial();
+ for (Term that_t : p.terms)
+ for (Term this_t : terms)
+ result.plus(new Term(that_t.getCoef() * this_t.getCoef(), that_t.getExp() + this_t.getExp()));
+ terms = result.terms;
+ }
+
+ public void divide(Polynomial b) {
+ }
+
+ /**
+ * Check equality
+ * @param other_poly the object to check with
+ * @return true iff other_poly represents the same polynomial as this instance
+ */
+ @Override
+ public boolean equals(Object other_poly) {
+ if (other_poly == null || other_poly.getClass() != getClass())
+ return false;
+
+ Polynomial that = new Polynomial((Polynomial) other_poly); // We need to copy because later we'll remove elements
+ if (terms.size() != that.terms.size())
+ return false;
+ for (Term this_t : terms) {
+ Iterator that_iter = that.terms.iterator();
+ boolean found = false;
+ while (that_iter.hasNext()) {
+ if (this_t.equals(that_iter.next())) {
+ found = true;
+ that_iter.remove();
+ break;
+ }
+ }
+ if (!found) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Apply the polynomial to a concrete variable
+ * @param x the variable
+ * @return the result of the polynomial applied on x
+ */
+ public double apply(double x) {
+ double result = 0;
+ for (Term t : terms)
+ result += t.apply(x);
+ return result;
+ }
+
+}
diff --git a/Week7 Polynomials/src/polynomial/Term.java b/Week7 Polynomials/src/polynomial/Term.java
new file mode 100644
index 0000000..60c6381
--- /dev/null
+++ b/Week7 Polynomials/src/polynomial/Term.java
@@ -0,0 +1,145 @@
+package polynomial;
+
+import java.util.Scanner;
+
+/**
+ * For representing terms in a polynomial.
+ *
+ * @author Sjaak Smetsers
+ * @version 1.0
+ * @date 15-02-2012
+ *
+ * @author Camil Staps, s4498062
+ * @date 17-03-2015
+ */
+public class Term {
+
+ /**
+ * Each term consists of a coefficient and an exponent
+ */
+ private double coefficient;
+ private int exponent;
+
+ /**
+ * a get-method for the exponent
+ *
+ * @return exponent
+ */
+ public int getExp() {
+ return exponent;
+ }
+
+ /**
+ * a get-method for the coefficient
+ *
+ * @return coefficient
+ */
+ public double getCoef() {
+ return coefficient;
+ }
+
+ /**
+ * A two-argument constructor
+ *
+ * @param c the value for the coefficient
+ * @param e the value for the exponent
+ */
+ public Term(double c, int e) {
+ coefficient = c;
+ exponent = e;
+ }
+
+ /**
+ * A copy-constructor
+ *
+ * @param t the term to be copied
+ */
+ public Term(Term t) {
+ this(t.coefficient, t.exponent);
+ }
+
+ /**
+ * For adding two terms with equal exponents
+ *
+ * @param t the term added to this
+ * @require exponent == t.exponent
+ */
+ public void plus(Term t) {
+ coefficient += t.coefficient;
+ }
+
+ /**
+ * For multiplying two terms
+ *
+ * @param t the multiplier
+ */
+ public void times(Term t) {
+ exponent += t.exponent;
+ coefficient *= t.coefficient;
+ }
+
+ /**
+ * Converts a term into a readable representation the standard format is
+ * %fx^%d
+ * I changed the implementation to remove trailing zeroes from the coefficient.
+ *
+ * @return the string representing the term
+ */
+ @Override
+ public String toString() {
+ String nice_coefficient = Double.toString(coefficient);
+ if (Math.round(coefficient) == coefficient)
+ nice_coefficient = Integer.toString((int) coefficient);
+ if (exponent == 0) {
+ return String.format("%s", nice_coefficient, exponent);
+ } else if (exponent == 1) {
+ return String.format("%sx", nice_coefficient, exponent);
+ } else {
+ return String.format("%sx^%d", nice_coefficient, exponent);
+ }
+ }
+
+ /**
+ * Standard implementation of equality
+ * @param may_be_term the object to check equality with
+ * @return true iff may_be_term represents the same term as this term
+ */
+ @Override
+ public boolean equals(Object may_be_term) {
+ if (may_be_term == null || getClass() != may_be_term.getClass()) {
+ return false;
+ } else {
+ Term term = (Term) may_be_term;
+ return exponent == term.exponent
+ && coefficient == term.coefficient;
+ }
+ }
+
+ /**
+ * Apply a term to a concrete variable
+ * @param x the variable to apply the term to
+ * @return the result of the application of the term to x
+ */
+ public double apply(double x) {
+ return coefficient * Math.pow(x, exponent);
+ }
+
+ /**
+ * A static method for converting scanner input into a term. The expected
+ * format is two numbers (coef, exp) separated by whitespaces. The coef
+ * should be either an integer or a decimal number. The exp is an integer.
+ *
+ * @param s the scanner providing the input
+ * @return null if no term could be found, the found term otherwise
+ */
+ public static Term scanTerm(Scanner s) {
+ String coef_patt = "\\-?\\d+(\\.\\d+)?";
+ if (s.hasNext(coef_patt)) {
+ String coef = s.next(coef_patt);
+ int exp = s.nextInt();
+ return new Term(Double.parseDouble(coef), exp);
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/Week7 Polynomials/test/polynomial/PolynomialTest.java b/Week7 Polynomials/test/polynomial/PolynomialTest.java
new file mode 100644
index 0000000..c00f165
--- /dev/null
+++ b/Week7 Polynomials/test/polynomial/PolynomialTest.java
@@ -0,0 +1,226 @@
+package polynomial;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ * A test class for the polynomial.Polynomial class
+ * @author Camil Staps, s4498062
+ */
+public class PolynomialTest {
+
+ public PolynomialTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() {
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ }
+
+ @Before
+ public void setUp() {
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ /**
+ * Test of toString method, of class Polynomial.
+ */
+ @Test
+ public void testToString() {
+ System.out.println("toString");
+ // Test exp=0, exp=1, exp>1, positive & negative integer & floating point coefficients all at once
+ assertEquals("3x^5-4x+2.5-3.4x^-7", new Polynomial("3 5 -4 1 2.5 0 -3.4 -7").toString());
+ // Test zero polynomial
+ assertEquals("", new Polynomial().toString());
+ }
+
+ /**
+ * Test of minus method, of class Polynomial.
+ */
+ @Test
+ public void testMinus() {
+ System.out.println("minus");
+ // Test cancelling out and exponents that don't exist in either of the two polynomials all at once
+ Polynomial instance = new Polynomial("7 4 -4 2 3 1 5 0"); // 7x^4 - 4x^2 + 3x + 5
+ instance.minus(new Polynomial("5 3 4 2 3 1 10 0")); // 5x^3 + 4x^2 + 3x + 10
+ assertEquals(new Polynomial("7 4 -5 3 -8 2 -5 0"), instance); // 7x^4 - 5x^3 - 8x^2 - 5
+
+ // Test minus = plus (times -1) on many small 2-term polynomials
+ for (float c1 = -10; c1 < 10; c1 += 2.3)
+ for (int exp1 = 5; exp1 < 10; exp1++)
+ for (float c2 = -10; c2 < 10; c2 += 2.3)
+ for (int exp2 = 5; exp2 < 10; exp2++) {
+ Polynomial fst = new Polynomial(c1 + " " + exp1 + " " + c2 + " " + exp2);
+ Polynomial snd = new Polynomial(c1 + " " + exp2 + " " + c2 + " " + exp1);
+ Polynomial fst_2 = new Polynomial(fst);
+ Polynomial snd_2 = new Polynomial(snd);
+ fst.minus(snd);
+ snd_2.times(new Polynomial("-1 0"));
+ fst_2.plus(snd_2);
+ assertEquals(true, fst.equals(fst_2));
+ }
+
+ // Test associativity for some random polynomials
+ Polynomial a = new Polynomial("5 4 2 5 20 8 4 0");
+ Polynomial b = new Polynomial("9 2 48 2 10 8 28 2");
+ Polynomial c = new Polynomial("3 8 4 20 8 2 4 5 0 0");
+ Polynomial a_bc = new Polynomial(a);
+ a_bc.minus(b);
+ a_bc.minus(c);
+ Polynomial a_cb = new Polynomial(a);
+ a_cb.minus(c);
+ a_cb.minus(b);
+ assertEquals(true, a_bc.equals(a_cb));
+ }
+
+ /**
+ * Test of times method, of class Polynomial.
+ */
+ @Test
+ public void testTimes() {
+ System.out.println("times");
+
+ // Simple case
+ Polynomial instance = new Polynomial("7 1 6 3");
+ instance.times(new Polynomial("5 3 4 2"));
+ assertEquals(new Polynomial("30 6 24 5 35 4 28 3"), instance);
+
+ // Simple case with zero polynomial
+ instance = new Polynomial("5 3");
+ instance.times(new Polynomial());
+ assertEquals(new Polynomial(), instance);
+
+ // Advanced case with coefficient 0 in the result
+ instance = new Polynomial("4 4 2 3"); // 4x^4 + 2x^3
+ instance.times(new Polynomial("2 2 -4 3")); // 2x^2 - 4x^3
+ assertEquals(new Polynomial("4 5 -16 7"), instance); // 4x^5 - 16x^7 (exponent 6 cancels out)
+
+ // Test associativity for some random polynomials
+ Polynomial a = new Polynomial("5 4 2 5 20 8 4 0");
+ Polynomial b = new Polynomial("9 2 48 2 10 8 28 2");
+ Polynomial c = new Polynomial("3 8 4 20 8 2 4 5 0 0");
+ Polynomial a_bc = new Polynomial(a);
+ a_bc.times(b);
+ a_bc.times(c);
+ Polynomial a_cb = new Polynomial(a);
+ a_cb.times(c);
+ a_cb.times(b);
+ assertEquals(true, a_bc.equals(a_cb));
+
+ // Test commutativity
+ Polynomial a_b = new Polynomial(a);
+ a_b.times(b);
+ Polynomial b_a = new Polynomial(b);
+ b_a.times(a);
+ assertEquals(true, a_b.equals(b_a));
+
+ // Test left distributivity
+ Polynomial b_plus_c = new Polynomial(b);
+ b_plus_c.plus(c);
+ Polynomial a_times_b_plus_c = new Polynomial(a);
+ a_times_b_plus_c.times(b_plus_c);
+ Polynomial a_times_c = new Polynomial(a);
+ a_times_c.times(c);
+ Polynomial a_times_b_plus_a_times_c = new Polynomial(a);
+ a_times_b_plus_a_times_c.times(b);
+ a_times_b_plus_a_times_c.plus(a_times_c);
+ assertEquals(true, a_times_b_plus_c.equals(a_times_b_plus_a_times_c));
+
+ // Test right distributivity
+ Polynomial b_plus_c_times_a = new Polynomial(b);
+ b_plus_c_times_a.plus(c);
+ b_plus_c_times_a.times(a);
+ Polynomial c_times_a = new Polynomial(c);
+ c_times_a.times(a);
+ Polynomial b_times_a_plus_c_times_a = new Polynomial(b);
+ b_times_a_plus_c_times_a.times(a);
+ b_times_a_plus_c_times_a.plus(c_times_a);
+ assertEquals(true, b_plus_c_times_a.equals(b_times_a_plus_c_times_a));
+ }
+
+ /**
+ * Test of divide method, of class Polynomial.
+ */
+ @Test
+ public void testDivide() {
+ System.out.println("divide");
+ Polynomial b = null;
+ Polynomial instance = new Polynomial();
+ instance.divide(b);
+ // TODO review the generated test code and remove the default call to fail.
+ fail("The test case is a prototype.");
+ }
+
+ /**
+ * Test of equals method, of class Polynomial.
+ */
+ @Test
+ public void testEquals() {
+ System.out.println("equals");
+ // Order of terms irrelevant
+ assertEquals(true, new Polynomial("4 2 3 5").equals(new Polynomial("3 5 4 2")));
+ // Terms with same exponent are added
+ assertEquals(true, new Polynomial("5 5 10 5").equals(new Polynomial("15 5")));
+ // Simple coefficient 0 removed
+ assertEquals(true, new Polynomial("0 7").equals(new Polynomial()));
+ // Advanced coefficient 0 removed
+ assertEquals(true, new Polynomial("5 10 -5 10").equals(new Polynomial()));
+ // Difference in exponent matters
+ assertEquals(false, new Polynomial("10 0").equals(new Polynomial("10 1")));
+ // Difference in coefficient matters
+ assertEquals(false, new Polynomial("10 0").equals(new Polynomial("5 0")));
+ }
+
+ /**
+ * Test of plus method, of class Polynomial.
+ */
+ @Test
+ public void testPlus_Polynomial() {
+ System.out.println("plus");
+ // Test cancelling out and exponents that don't exist in either of the two polynomials all at once
+ Polynomial instance = new Polynomial("7 4 -4 2 7 1 5 0"); // 7x^4 - 4x^2 + 7x + 5
+ instance.plus(new Polynomial("5 3 4 2 3 1 10 0")); // 5x^3 + 4x^2 + 3x + 10
+ assertEquals(new Polynomial("7 4 5 3 10 1 15 0"), instance); // 7x^4 + 5x^3 + 10x + 15
+
+ // Test associativity for some random polynomials
+ Polynomial a = new Polynomial("5 4 2 5 20 8 4 0");
+ Polynomial b = new Polynomial("9 2 7 5 10 8 28 2");
+ Polynomial c = new Polynomial("3 8 4 20 8 2 4 5 0 0");
+ Polynomial a_bc = new Polynomial(a);
+ a_bc.plus(b);
+ a_bc.plus(c);
+ Polynomial a_cb = new Polynomial(a);
+ a_cb.plus(c);
+ a_cb.plus(b);
+ assertEquals(true, a_bc.equals(a_cb));
+
+ // Test commutativity
+ Polynomial a_b = new Polynomial(a);
+ a_b.plus(b);
+ Polynomial b_a = new Polynomial(b);
+ b_a.plus(a);
+ assertEquals(true, a_b.equals(b_a));
+ }
+
+ /**
+ * Test of apply method, of class Polynomial.
+ */
+ @Test
+ public void testApply() {
+ System.out.println("apply");
+ // Test zero coefficient, floating point coefficient and negative coefficient all at once
+ Polynomial instance = new Polynomial("0 7 5 4 0.5 3 9 2 -8 0");
+ assertEquals(422654.5, instance.apply(17.0), 0.0);
+ }
+
+}
--
cgit v1.2.3