The fptest package

[Tags:bsd3, program, test]

=A series of floating point conformance tests for Haskell. Currently implemented are: ==QTrial QTrial is the floating point benchmark described in /IEEE Standard 754 for Binary Floating-Point Arithmetic by Prof. W. Kahan <http:www.eecs.berkeley.edu~wkahanieee754statusIEEE754.PDF> This can be run with a simple cabal run qtrial ==FPTest FPTest runs a sequence of floating point test vectors generated by IBM's FPGen Floating-Point Test Generator. This is done in two ways: * By interpreting the tests * By translating the tests into a Haskell HUnit test suite script that can just be executed using runhaskell The IBM test vectors are available from here. You will, most likely, want the binary tests unless you have a decimal machine. Only 32-bit float tests are provided (not 64-bit double ones) although FPTest supports Doubles. The syntax of the test vectors can be founds here or in Chapter 4 of <https:www.research.ibm.comhaifaprojectsverificationfpgenpapersieee-test-suite-v2.pdfs Floating-Point Test-Suite for IEEE>


[Skip to Readme]

Properties

Versions 0.2.1.0, 0.2.2.0 (info)
Dependencies base (==4.7.*), HUnit (==1.2.*), parsec (==3.1.*), parsec3-numbers (==0.0.*), QuickCheck (==2.7.*), test-framework (==0.8.*), test-framework-hunit (==0.3.*), test-framework-quickcheck2 (==0.3.*) [details]
License BSD3
Copyright 2014 John Pavel and 2004 IBM Corp
Author John Pavel
Maintainer jrp@dial.pipex.com
Category Math
Home page https://github.com/jrp2014/fptest
Bug tracker https://github.com/jrp2014/fptest/issues
Source repository head: git clone https://github.com/jrp2014/fptest.git -b master
Uploaded Mon Sep 8 21:30:14 UTC 2014 by jrp
Distributions NixOS:0.2.1.0
Downloads 483 total (1 in the last 30 days)
Votes
0 []
Status Docs not available [build log]
Last success reported on 2015-05-28 [all 6 reports]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for fptest

Readme for fptest-0.2.1.0

IEEE754 conformance tests for Haskell

This project contains floating point conformance tests in Haskell.

There are two sets of tests so far:

##QTrial## QTrial is the floating point benchmark described in IEEE Standard 754 for Binary Floating-Point Arithmetic by Prof. W. Kahan Download link

You should just be able to cabal run from the main directory or runhaskell QTrial.hs from src.

An extract from the result is:

Principal Tests:

Results for Float:
r = 4098.0 produces 12.0 and 12.0 sig. bits
r = 4098.25 fails: root 0.99989897 isn't at least 1
r = 4097.004 produces 12.0 and 11.999298 sig. bits
r =1.6777218e7 is too big for qtrail
r =1.6777218e7 is too big for qtrail
r =1.677722e7 is too big for qtrail
r =9.4906264e7 is too big for qtrail
r =9.4906264e7 is too big for qtrail
r =2.6843546e8 is too big for qtrail
r =2.6843546e8 is too big for qtrail
r =2.6843546e8 is too big for qtrail
r =2.6843546e8 is too big for qtrail
r =2.6843546e8 is too big for qtrail
r =4.2949673e9 is too big for qtrail
r =4.2949673e9 is too big for qtrail
Worst accuracy is 11.999298 sig. bits


Results for Double:
r = 4098.0 produces Infinity and Infinity sig. bits
r = 4098.25 produces Infinity and 53.0 sig. bits
r = 4097.00390625 produces Infinity and 53.451178091541244 sig. bits
r = 1.6777218e7 produces Infinity and Infinity sig. bits
r = 1.677721825e7 produces Infinity and 75.0 sig. bits
r = 1.6777219e7 produces Infinity and 71.0 sig. bits
r = 9.4906267e7 produces 26.499999994288153 and 26.499999986733027 sig. bits
r = 9.490626725e7 fails: root 0.999999995635551 isn't at least 1
r = 2.684354505e8 produces 28.0 and 27.999999919383132 sig. bits
r = 2.684354515e8 produces 28.0 and 27.99999993013205 sig. bits
r = 2.68435458e8 produces 28.0 and 28.0 sig. bits
r = 2.6843545825e8 produces 28.0 and 28.00000000268723 sig. bits
r = 2.6843545700000006e8 produces 28.0 and 27.999999989251084 sig. bits
r = 4.294967298e9 produces 32.0 and 32.0 sig. bits
r = 4.29496729825e9 produces 32.0 and 32.00000000016795 sig. bits
Worst accuracy is 26.499999986733027 sig. bits

This is fine for the Float cases, but the test illustrates an issue with the Double case.

##FPTest##

** FPTest is being refactored so that it can be run in cabal **

FPTest runs a sequence of floating point test vectors generated by IBM's FPGen Floating-Point Test Generator.

This is done in two ways:

  • By interpreting the tests
  • By translating the tests into a Haskell HUnit test suite script that can just be run using runhaskell

The IBM test vectors are contained in the test_suite directory, but you will want to get the latest version from the link above.

You will, most likely, want the binary tests unless you have a decimal machine. Only 32-bit float tests are provided (not 64-bit double ones).

The syntax of the test vectors can be found here or in Chapter 4 of Floating-Point Test-Suite for IEEE

The test suite that IBM supplies actually stretches the spec somewhat. For example, it also uses lower case versions of some specification elements.