RegressionTests__QDoubleTests.st
author Claus Gittinger <cg@exept.de>
Mon, 19 Jun 2017 18:12:40 +0200
changeset 1616 04f3c6561ee0
parent 1615 736b7ed0df9a
child 1617 92cc9694fd5e
permissions -rw-r--r--
#BUGFIX by cg class: RegressionTests::QDoubleTests added: #test_06_exp

"{ Package: 'stx:goodies/regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#QDoubleTests
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'tests-regression'
!

!QDoubleTests class methodsFor:'documentation'!

documentation
"
    documentation to be added.

    [author:]
        cg

    [instance variables:]

    [class variables:]

    [see also:]

"
! !

!QDoubleTests methodsFor:'tests'!

test_01_instance_creation
    |d|

    d := QDouble fromFloat:1.0.

    "
     self run:#test_01_instance_creation
     self new test_01_instance_creation
    "

    "Created: / 12-06-2017 / 17:03:46 / cg"
    "Modified: / 12-06-2017 / 18:41:14 / cg"
!

test_02_addition
    |d1 d2 l1 l2 sum_l q1 q2 sum_d sum_q|

    d1 := 1.0.
    d2 := 1.0e-16.
    sum_d := d1 + d2.
    "/ precision is lost with doubles!!
    self assert:( sum_d - 1.0 = 0.0 ).
    
    l1 := 1.0 asLongFloat.
    l2 := 1.0e-16 asLongFloat.
    sum_l := l1 + l2.
    "/ no precision is lost with long doubles!!
    self assert:( (sum_l - (1.0 asLongFloat)) > 0.0 ).

    l1 := 1.0 asLongFloat.
    l2 := 1.0e-30 asLongFloat.
    sum_l := l1 + l2.
    "/ precision is lost!!
    self assert:( (sum_l - (1.0 asLongFloat)) = 0.0 ).

    q1 := QDouble fromFloat:1.0.
    q2 := QDouble fromFloat:1.0e-16.
    sum_q := q1 + q2.
    
    "/ no precision is lost
    self assert:( (sum_q - (QDouble fromFloat:1.0)) > 0.0 ).

    q1 := QDouble fromFloat:1.0.
    q2 := QDouble fromFloat:2.0.
    sum_q := q1 + q2.
    self assert:( sum_q = 3.0 ).
    
    q1 := QDouble fromFloat:1.0.
    q2 := QDouble fromFloat:2.0.
    sum_q := q1 + 2.0.
    self assert:( sum_q = 3.0 ).

    q1 := QDouble fromFloat:1.0.
    q2 := QDouble fromFloat:2.0.
    sum_q := 1.0 + q2.
    self assert:( sum_q = 3.0 ).

    "
     self run:#test_02_addition
     self new test_02_addition
    "

    "Created: / 12-06-2017 / 17:05:07 / cg"
    "Modified: / 19-06-2017 / 17:03:57 / cg"
!

test_03_subtract
    |d1 d2 l1 l2 diff_l q1 q2 diff_d diff_q|

    d1 := 1.0.
    d2 := 0.99999.
    diff_d := d1 - d2.
    "/ precision is lost with doubles!!
    
    l1 := 1.0 asLongFloat.
    l2 := 0.99999 asLongFloat.
    diff_l := l1 - l2.
    "/ no precision is lost with long doubles!!

    q1 := QDouble fromFloat:1.0.
    q2 := QDouble fromFloat:0.99999.

    diff_q := q1 - q2.
    
    "
     self run:#test_03_subtract
     self new test_03_subtract
    "

    "Created: / 12-06-2017 / 23:12:00 / cg"
!

