41 lines
1.1 KiB
Racket
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)
|
|
|