typed-racket/typed-racket-test/succeed/fixnum.rkt
2014-12-16 10:07:25 -05:00

41 lines
1.1 KiB
Racket

#lang typed/scheme
(require
scheme/fixnum)
;; Test the all the fixnum operations have been wrapped with types
;; We aren't really testing the semantics of the
;; operations. The checks are just to catch anything that is
;; really badly wrong.
(: check (All (a) ((a a -> Boolean) a a -> Boolean)))
;; Simple check function as RackUnit doesn't work in Typed Scheme (yet)
(define (check f a b)
(if (f a b)
#t
(error (format "Check (~a ~a ~a) failed" f a b))))
(check = (fx+ 1 2) 3)
(check = (fx- 2 3) -1)
(check = (fx* 2 4) 8)
(check = (fxquotient 4 2) 2)
(check = (fxremainder 4 3) 1)
(check = (fxmodulo 10 3) 1)
(check = (fxabs -1) 1)
(check = (fxand 2 4) (bitwise-and 2 4))
(check = (fxior 2 4) (bitwise-ior 2 4))
(check = (fxxor 3 5) (bitwise-xor 3 5))
(check = (fxnot 4) (bitwise-not 4))
(check = (fxlshift 4 2) (arithmetic-shift 4 2))
(check = (fxrshift 32 2) (arithmetic-shift 32 -2))
(check equal? (fx= 1 1) #t)
(check equal? (fx< 2 4) #t)
(check equal? (fx> 4 2) #t)
(check equal? (fx<= 2 2) #t)
(check equal? (fx>= 4 4) #t)
(check equal? (fxmin 3 2) 2)
(check equal? (fxmax 3 4) 4)