16 "NaN in all avaliable formats." |
16 "NaN in all avaliable formats." |
17 |
17 |
18 |check| |
18 |check| |
19 |
19 |
20 check := [:nan | |
20 check := [:nan | |
21 self assert:( nan isNaN ). |
21 self assert:( nan isNaN ). |
22 self assert:( nan isFinite not ). |
22 self assert:( nan isFinite not ). |
23 |
23 |
24 nan isLimitedPrecisionReal ifTrue:[ |
24 nan isLimitedPrecisionReal ifTrue:[ |
25 self assert:( nan asFloat isNaN ). |
25 self assert:( nan asFloat isNaN ). |
26 self assert:( nan asLargeFloat isNaN ). |
26 self assert:( nan asLargeFloat isNaN ). |
27 self assert:( nan asShortFloat isNaN ). |
27 self assert:( nan asShortFloat isNaN ). |
28 self assert:( nan asLongFloat isNaN ). |
28 self assert:( nan asLongFloat isNaN ). |
29 ]. |
29 ]. |
30 |
30 |
31 "/ self assert:( nan asFraction isNaN ). |
31 "/ self assert:( nan asFraction isNaN ). |
32 "/ self assert:( nan asInteger isNaN ). |
32 "/ self assert:( nan asInteger isNaN ). |
33 self should:[ nan asFraction ] raise:DomainError. |
33 self should:[ nan asFraction ] raise:DomainError. |
34 self should:[ nan asInteger ] raise:DomainError. |
34 self should:[ nan asInteger ] raise:DomainError. |
35 |
35 |
36 self assert:( nan + 1 ) isNaN. |
36 self assert:( nan + 1 ) isNaN. |
37 self assert:( nan + 1.0 ) isNaN. |
37 self assert:( nan + 1.0 ) isNaN. |
38 self assert:( nan + 1.0 asShortFloat ) isNaN. |
38 self assert:( nan + 1.0 asShortFloat ) isNaN. |
39 self assert:( nan + 1.0 asLongFloat ) isNaN. |
39 self assert:( nan + 1.0 asLongFloat ) isNaN. |
40 self assert:( nan + 1.0 asLargeFloat ) isNaN. |
40 self assert:( nan + 1.0 asLargeFloat ) isNaN. |
41 |
41 |
42 self assert:( 1 + nan ) isNaN. |
42 self assert:( 1 + nan ) isNaN. |
43 self assert:( 1.0 + nan ) isNaN. |
43 self assert:( 1.0 + nan ) isNaN. |
44 self assert:( 1.0 asShortFloat + nan ) isNaN. |
44 self assert:( 1.0 asShortFloat + nan ) isNaN. |
45 self assert:( 1.0 asLongFloat + nan ) isNaN. |
45 self assert:( 1.0 asLongFloat + nan ) isNaN. |
46 self assert:( 1.0 asLargeFloat + nan ) isNaN. |
46 self assert:( 1.0 asLargeFloat + nan ) isNaN. |
47 |
47 |
48 self assert:( nan - 1 ) isNaN. |
48 self assert:( nan - 1 ) isNaN. |
49 self assert:( nan - 1.0 ) isNaN. |
49 self assert:( nan - 1.0 ) isNaN. |
50 self assert:( nan - 1.0 asShortFloat ) isNaN. |
50 self assert:( nan - 1.0 asShortFloat ) isNaN. |
51 self assert:( nan - 1.0 asLongFloat ) isNaN. |
51 self assert:( nan - 1.0 asLongFloat ) isNaN. |
52 self assert:( nan - 1.0 asLargeFloat ) isNaN. |
52 self assert:( nan - 1.0 asLargeFloat ) isNaN. |
53 |
53 |
54 self assert:( 1 - nan ) isNaN. |
54 self assert:( 1 - nan ) isNaN. |
55 self assert:( 1.0 - nan ) isNaN. |
55 self assert:( 1.0 - nan ) isNaN. |
56 self assert:( 1.0 asShortFloat - nan ) isNaN. |
56 self assert:( 1.0 asShortFloat - nan ) isNaN. |
57 self assert:( 1.0 asLongFloat - nan ) isNaN. |
57 self assert:( 1.0 asLongFloat - nan ) isNaN. |
58 self assert:( 1.0 asLargeFloat - nan ) isNaN. |
58 self assert:( 1.0 asLargeFloat - nan ) isNaN. |
59 |
59 |
60 self assert:( nan * 1 ) isNaN. |
60 self assert:( nan * 1 ) isNaN. |
61 self assert:( nan * 1.0 ) isNaN. |
61 self assert:( nan * 1.0 ) isNaN. |
62 self assert:( nan * 1.0 asShortFloat ) isNaN. |
62 self assert:( nan * 1.0 asShortFloat ) isNaN. |
63 self assert:( nan * 1.0 asLongFloat ) isNaN. |
63 self assert:( nan * 1.0 asLongFloat ) isNaN. |
64 self assert:( nan * 1.0 asLargeFloat ) isNaN. |
64 self assert:( nan * 1.0 asLargeFloat ) isNaN. |
65 |
65 |
66 self assert:( 1 * nan ) isNaN. |
66 self assert:( 1 * nan ) isNaN. |
67 self assert:( 1.0 * nan ) isNaN. |
67 self assert:( 1.0 * nan ) isNaN. |
68 self assert:( 1.0 asShortFloat * nan ) isNaN. |
68 self assert:( 1.0 asShortFloat * nan ) isNaN. |
69 self assert:( 1.0 asLongFloat * nan ) isNaN. |
69 self assert:( 1.0 asLongFloat * nan ) isNaN. |
70 self assert:( 1.0 asLargeFloat * nan ) isNaN. |
70 self assert:( 1.0 asLargeFloat * nan ) isNaN. |
71 |
71 |
72 self assert:( nan / 1 ) isNaN. |
72 self assert:( nan / 1 ) isNaN. |
73 self assert:( nan / 1.0 ) isNaN. |
73 self assert:( nan / 1.0 ) isNaN. |
74 self assert:( nan / 1.0 asShortFloat ) isNaN. |
74 self assert:( nan / 1.0 asShortFloat ) isNaN. |
75 self assert:( nan / 1.0 asLongFloat ) isNaN. |
75 self assert:( nan / 1.0 asLongFloat ) isNaN. |
76 self assert:( nan / 1.0 asLargeFloat ) isNaN. |
76 self assert:( nan / 1.0 asLargeFloat ) isNaN. |
77 |
77 |
78 self assert:( 1 / nan ) isNaN. |
78 self assert:( 1 / nan ) isNaN. |
79 self assert:( 1.0 / nan ) isNaN. |
79 self assert:( 1.0 / nan ) isNaN. |
80 self assert:( 1.0 asShortFloat / nan ) isNaN. |
80 self assert:( 1.0 asShortFloat / nan ) isNaN. |
81 self assert:( 1.0 asLongFloat / nan ) isNaN. |
81 self assert:( 1.0 asLongFloat / nan ) isNaN. |
82 self assert:( 1.0 asLargeFloat / nan ) isNaN. |
82 self assert:( 1.0 asLargeFloat / nan ) isNaN. |
83 ]. |
83 ]. |
84 |
84 |
85 check value:(0.0 uncheckedDivide: 0.0). |
85 check value:(0.0 uncheckedDivide: 0.0). |
86 check value:(0.0 asShortFloat uncheckedDivide: 0.0). |
86 check value:(0.0 asShortFloat uncheckedDivide: 0.0). |
87 check value:(0.0 asLongFloat uncheckedDivide: 0.0). |
87 check value:(0.0 asLongFloat uncheckedDivide: 0.0). |
96 test02_Inf |
96 test02_Inf |
97 "Infinity in all avaliable formats." |
97 "Infinity in all avaliable formats." |
98 |
98 |
99 |check posInf negInf| |
99 |check posInf negInf| |
100 |
100 |
101 check := |
101 check := |
102 [:v1 :v2 | |
102 [:v1 :v2 | |
103 |
103 |
104 posInf := v1 uncheckedDivide: v2. |
104 posInf := v1 uncheckedDivide: v2. |
105 negInf := v1 negated uncheckedDivide: v2. |
105 negInf := v1 negated uncheckedDivide: v2. |
106 |
106 |
107 v1 isLimitedPrecisionReal ifTrue:[ |
107 v1 isLimitedPrecisionReal ifTrue:[ |
108 self assert:( posInf isMemberOf:v1 class ). |
108 self assert:( posInf isMemberOf:v1 class ). |
109 self assert:( negInf isMemberOf:v1 class ). |
109 self assert:( negInf isMemberOf:v1 class ). |
110 ]. |
110 ]. |
111 self assert:( posInf isNaN not ). |
111 self assert:( posInf isNaN not ). |
112 self assert:( posInf isFinite not ). |
112 self assert:( posInf isFinite not ). |
113 self assert:( posInf isInfinite ). |
113 self assert:( posInf isInfinite ). |
114 self assert:( posInf positive ). |
114 self assert:( posInf positive ). |
115 self assert:( posInf negative not ). |
115 self assert:( posInf negative not ). |
116 self assert:( posInf isNegativeInfinity not). |
116 self assert:( posInf isNegativeInfinity not). |
117 self assert:( posInf isPositiveInfinity ). |
117 self assert:( posInf isPositiveInfinity ). |
118 |
118 |
119 self assert:( negInf isNaN not ). |
119 self assert:( negInf isNaN not ). |
120 self assert:( negInf isFinite not ). |
120 self assert:( negInf isFinite not ). |
121 self assert:( negInf isInfinite ). |
121 self assert:( negInf isInfinite ). |
122 self assert:( negInf positive not). |
122 self assert:( negInf positive not). |
123 self assert:( negInf negative ). |
123 self assert:( negInf negative ). |
124 self assert:( negInf isNegativeInfinity ). |
124 self assert:( negInf isNegativeInfinity ). |
125 self assert:( negInf isPositiveInfinity not ). |
125 self assert:( negInf isPositiveInfinity not ). |
126 |
126 |
127 self assert:( negInf + negInf = negInf). |
127 self assert:( negInf + negInf = negInf). |
128 self assert:( posInf + posInf = posInf). |
128 self assert:( posInf + posInf = posInf). |
129 "/ self assert:( negInf + posInf) isNaN. |
129 "/ self assert:( negInf + posInf) isNaN. |
130 self assert:( Number undefinedResultSignal ignoreIn:[ negInf + posInf]) isNaN. |
130 self assert:( Number undefinedResultSignal ignoreIn:[ negInf + posInf]) isNaN. |
131 "/ self should:[ negInf + posInf ] raise:Number undefinedResultSignal. |
131 "/ self should:[ negInf + posInf ] raise:Number undefinedResultSignal. |
132 self assert:( Number undefinedResultSignal ignoreIn:[ posInf + negInf]) isNaN. |
132 self assert:( Number undefinedResultSignal ignoreIn:[ posInf + negInf]) isNaN. |
133 |
133 |
134 self assert:( negInf - posInf = negInf). |
134 self assert:( negInf - posInf = negInf). |
135 self assert:( Number undefinedResultSignal ignoreIn:[ negInf - negInf]) isNaN. |
135 self assert:( Number undefinedResultSignal ignoreIn:[ negInf - negInf]) isNaN. |
136 self assert:( posInf - negInf = posInf). |
136 self assert:( posInf - negInf = posInf). |
137 self assert:( Number undefinedResultSignal ignoreIn:[ posInf - posInf]) isNaN. |
137 self assert:( Number undefinedResultSignal ignoreIn:[ posInf - posInf]) isNaN. |
138 |
138 |
139 self assert:( posInf + v1) = posInf. |
139 self assert:( posInf + v1) = posInf. |
140 self assert:( posInf - v1) = posInf. |
140 self assert:( posInf - v1) = posInf. |
141 self assert:( negInf + v1) = negInf. |
141 self assert:( negInf + v1) = negInf. |
142 self assert:( negInf - v1) = negInf. |
142 self assert:( negInf - v1) = negInf. |
143 |
143 |
144 self assert:( posInf + 1) = posInf. |
144 self assert:( posInf + 1) = posInf. |
145 self assert:( posInf + 1.0) = posInf. |
145 self assert:( posInf + 1.0) = posInf. |
146 self assert:( posInf + 1.0 asShortFloat) = posInf. |
146 self assert:( posInf + 1.0 asShortFloat) = posInf. |
147 self assert:( posInf + 1.0 asLongFloat) = posInf. |
147 self assert:( posInf + 1.0 asLongFloat) = posInf. |
148 self assert:( posInf + 1.0 asLargeFloat) = posInf. |
148 self assert:( posInf + 1.0 asLargeFloat) = posInf. |
149 self assert:( posInf + (1/2)) = posInf. |
149 self assert:( posInf + (1/2)) = posInf. |
150 self assert:( posInf + 100 factorial) = posInf. |
150 self assert:( posInf + 100 factorial) = posInf. |
151 |
151 |
152 self assert:( negInf + 1) = negInf. |
152 self assert:( negInf + 1) = negInf. |
153 self assert:( negInf + 1.0) = negInf. |
153 self assert:( negInf + 1.0) = negInf. |
154 self assert:( negInf + 1.0 asShortFloat) = negInf. |
154 self assert:( negInf + 1.0 asShortFloat) = negInf. |
155 self assert:( negInf + 1.0 asLongFloat) = negInf. |
155 self assert:( negInf + 1.0 asLongFloat) = negInf. |
156 self assert:( negInf + 1.0 asLargeFloat) = negInf. |
156 self assert:( negInf + 1.0 asLargeFloat) = negInf. |
157 self assert:( negInf + (1/2)) = negInf. |
157 self assert:( negInf + (1/2)) = negInf. |
158 "take care, that the factorial is not poitive infinite when converting" |
158 "take care, that the factorial is not poitive infinite when converting" |
159 self assert:( negInf + 20 factorial asShortFloat) = negInf. |
159 self assert:( negInf + 20 factorial asShortFloat) = negInf. |
160 |
160 |
161 self assert:( 1 + posInf) = posInf. |
161 self assert:( 1 + posInf) = posInf. |
162 self assert:( 1.0 + posInf) = posInf. |
162 self assert:( 1.0 + posInf) = posInf. |
163 self assert:( 1.0 asShortFloat + posInf) = posInf. |
163 self assert:( 1.0 asShortFloat + posInf) = posInf. |
164 self assert:( 1.0 asLongFloat + posInf) = posInf. |
164 self assert:( 1.0 asLongFloat + posInf) = posInf. |
165 self assert:( 1.0 asLargeFloat + posInf) = posInf. |
165 self assert:( 1.0 asLargeFloat + posInf) = posInf. |
166 self assert:( (1/2) + posInf) = posInf. |
166 self assert:( (1/2) + posInf) = posInf. |
167 self assert:( 20 factorial + posInf) = posInf. |
167 self assert:( 20 factorial + posInf) = posInf. |
168 |
168 |
169 self assert:( 1 + negInf) = negInf. |
169 self assert:( 1 + negInf) = negInf. |
170 self assert:( 1.0 + negInf) = negInf. |
170 self assert:( 1.0 + negInf) = negInf. |
171 self assert:( 1.0 asShortFloat + negInf) = negInf. |
171 self assert:( 1.0 asShortFloat + negInf) = negInf. |
172 self assert:( 1.0 asLongFloat + negInf) = negInf. |
172 self assert:( 1.0 asLongFloat + negInf) = negInf. |
173 self assert:( 1.0 asLargeFloat + negInf) = negInf. |
173 self assert:( 1.0 asLargeFloat + negInf) = negInf. |
174 self assert:( (1/2) + negInf) = negInf. |
174 self assert:( (1/2) + negInf) = negInf. |
175 "take care, that the factorial is not poitive infinite when converting" |
175 "take care, that the factorial is not poitive infinite when converting" |
176 self assert:( 20 factorial + negInf) = negInf. |
176 self assert:( 20 factorial + negInf) = negInf. |
177 ]. |
177 ]. |
178 |
178 |
179 check value: 1.0 value: 0.0. |
179 check value: 1.0 value: 0.0. |
180 check value: 1.0 asShortFloat value: 0.0 asShortFloat. |
180 check value: 1.0 asShortFloat value: 0.0 asShortFloat. |
181 check value: 1.0 asLongFloat value: 0.0 asLongFloat. |
181 check value: 1.0 asLongFloat value: 0.0 asLongFloat. |
182 check value: 1.0 asLargeFloat value: 0.0 asLargeFloat. |
182 check value: 1.0 asLargeFloat value: 0.0 asLargeFloat. |