File: quartic_test.rb

package info (click to toggle)
ruby-gsl 2.1.0.3%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 4,988 kB
  • sloc: ansic: 62,105; ruby: 15,859; sh: 19; makefile: 10
file content (28 lines) | stat: -rw-r--r-- 909 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
require 'test_helper'

class QuarticTest < GSL::TestCase

  def _test_quartic(n, *sol)
    z = GSL::Poly.complex_solve_quartic(0.0, 0.0, 0.0, n)
    desc = "Four roots, x^4 #{n}"

    assert_rel z[0].re, sol[0], 1e-9, "#{desc}: z0.real"
    assert_rel z[0].im, sol[1], 1e-9, "#{desc}: z0.imag"
    assert_rel z[1].re, sol[2], 1e-9, "#{desc}: z1.real"
    assert_rel z[1].im, sol[3], 1e-9, "#{desc}: z1.imag"
    assert_rel z[2].re, sol[4], 1e-9, "#{desc}: z2.real"
    assert_rel z[2].im, sol[5], 1e-9, "#{desc}: z2.imag"
    assert_rel z[3].re, sol[6], 1e-9, "#{desc}: z3.real"
    assert_rel z[3].im, sol[7], 1e-9, "#{desc}: z3.imag"
  end

  def test_quartic
    return unless GSL::Poly.method_defined?(:complex_solve_quartic)

    sol = 3.0 / Math.sqrt(2.0)

    _test_quartic(-81.0, -3.0, 0.0, 0.0, -3.0, 0.0, 3.0, 3.0, 0.0)
    _test_quartic(81.0, -sol, -sol, -sol, sol, sol, -sol, sol, sol)
  end

end