RegressionTests__ComplexTest.st
author Claus Gittinger <cg@exept.de>
Fri, 12 Nov 2004 13:24:54 +0100
changeset 256 7009adb85fbb
parent 192 403ba5cd66c4
child 308 0113f7be0cf9
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
192
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'exept:regression' }"
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: RegressionTests }"
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
TestCase subclass:#ComplexTest
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:''
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:''
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	poolDictionaries:''
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	category:'tests-Regression'
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
!ComplexTest methodsFor:'tests'!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
testAddition
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	| c1 c2 |
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	self shouldnt: [ c1 := Complex real: 1 imaginary: 2 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	self shouldnt: [ c2 := Complex real: 3 imaginary: 4 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	self should: [ (c1 + c2) = (Complex real: 4 imaginary: 6) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
testCreation
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
        | c |
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
        false ifTrue:[
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
            "cg: I dont think this has to be known outside complex"
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
            "i.e. should it really be allowed to create complex numbers with new ?"
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
            self should: [ (c := Complex new) realPart = 0 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
            self should: [ c imaginaryPart = 0 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
        ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
        self should: [ (c := Complex real: 1 imaginary: 2) realPart = 1 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
        self should: [ c imaginaryPart = 2 ]
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
testDivision
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
	| c1 c2 |
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
	self shouldnt: [ c1 := Complex real: 2 imaginary: 2 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	self shouldnt: [ c2 := Complex real: 3 imaginary: 6 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	self should: [ (c1 / c1) = (Complex real: 1 imaginary: 0) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	self should: [ (c1 / c2) = (Complex real: 2/5 imaginary: (-2/15)) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	self should: [ (c2 / c1) = (Complex real: 9/4 imaginary: 3/4) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	self should: [ c2 / 3 = (Complex real: 1 imaginary: 2) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	self should: [ c1 / 2 = (Complex real: 1 imaginary: 1) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
testEquality
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	self should: [ 3 = (Complex real: 3 imaginary: 0) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	self should: [ (Complex real: 3 imaginary: 0) = 3 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	self should: [ 3.0 = (Complex real: 3 imaginary: 0) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	self should: [ (Complex real: 3 imaginary: 0) = 3.0 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	self shouldnt: [ 3 = (Complex real: 3 imaginary: 1) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
	self shouldnt: [ (Complex real: 3 imaginary: 1) = 3 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
	self shouldnt: [ 3.0 = (Complex real: 3 imaginary: 1) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
	self shouldnt: [ (Complex real: 3 imaginary: 1) = 3.0 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
	self should: [ 3 ~= (Complex real: 3 imaginary: 1) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
	self should: [ (Complex real: 3 imaginary: 1) ~= 3 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
	self should: [ 3.0 ~= (Complex real: 3 imaginary: 1) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	self should: [ (Complex real: 3 imaginary: 1) ~= 3.0 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
testModulus
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	| c1 c2 |
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
	"Test case where |a| < |b| in complex number (a + ib)."
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
	self shouldnt: [ c1 := Complex real: 2 imaginary: 3 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
	self should: [ c1 modulus = (3 * ((1 + ((2 / 3) * (2 / 3))) sqrt)) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	"Test case where |a| >= |b| in complex number (a + ib)."
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
	self shouldnt: [ c2 := Complex real: 4 imaginary: -2 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
	self should: [ c2 modulus = (4 * ((1 + ((-2 / 4) * (-2 / 4))) sqrt)) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
testMultiplication
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	| c1 c2 |
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
	self shouldnt: [ c1 := Complex real: 1 imaginary: 2 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	self shouldnt: [ c2 := Complex real: 3 imaginary: 4 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	self should: [ (c1 * c2) = (Complex real: -5 imaginary: 10) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
	self should: [ (c1 * Complex zero) = Complex zero ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
	self should: [ c1 * 5 = (Complex real: 5 imaginary: 10) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	self should: [ c1 * 1.1 = (Complex real: 1.1 imaginary: 2.2) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
	self should: [ c1 * (2/3) = (Complex real: 2/3 imaginary: 4/3) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
testRaisedTo
256
7009adb85fbb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 192
diff changeset
   100
        | c |
192
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
256
7009adb85fbb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 192
diff changeset
   102
        self shouldnt: [ c := Complex real: 3 imaginary: 2 ] raise: Exception.
7009adb85fbb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 192
diff changeset
   103
        self assert:  ((c raisedTo: 2) = (c * c)).
7009adb85fbb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 192
diff changeset
   104
        self assert:  ((c raisedTo: 3) = (c * c * c)).
7009adb85fbb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 192
diff changeset
   105
        self assert:  ((c raisedTo: 4) = (c * c * c * c)).
192
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
testSqrt
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
        | c w |
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
        self shouldnt: [ c := Complex real: 0 imaginary: 0 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
        self should: [ c sqrt = 0 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
        self shouldnt: [ c := Complex real: 9 imaginary: 4 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
        "cg: that cannot be tested easily, due to rounding errors"
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
        "original" false ifTrue:[
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
            self should: [ w := 3 * (((1 + (1 + ((4/9) * (4/9))) sqrt) / 2) sqrt).
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
                            c sqrt = (Complex real: w imaginary: 4 / (2 * w)) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
        ] ifFalse:[
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
            self should: [ |t1 t2 epsilon|
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
                            w := 3 * (((1 + (1 + ((4/9) * (4/9))) sqrt) / 2) sqrt).
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
                            t1 := c sqrt.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
                            t2 := (Complex real: w imaginary: 4 / (2 * w)).
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
                            epsilon := 0.0000001.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
                            (t1 realPart - t2 realPart) < epsilon
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
                            and:[ (t1 imaginaryPart - t2 imaginaryPart) < epsilon ]
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
                         ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
        ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
        self shouldnt: [ c := Complex imaginary: -2 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
        "self should: [ c sqrt = (Complex real: 1 imaginary: -1) ].  Should be true, but rounding bites us..."
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
        self should: [ (c sqrt realPart - 1) abs < 1.0e-10 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
        self should: [ (c sqrt imaginaryPart + 1) abs < 1.0e-10 ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
testSubtraction
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
	| c1 c2 |
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	self shouldnt: [ c1 := Complex real: 1 imaginary: 2 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
	self shouldnt: [ c2 := Complex real: 3 imaginary: 4 ] raise: Exception.
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
	self should: [ (c1 - c2) = (Complex real: -2 imaginary: -2) ].
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
! !
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
!ComplexTest class methodsFor:'documentation'!
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
version
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    ^ '$Header$'
403ba5cd66c4 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
! !