Added stress test: libmpfr C struct accessor vs. Racket struct accessor

This commit is contained in:
Neil Toronto 2012-12-06 16:20:02 -07:00
parent cc8bd4f294
commit f607a3b061
2 changed files with 56 additions and 1 deletions

View File

@ -44,7 +44,18 @@
string->bigfloat string->bigfloat
;; Main constructor ;; Main constructor
bf bf
bigfloat-deserialize-info) bigfloat-deserialize-info
;; Low-level stuff
mpfr-lib
get-mpfr-fun
_rnd_t
_prec_t
_sign_t
_exp_t
_mpfr_size_limb_t
_mpfr
_mpfr-pointer
(struct-out mpfr))
;; Arithmetic, comparison, and other functions are provided by the macros that create them ;; Arithmetic, comparison, and other functions are provided by the macros that create them

View File

@ -0,0 +1,44 @@
#lang racket/base
(require ffi/unsafe
tests/stress
math/private/bigfloat/mpfr)
(define mpfr-get-exp (get-mpfr-fun 'mpfr_get_exp (_fun _mpfr-pointer -> _exp_t)))
(define mpfr-get-prec (get-mpfr-fun 'mpfr_get_prec (_fun _mpfr-pointer -> _prec_t)))
(define mpfr-get-signbit (get-mpfr-fun 'mpfr_signbit (_fun _mpfr-pointer -> _int)))
(define (mpfr-signbit x)
(if ((mpfr-sign x) . < . 0) 1 0))
(define n 1000000)
(let ([x (bf 2)])
(stress
20
["mpfr-get-prec (FFI accessor)"
(for ([_ (in-range n)])
(mpfr-get-prec x))]
["mpfr-prec (Racket accessor)"
(for ([_ (in-range n)])
(mpfr-prec x))]))
(let ([x (bf 2)])
(stress
20
["mpfr-get-exp (FFI accessor)"
(for ([_ (in-range n)])
(mpfr-get-exp x))]
["mpfr-exp (Racket accessor)"
(for ([_ (in-range n)])
(mpfr-exp x))]))
(let ([x (bf 2)])
(stress
20
["mpfr-get-signbit (FFI accessor)"
(for ([_ (in-range n)])
(mpfr-get-signbit x))]
["mpfr-signbit (Racket accessor)"
(for ([_ (in-range n)])
(mpfr-signbit x))]))