PackageDescription: SYSEXT-NumberParserTest


SYSEXT - Number Parser Test

Last published: September 11, 2015 by 'nice'

Defines 2 Classes
Extends 2 Classes


NumberParserTest provide some tests for NumberParser.

Warning: some tests are expected to fail if SYSBUG-FloatConversion fixes are not applied.
This is because #asFloat and #asDouble won't answer the nearest Float/Double to a Fraction or a LargeInteger

PROFILE:
The cost of rounding to nearest float is not excessive:
| tmp |
tmp := '3.1415926535898d0'.
Array
with: [100000 timesRepeat: [VWNumberParser parse: tmp readStream]] timeToRun
with: [100000 timesRepeat: [Number readFrom: tmp readStream]] timeToRun.

[
| tmp |
tmp := '3.1415926535898d0'.
1000000 timesRepeat:
[VWNumberParser parse: tmp readStream.
Number readFrom: tmp readStream].
] timeProfile.
[
| tmp |
tmp := '3.1415926535898d0'.
1000000 timesRepeat:
[VWNumberParser parse: tmp readStream.
Number readFrom: tmp readStream].
] allocationProfile.

The cost of LargeInteger arithmetic is greatly reduced:
[
| tmp |
tmp := 100 factorial printString.
1000 timesRepeat:
[10 timesRepeat: [VWNumberParser parse: tmp readStream].
10 timesRepeat: [Number readFrom: tmp readStream]].
] timeProfile.
[
| tmp |
tmp := 100 factorial printString.
1000 timesRepeat:
[10 timesRepeat: [VWNumberParser parse: tmp readStream].
10 timesRepeat: [Number readFrom: tmp readStream]].
] allocationProfile.

AUTHOR: nicolas cellier , any question, remarks, etc... go to this email.
LICENSE: (MIT) see Copyright property