Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import org.scalatest.FunSuite
- class C_Polynomial_Tests extends FunSuite {
- import polynomials.Polynomial.x
- import polynomials.{ C, S, X }
- val p1 = C(2)
- val p2 = C(3)
- val p3 = C(-5)
- val p4 = X(C(5))
- val p5 = S(1, S(2, C(3)))
- test("degree") {
- assert(p1.degree === 0)
- assert(p2.degree === 0)
- assert(p3.degree === 0)
- assert(p4.degree === 1)
- assert(p5.degree === 2)
- }
- test("eval") {
- assert(p1.eval(1) === 2.0)
- assert(p2.eval(0) === 3.0)
- assert(p3.eval(10) === -5.0)
- assert(p4.eval(2) === 10.0)
- assert(p5.eval(2) === 17.0)
- }
- test("+: Polynomial") {
- assert(p1 + p2 === C(5))
- assert(p1 + p3 === C(-3))
- assert(p2 + p3 === C(-2))
- assert(p1 + p2 + p3 === C(0))
- assert(p1 + p4 === S(2, C(5)))
- }
- test("-: Polynomial") {
- assert(p2 - p1 === C(1))
- assert(p3 - p1 === C(-7))
- assert(p5 - p3 === S(6, S(2, C(3))))
- assert(p4 - p5 === S(-1, S(3, C(-3))))
- assert(p4 - p1 === S(-2, C(5)))
- }
- test("*: Polynomial") {
- val p = X(S(6, X(S(12, X(C(9))))))
- assert(p.eval(1) === 27.0)
- assert(p1 * p2 === C(6))
- assert(p1 * p4 === X(C(10)))
- assert(p1 * p5 === S(2, S(4, C(6))))
- assert(p4 * p4 === X(X(C(25))))
- assert((p4*p4).degree === 2)
- assert(p5 * C(0) === C(0))
- assert(p5 * p5 === S(1,S(4,S(10,S(12,C(9))))))
- assert(p5 * p4 === X(S(5, S(10, C(15)))))
- assert(p4 * p5 === X(S(5, S(10, C(15)))))
- assert(p5 * C(0) === C(0))
- assert(p4 * C(0) === C(0))
- assert(p1 * C(0) === C(0))
- }
- test("Basic subtraction and simplification") {
- val f = X(S(2, C(3)))
- assert(p5 - f === C(1))
- val f2 = S(1, C(5))
- assert(p4 - f2 === C(-1))
- assert((p5 - C(1)).degree === 2)
- assert(p5 - C(1) === X(S(2, C(3))))
- }
- test("-: Unary Operator") {
- assert(-p1 === C(-2))
- assert(-p4 === X(C(-5)))
- assert(-p5 === S(-1, S(-2, C(-3))))
- }
- test("Derivative") {
- assert(p1.derivative === C(0))
- assert(p4.derivative === C(5))
- assert(p5.derivative === S(2, C(6)))
- }
- test("@@: Polynomial") {
- assert(p1 @@ 0 === C(1))
- assert(p4 @@ 0 === C(1))
- assert(p5 @@ 0 === C(1))
- assert(p1 @@ 3 === C(8))
- assert(p4 @@ 2 === X(X(C(25))))
- assert(p5 @@ 2 === S(1, S(4, S(10, S(12, C(9))))))
- }
- test("+, -, *: Integer") {
- assert(p1 + 10 === C(12))
- assert(p4 + 10 === S(10, C(5)))
- assert(p5 + 10 === S(11, S(2, C(3))))
- assert(p1 - 10 === C(-8))
- assert(p4 - 10 === S(-10, C(5)))
- assert(p5 - 10 === S(-9, S(2, C(3))))
- assert(p1 * 10 === C(20))
- assert(p4 * 10 === X(C(50)))
- assert(p5 * 10 === S(10, S(20, C(30))))
- }
- test("exceptions") {
- assertThrows[IllegalArgumentException](p1 @@ -1)
- assertThrows[IllegalArgumentException](p4 @@ -1)
- assertThrows[IllegalArgumentException](p5 @@ -1)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement