|
122 | 122 | end
|
123 | 123 |
|
124 | 124 | D 'Ft' do
|
125 |
| - Ft Math::PI, 3.141592 # default tolerance 0.00001 |
126 |
| - Ft! Math::PI, 3.14 |
127 |
| - Ft Math::PI, 3.14, 0.1 # tolerance for this line is 0.1 |
128 |
| - Ft Math::PI, 3.14, 0.01 |
129 |
| - Ft Math::PI, 3.14, 0.001 |
130 |
| - Ft! Math::PI, 3.14, 0.0001 |
| 125 | + D 'basic' do |
| 126 | + Ft 45.44332211, 45.443322110000000000001 |
| 127 | + Ft! 109.123456, 109.123457 # These are too close to be considered |
| 128 | + # essentially equal. |
| 129 | + end |
131 | 130 | D 'test values of massively differing magnitude' do
|
132 | 131 | a = 0.000000000837
|
133 | 132 | b = 0.0000000004315 # a and b are _not_ "essentially" equal
|
134 |
| - c = 100.000000000837 |
135 |
| - d = 100.0000000004315 # c and d _are_ "essentially" equal |
136 | 133 | Ft! a, b
|
137 | 134 | Ft! b, a
|
| 135 | + c = 100.000000000000837 |
| 136 | + d = 100.0000000000004315 # c and d _are_ "essentially" equal |
138 | 137 | Ft c, d
|
139 | 138 | Ft d, c
|
140 | 139 | end
|
| 140 | + D "anomolies like (1.1 - 1.0) does not equal 0.1" do |
| 141 | + Ft 1.1 - 1.0, 0.1 |
| 142 | + Ft 1.1 - 1.0 - 0.1, 0.0 |
| 143 | + Ft 0.1 + 0.1, 0.2 |
| 144 | + Ft 0.2 + 0.1, 0.3 # This doesn't work when using == |
| 145 | + Ft 0.3 + 0.1, 0.4 |
| 146 | + Ft 0.4 + 0.1, 0.5 |
| 147 | + Ft 0.5 + 0.1, 0.6 |
| 148 | + Ft 0.6 + 0.1, 0.7 |
| 149 | + Ft 0.7 + 0.1, 0.8 # Nor does this one |
| 150 | + Ft 0.8 + 0.1, 0.9 |
| 151 | + Ft 0.9 + 0.1, 1.0 |
| 152 | + end |
141 | 153 | D 'integer values' do
|
142 | 154 | Ft 4, 4
|
143 | 155 | Ft 4.0, 4
|
144 | 156 | Ft 4, 4.0
|
145 | 157 | Ft -13, -13
|
146 | 158 | Ft -13.0, -13
|
| 159 | + Ft! 4, 5 |
147 | 160 | end
|
148 | 161 | D 'zero' do
|
149 | 162 | Ft 0, 0
|
|
154 | 167 | Ft -1.1102230246251565e-16, 0.0
|
155 | 168 | end
|
156 | 169 | D 'numbers near zero' do
|
157 |
| - Ft 0, 0.00000000000124, 0.0000000001 |
158 |
| - Ft 0, 0.00000000000124, 0.00000000001 |
159 |
| - Ft 0, 0.00000000000124, 0.000000000001 |
160 |
| - Ft 0, 0.00000000000124, 0.0000000000001 |
161 |
| - # The next test fails but I don't know what we really should expect. |
162 |
| - # Ft! 0, 0.00000000000124, 1e-25 |
| 170 | + Ft! 0, 0.001 |
| 171 | + Ft! 0, 0.0001 |
| 172 | + Ft! 0, 0.00001 |
| 173 | + Ft! 0, 0.000001 |
| 174 | + Ft! 0, 0.0000001 |
| 175 | + Ft! 0, 0.00000001 |
| 176 | + Ft! 0, 0.000000001 |
| 177 | + Ft! 0, 0.0000000001 |
| 178 | + Ft! 0, 0.00000000001 |
| 179 | + Ft! 0, 0.000000000001 |
| 180 | + Ft! 0, 0.0000000000001 |
| 181 | + Ft! 0, 0.00000000000001 |
| 182 | + Ft 0, 0.000000000000001 # This is the first float that is |
| 183 | + Ft 0, 0.0000000000000001 # essentially equal to zero. |
| 184 | + Ft 0, 0.00000000000000001 |
| 185 | + Ft 0, 0.000000000000000001 |
163 | 186 | end
|
164 | 187 | D '(near) equal and negative' do
|
165 |
| - a = -2.0000051298352 |
166 |
| - b = -2.0000051298336 |
167 |
| - Ft a, b, 0.000000001 |
168 |
| - Ft b, a, 0.000000001 |
169 |
| - end |
170 |
| - D 'tiny numbers' do |
171 |
| - Ft 1.234567e-50, 1.234568e-50 |
172 |
| - Ft! 1.234567e-50, 1.234567e-51 |
173 |
| - end |
174 |
| - D 'huge numbers' do |
175 |
| - Ft 1.234567e50, 1.234568e50 |
176 |
| - Ft! 1.234567e50, 1.234567e51 |
| 188 | + a = -2.000000000051298352 |
| 189 | + b = -2.000000000051298336 |
| 190 | + Ft a, b |
| 191 | + Ft b, a |
| 192 | + end |
| 193 | + D "13th digit differs: not equal enough" do |
| 194 | + Ft! 1.234567890123e50, 1.23456789122e50 |
| 195 | + Ft! 1.234567890123e40, 1.23456789122e40 |
| 196 | + Ft! 1.234567890123e30, 1.23456789122e30 |
| 197 | + Ft! 1.234567890123e20, 1.23456789122e20 |
| 198 | + Ft! 1.234567890123e10, 1.23456789122e10 |
| 199 | + Ft! 1.234567890123e0, 1.23456789122e0 |
| 200 | + Ft! 1.234567890123e-10, 1.23456789122e-10 |
| 201 | + Ft! 1.234567890123e-20, 1.23456789122e-20 |
| 202 | + Ft! 1.234567890123e-30, 1.23456789122e-30 |
| 203 | + Ft! 1.234567890123e-40, 1.23456789122e-40 |
| 204 | + end |
| 205 | + D "14th digit differs: equal enough" do |
| 206 | + Ft 1.2345678901234e90, 1.2345678901233e90 |
| 207 | + Ft 1.2345678901234e90, 1.2345678901234e90 |
| 208 | + Ft 1.2345678901234e90, 1.2345678901235e90 |
| 209 | + Ft 1.2345678901234e50, 1.2345678901233e50 |
| 210 | + Ft 1.2345678901234e50, 1.2345678901234e50 |
| 211 | + Ft 1.2345678901234e50, 1.2345678901235e50 |
| 212 | + Ft 1.2345678901234e10, 1.2345678901233e10 |
| 213 | + Ft 1.2345678901234e10, 1.2345678901234e10 |
| 214 | + Ft 1.2345678901234e10, 1.2345678901235e10 |
| 215 | + Ft 1.2345678901234e0, 1.2345678901233e0 |
| 216 | + Ft 1.2345678901234e0, 1.2345678901234e0 |
| 217 | + Ft 1.2345678901234e0, 1.2345678901235e0 |
| 218 | + Ft 1.2345678901234e-10, 1.2345678901233e-10 |
| 219 | + Ft 1.2345678901234e-10, 1.2345678901234e-10 |
| 220 | + Ft 1.2345678901234e-10, 1.2345678901235e-10 |
| 221 | + Ft 1.2345678901234e-50, 1.2345678901233e-50 |
| 222 | + Ft 1.2345678901234e-50, 1.2345678901234e-50 |
| 223 | + Ft 1.2345678901234e-50, 1.2345678901235e-50 |
| 224 | + Ft 1.2345678901234e-90, 1.2345678901233e-90 |
| 225 | + Ft 1.2345678901234e-90, 1.2345678901234e-90 |
| 226 | + Ft 1.2345678901234e-90, 1.2345678901235e-90 |
| 227 | + D "but it can only be off by 1" do |
| 228 | + Ft! 1.2345678901234e90, 1.2345678901231e90 |
| 229 | + Ft! 1.2345678901234e90, 1.2345678901232e90 |
| 230 | + Ft! 1.2345678901234e90, 1.2345678901236e90 |
| 231 | + Ft! 1.2345678901234e90, 1.2345678901237e90 |
| 232 | + Ft! 1.2345678901234e10, 1.2345678901231e10 |
| 233 | + Ft! 1.2345678901234e10, 1.2345678901232e10 |
| 234 | + Ft! 1.2345678901234e10, 1.2345678901236e10 |
| 235 | + Ft! 1.2345678901234e10, 1.2345678901237e10 |
| 236 | + Ft! 1.2345678901234e-10, 1.2345678901231e-10 |
| 237 | + Ft! 1.2345678901234e-10, 1.2345678901232e-10 |
| 238 | + Ft! 1.2345678901234e-10, 1.2345678901236e-10 |
| 239 | + Ft! 1.2345678901234e-10, 1.2345678901237e-10 |
| 240 | + Ft! 1.2345678901234e-90, 1.2345678901231e-90 |
| 241 | + Ft! 1.2345678901234e-90, 1.2345678901232e-90 |
| 242 | + Ft! 1.2345678901234e-90, 1.2345678901236e-90 |
| 243 | + Ft! 1.2345678901234e-90, 1.2345678901237e-90 |
| 244 | + end |
| 245 | + end |
| 246 | + D "Ft does not allow epsilon argument" do |
| 247 | + E(AssertionSpecificationError) { Ft? 3.14159265, 3.1415, 0.01 } |
177 | 248 | end
|
178 | 249 | end
|
179 | 250 |
|
|
0 commit comments