test_04_relops
    self assert:(1.0 = 1.0 asQDouble).
    self assert:(1.0 asQDouble = 1.0).
    self assert:(1.0 asQDouble = 1.0 asQDouble).

    self assert:(1 = 1 asQDouble).
    self assert:(1 asQDouble = 1).
    self assert:(1 asQDouble = 1 asQDouble).

    self assert:(1 = 1.0 asQDouble).
    self assert:(1.0 asQDouble = 1).
    self assert:(1.0 asQDouble = 1 asQDouble).
    
    self assert:(1.0 = 1 asQDouble).
    self assert:(1 asQDouble = 1.0).
    self assert:(1 asQDouble = 1.0 asQDouble).

    
    self deny:(1.0 = 1.1 asQDouble).
    self deny:(1.0 asQDouble = 1.1).
    self deny:(1.0 asQDouble = 1.1 asQDouble).

    self deny:(1 = 2 asQDouble).
    self deny:(1 asQDouble = 2).
    self deny:(1 asQDouble = 2 asQDouble).

    self deny:(1 = 2.0 asQDouble).
    self deny:(1.0 asQDouble = 2).
    self deny:(1.0 asQDouble = 2 asQDouble).

    self deny:(2.0 = 1 asQDouble).
    self deny:(2 asQDouble = 1.0).
    self deny:(2 asQDouble = 1.0 asQDouble).


    
    self assert:(1.0 < 1.1 asQDouble).
    self assert:(1.0 asQDouble < 1.1).
    self assert:(1.0 asQDouble < 1.1 asQDouble).

    self assert:(1 < 2 asQDouble).
    self assert:(1 asQDouble < 2).
    self assert:(1 asQDouble < 2 asQDouble).

    self assert:(1 < 2.0 asQDouble).
    self assert:(1.0 asQDouble < 2).
    self assert:(1.0 asQDouble < 2 asQDouble).

    self assert:(1.0 < 2 asQDouble).
    self assert:(1 asQDouble < 2.0).
    self assert:(1 asQDouble < 2.0 asQDouble).

    
    self deny:(1.0 < 1.0 asQDouble).
    self deny:(1.0 asQDouble < 1.0).
    self deny:(1.0 asQDouble < 1.0 asQDouble).

    self deny:(1 < 1 asQDouble).
    self deny:(1 asQDouble < 1).
    self deny:(1 asQDouble < 1 asQDouble).

    self deny:(1 < 1.0 asQDouble).
    self deny:(1.0 asQDouble < 1).
    self deny:(1.0 asQDouble < 1 asQDouble).

    self deny:(1.0 < 1 asQDouble).
    self deny:(1 asQDouble < 1.0).
    self deny:(1 asQDouble < 1.0 asQDouble).



    self assert:(2.0 > 1.1 asQDouble).
    self assert:(2.0 asQDouble > 1.1).
    self assert:(2.0 asQDouble > 1.1 asQDouble).

    self assert:(3 > 2 asQDouble).
    self assert:(3 asQDouble > 2).
    self assert:(3 asQDouble > 2 asQDouble).

    self assert:(3 > 2.0 asQDouble).
    self assert:(3.0 asQDouble > 2).
    self assert:(3.0 asQDouble > 2 asQDouble).

    self assert:(3.0 > 2 asQDouble).
    self assert:(3 asQDouble > 2.0).
    self assert:(3 asQDouble > 2.0 asQDouble).


    self deny:(1.0 > 3.0 asQDouble).
    self deny:(1.0 asQDouble > 3.0).
    self deny:(1.0 asQDouble > 3.0 asQDouble).

    self deny:(1 > 3 asQDouble).
    self deny:(1 asQDouble > 3).
    self deny:(1 asQDouble > 3 asQDouble).

    self deny:(1 > 3.0 asQDouble).
    self deny:(1.0 asQDouble > 3).
    self deny:(1.0 asQDouble > 3 asQDouble).

    self deny:(1.0 > 3 asQDouble).
    self deny:(1 asQDouble > 3.0).
    self deny:(1 asQDouble > 3.0 asQDouble).


    self assert:(1.0 <= 3.0 asQDouble).
    self assert:(1.0 asQDouble <= 3.0).
    self assert:(1.0 asQDouble <= 3.0 asQDouble).

    self assert:(1.0 <= 1.0 asQDouble).
    self assert:(1.0 asQDouble <= 1.0).
    self assert:(1.0 asQDouble <= 1.0 asQDouble).
    
    self assert:(2.0 >= 1.0 asQDouble).
    self assert:(2.0 asQDouble >= 1.0).
    self assert:(2.0 asQDouble >= 1.0 asQDouble).

    self assert:(1.0 >= 1.0 asQDouble).
    self assert:(1.0 asQDouble >= 1.0).
    self assert:(1.0 asQDouble >= 1.0 asQDouble).

    "
     self run:#test_03_subtract
     self new test_03_subtract
    "

    "Created: / 13-06-2017 / 17:11:37 / cg"
!

test_05_multiply
    |q1 q2 p|

    q1 := QDouble fromFloat:3.0. "/ DoubleArray(2.0 0.0 0.0 0.0)
    p := 2.0 * q1.

    self assert:(p d0 = 6.0).
    self assert:(p d1 = 0.0).
    self assert:(p d2 = 0.0).
    self assert:(p d3 = 0.0).
    self assert:(p = 6.0).
    self assert:(6.0 = p).

    q1 := QDouble fromFloat:2.0. "/ DoubleArray(2.0 0.0 0.0 0.0)
    p := q1 * 3.0.

    self assert:(p d0 = 6.0).
    self assert:(p d1 = 0.0).
    self assert:(p d2 = 0.0).
    self assert:(p d3 = 0.0).
    self assert:(p = 6.0).
    self assert:(6.0 = p).

    q1 := QDouble fromFloat:2.0. "/ DoubleArray(2.0 0.0 0.0 0.0)
    q2 := QDouble fromFloat:3.0. "/ DoubleArray(3.0 0.0 0.0 0.0)
    p := q1 * q2.
    
    self assert:(p d0 = 6.0).
    self assert:(p d1 = 0.0).
    self assert:(p d2 = 0.0).
    self assert:(p d3 = 0.0).
    self assert:(p = 6.0).
    self assert:(6.0 = p).
    
    "
     self run:#test_05_multiply
     self new test_05_multiply
    "

    "Created: / 19-06-2017 / 16:58:29 / cg"
!

test_06_exp
    |f1 q1|

    f1 := 1.0 exp.
    q1 := 1.0 asQDouble exp.

    self assert:(q1 d0 = f1).

    "
     self run:#test_06_exp
     self new test_06_exp
    "

    "Created: / 19-06-2017 / 17:58:08 / cg"
! !

!QDoubleTests class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !