# unit tests for the symbolic differentiation program in Ruby This # includes commented-out unit tests for the extra credit question for # exponentiation, sin, and cos -- uncomment those if you do the extra credit. require 'test/unit' require 'assign8' class TestDeriv < Test::Unit::TestCase def test_simplify x = Variable.new("x") assert_equal(10, (0*(x+3)+10).simplify) assert_equal(3.5, (0*(x+2.8)+3.5).simplify) # extra credit part follows # assert_equal(0, 0.sin.simplify) # assert_equal(1, 0.cos.simplify) # assert_equal(1000, (10**3).simplify) # assert_equal(1, (x**0).simplify) end def test_to_s x = Variable.new("x") assert_equal("x", x.to_s) # these tests assume that you turn expressions into fully-parenthesized # strings -- change these if you remove unneeded parentheses assert_equal("(3*(10+x))", (3*(10+x)).to_s) assert_equal("((10*x)+3)", (10*x+3).to_s) end def test_const_and_var x = Variable.new("x") y = Variable.new("y") assert_equal(0, 3.deriv(x)) assert_equal(1, x.deriv(x)) assert_equal(0, y.deriv(x)) end def test_plus x = Variable.new("x") y = Variable.new("y") assert_equal(1, (x+y).deriv(x)) assert_equal(1, (x+3).deriv(x)) assert_equal(1, (3+x).deriv(x)) end def test_minus x = Variable.new("x") y = Variable.new("y") assert_equal(1, (x-y-3).deriv(x)) assert_equal(-1, (x-y).deriv(y)) assert_equal(-1, (-x).deriv(x)) assert_equal(3, (-y+3*x-5).deriv(x)) end def test_times x = Variable.new("x") y = Variable.new("y") assert_equal(y, (x*y).deriv(x)) assert_equal(3, (x*3).deriv(x)) assert_equal(3, (3*x).deriv(x)) assert_equal(2.8, (x*2.8).deriv(x)) end def test_complicated x = Variable.new("x") y = Variable.new("y") assert_equal(x*y+(x+3)*y, (x*y*(x+3)).deriv(x)) assert_equal(50, (10*(2*x+3*x+5)).deriv(x)) assert_equal(57.2, (10*(2.52*x+3.2*x+5.99)).deriv(x)) end def test_unary # test unary + and - x = Variable.new("x") assert_equal(0-x, -x) assert_equal(x, +x) end # def test_trig # x = Variable.new("x") # y = Variable.new("y") # assert_equal(x.cos, x.sin.deriv(x)) # assert_equal(-x.sin, x.cos.deriv(x)) # # you may need to reorder the expressions for the derivative # # depending on how your deriv method is defined # assert_equal((4*x).cos*4, (4*x).sin.deriv(x)) # assert_equal((-(4*x).sin)*4, (4*x).cos.deriv(x)) # end # def test_expt # x = Variable.new("x") # y = Variable.new("y") # assert_equal(2*x, (x**2).deriv(x)) # assert_equal(1, (x**1).deriv(x)) # # similarly you may need to reorder the expressions for the derivative # # depending on how your deriv method is defined # assert_equal(4*x**3, (x**4).deriv(x)) # assert_equal(4*(3*x*y)**3 * (y*3), ((3*x*y)**4).deriv(x)) # end end