RegressionTests__MetaNumbersTest.st
branchjv
changeset 1500 d406a10b2965
parent 1499 26a16a04219b
parent 1447 2351db93aa5b
equal deleted inserted replaced
1499:26a16a04219b 1500:d406a10b2965
    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.