author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Wed, 29 Jun 2016 21:40:53 +0100 | |
branch | jv |
changeset 1499 | 26a16a04219b |
parent 1072 | ee32c0daddfb |
child 1500 | d406a10b2965 |
permissions | -rw-r--r-- |
1499
26a16a04219b
Package renamed from exept:regression to stx:goodies/regression. Hooray!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
1072
diff
changeset
|
1 |
"{ Package: 'stx:goodies/regression' }" |
242 | 2 |
|
3 |
"{ NameSpace: RegressionTests }" |
|
4 |
||
5 |
TestCase subclass:#NumberTest |
|
6 |
instanceVariableNames:'a b' |
|
7 |
classVariableNames:'' |
|
8 |
poolDictionaries:'' |
|
1072 | 9 |
category:'tests-Regression-Numbers' |
242 | 10 |
! |
11 |
||
12 |
||
13 |
!NumberTest methodsFor:'accessing'! |
|
14 |
||
15 |
a |
|
16 |
^ a |
|
17 |
! |
|
18 |
||
19 |
a:something |
|
20 |
a := something. |
|
21 |
! |
|
22 |
||
23 |
b |
|
24 |
^ b |
|
25 |
! |
|
26 |
||
27 |
b:something |
|
28 |
b := something. |
|
29 |
! ! |
|
30 |
||
670 | 31 |
!NumberTest methodsFor:'running'! |
327 | 32 |
|
670 | 33 |
tearDown |
34 |
Class withoutUpdatingChangesDo:[ |
|
35 |
self class removeSelector:#testEQ |
|
36 |
]. |
|
327 | 37 |
! ! |
38 |
||
315 | 39 |
!NumberTest methodsFor:'tests-concrete bugs'! |
242 | 40 |
|
41 |
test_eqNumberBug |
|
42 |
"reported 09-09-2004; |
|
43 |
stc generated wrong code for some inlined = - compare (shame)." |
|
44 |
||
45 |
Class withoutUpdatingChangesDo:[ |
|
610 | 46 |
self class |
47 |
compile: |
|
242 | 48 |
'testEQ |
49 |
a = b ifTrue:[^ false]. |
|
50 |
^ true. |
|
51 |
' |
|
610 | 52 |
classified:'temporary'. |
242 | 53 |
]. |
54 |
||
55 |
self assert: ( |
|
56 |
(self |
|
610 | 57 |
a:0; |
58 |
b:0) testEQ ) == false. |
|
242 | 59 |
|
60 |
self assert: ( |
|
61 |
(self |
|
610 | 62 |
a:0; |
63 |
b:0.0) testEQ ) == false. |
|
242 | 64 |
|
65 |
self assert: ( |
|
66 |
(self |
|
610 | 67 |
a:0.0; |
68 |
b:0) testEQ ) == false. |
|
242 | 69 |
|
70 |
self assert: ( |
|
71 |
(self |
|
610 | 72 |
a:0.0; |
73 |
b:0.0) testEQ ) == false. |
|
242 | 74 |
|
75 |
Class withoutUpdatingChangesDo:[ |
|
610 | 76 |
Compiler stcCompileMethod:(self class compiledMethodAt:#testEQ). |
242 | 77 |
]. |
78 |
||
79 |
self assert: ( |
|
80 |
(self |
|
610 | 81 |
a:0; |
82 |
b:0) testEQ ) == false. |
|
242 | 83 |
|
84 |
self assert: ( |
|
85 |
(self |
|
610 | 86 |
a:0; |
87 |
b:0.0) testEQ ) == false. |
|
242 | 88 |
|
89 |
self assert: ( |
|
90 |
(self |
|
610 | 91 |
a:0.0; |
92 |
b:0) testEQ ) == false. |
|
242 | 93 |
|
94 |
self assert: ( |
|
95 |
(self |
|
610 | 96 |
a:0.0; |
97 |
b:0.0) testEQ ) == false. |
|
242 | 98 |
|
99 |
Class withoutUpdatingChangesDo:[ |
|
610 | 100 |
self class removeSelector:#testEQ |
242 | 101 |
]. |
102 |
||
103 |
" |
|
104 |
self new test_eqNumberBug |
|
105 |
" |
|
106 |
! ! |
|
107 |
||
327 | 108 |
!NumberTest methodsFor:'tests-conversion-rounding'! |
109 |
||
110 |
test_conversion |
|
111 |
"reported as Bug 388 |
|
112 |
Current implementation neither truncate nor round to nearest Floating point |
|
113 |
value, it just accumulate round off errors." |
|
114 |
||
115 |
||
116 |
self assert: 16r1FFFFFFFFFFFF0801 asDouble ~= 16r1FFFFFFFFFFFF0800 asDouble. |
|
117 |
"this test is on 65 bits" |
|
118 |
||
119 |
self assert: 16r1FFFFFFFFFFFF0802 asDouble ~= 16r1FFFFFFFFFFFF0800 asDouble. |
|
120 |
"this test is on 64 bits" |
|
121 |
||
122 |
self assert: 16r1FFFFFFFFFFF1F800 asDouble = 16r1FFFFFFFFFFF20000 asDouble. |
|
123 |
"nearest even is upper" |
|
124 |
self assert: 16r1FFFFFFFFFFFF0800 asDouble = 16r1FFFFFFFFFFFF0000 asDouble. |
|
125 |
"nearest even is lower" |
|
126 |
||
127 |
"Created: / 24-10-2006 / 15:31:20 / cg" |
|
128 |
! ! |
|
129 |
||
309 | 130 |
!NumberTest methodsFor:'tests-reading'! |
131 |
||
132 |
testReadFrom |
|
133 |
self assert: 1.0e-14 = (Number readFrom: '1.0e-14'). |
|
134 |
||
315 | 135 |
self assert: ('1' asNumber = 1). |
136 |
self assert: ('10' asNumber = 10). |
|
137 |
||
138 |
self assert: ('-1' asNumber = -1). |
|
139 |
self assert: ('-10' asNumber = -10). |
|
140 |
||
141 |
self assert: ('1e' asNumber = 1). |
|
142 |
self assert: ('1e1' asNumber = 10). |
|
143 |
self assert: ('1e10' asNumber = 10000000000). |
|
144 |
||
145 |
self assert: ('-1e' asNumber = -1). |
|
146 |
self assert: ('-1e1' asNumber = -10). |
|
147 |
self assert: ('-1e10' asNumber = -10000000000). |
|
148 |
||
149 |
self assert: ('1.0e' asNumber = 1.0). |
|
150 |
self assert: ('1.0e1' asNumber = 10.0). |
|
151 |
self assert: ('1.0e10' asNumber = 10000000000.0). |
|
152 |
||
153 |
self assert: ('-1.0e' asNumber = -1.0). |
|
154 |
self assert: ('-1.0e1' asNumber = -10.0). |
|
155 |
self assert: ('-1.0e10' asNumber = -10000000000.0). |
|
156 |
||
311 | 157 |
self assert: ('22.2' asNumber = 22.2). |
158 |
self assert: ('-22.2' asNumber = -22.2). |
|
159 |
||
309 | 160 |
Smalltalk isSmalltalkX ifTrue:[ |
610 | 161 |
"/ st/x requires this: |
311 | 162 |
|
610 | 163 |
self assert: ((Number readSmalltalkSyntaxFrom:'10r22.2') = 22.2). |
164 |
self assert: ((Number readSmalltalkSyntaxFrom:'10r22.2s5') = 22.2). |
|
311 | 165 |
|
610 | 166 |
self assert: ((Number readSmalltalkSyntaxFrom:'10r-22.2') = -22.2). |
167 |
self assert: ((Number readSmalltalkSyntaxFrom:'10r-22.2s5') = -22.2). |
|
311 | 168 |
|
610 | 169 |
self assert: 2r1e26 = (Number readSmalltalkSyntaxFrom: '2r1e26'). |
309 | 170 |
] ifFalse:[ |
610 | 171 |
"/ squeak allows this: |
172 |
self assert: 2r1e26 = (Number readFrom: '2r1e26'). |
|
311 | 173 |
|
610 | 174 |
self assert: ('10r22.2' asNumber = 22.2). |
175 |
self assert: ('10r22.2s5' asNumber = 22.2). |
|
311 | 176 |
|
610 | 177 |
self assert: ('10r-22.2' asNumber = -22.2). |
178 |
self assert: ('10r-22.2s5' asNumber = -22.2). |
|
309 | 179 |
]. |
180 |
! ! |
|
181 |
||
242 | 182 |
!NumberTest class methodsFor:'documentation'! |
183 |
||
184 |
version |
|
185 |
^ '$Header$' |
|
186 |
! ! |
|
1072 | 187 |