Last change
on this file since 6c1585f was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago |
initial commit
|
-
Property mode
set to
100644
|
File size:
2.1 KB
|
Rev | Line | |
---|
[6a3a178] | 1 | # Parser function for floating point hexadecimals
|
---|
| 2 |
|
---|
| 3 | [![license](https://img.shields.io/github/license/maurobringolf/@webassemblyjs/floating-point-hex-parser.svg)]()
|
---|
| 4 | [![GitHub last commit](https://img.shields.io/github/last-commit/maurobringolf/@webassemblyjs/floating-point-hex-parser.svg)]()
|
---|
| 5 | [![npm](https://img.shields.io/npm/v/@webassemblyjs/floating-point-hex-parser.svg)]()
|
---|
| 6 |
|
---|
| 7 | > A JavaScript function to parse floating point hexadecimals as defined by the [WebAssembly specification](https://webassembly.github.io/spec/core/text/values.html#text-hexfloat).
|
---|
| 8 |
|
---|
| 9 | ## Usage
|
---|
| 10 |
|
---|
| 11 | ```javascript
|
---|
| 12 | import parseHexFloat from '@webassemblyjs/floating-point-hex-parser'
|
---|
| 13 |
|
---|
| 14 | parseHexFloat('0x1p-1') // 0.5
|
---|
| 15 | parseHexFloat('0x1.921fb54442d18p+2') // 6.283185307179586
|
---|
| 16 | ```
|
---|
| 17 |
|
---|
| 18 | ## Tests
|
---|
| 19 |
|
---|
| 20 | This module is tested in two ways. The first one is through a small set of test cases that can be found in [test/regular.test.js](https://github.com/maurobringolf/@webassemblyjs/floating-point-hex-parser/blob/master/test/regular.test.js). The second one is non-deterministic (sometimes called *fuzzing*):
|
---|
| 21 |
|
---|
| 22 | 1. Generate a random IEEE754 double precision value `x`.
|
---|
| 23 | 1. Compute its representation `y` in floating point hexadecimal format using the C standard library function `printf` since C supports this format.
|
---|
| 24 | 1. Give both values to JS testcase and see if `parseHexFloat(y) === x`.
|
---|
| 25 |
|
---|
| 26 | By default one `npm test` run tests 100 random samples. If you want to do more, you can set the environment variable `FUZZ_AMOUNT` to whatever number of runs you'd like. Because it uses one child process for each sample, it is really slow though. For more details about the randomized tests see [the source](https://github.com/maurobringolf/@webassemblyjs/floating-point-hex-parser/tree/master/test/fuzzing).
|
---|
| 27 |
|
---|
| 28 | ## Links
|
---|
| 29 |
|
---|
| 30 | * [maurobringolf.ch/2017/12/hexadecimal-floating-point-notation/](https://maurobringolf.ch/2017/12/hexadecimal-floating-point-notation/)
|
---|
| 31 |
|
---|
| 32 | * [github.com/xtuc/js-webassembly-interpreter/issues/32](https://github.com/xtuc/js-webassembly-interpreter/issues/32)
|
---|
| 33 |
|
---|
| 34 | * [github.com/WebAssembly/design/issues/292](https://github.com/WebAssembly/design/issues/292)
|
---|
Note:
See
TracBrowser
for help on using the repository browser.