On Dec 14, 2013, at 7:29 PM, Bradley Lucier lucier@math.purdue.edu wrote:
On 12/10/2013 10:27 PM, Marc Feeley wrote:
Moreover, it is important to check that the primitive functions raise exceptions correctly. To give you an idea I have added unit tests for fx+ and fl+. Here's the unit test for fx+:
(check-exn type-exception? (lambda () (fx+ 1/2))) (check-exn type-exception? (lambda () (fx+ 1/2 9))) (check-exn type-exception? (lambda () (fx+ 9 1/2))) (check-exn type-exception? (lambda () (fx+ 1/2 3 9))) (check-exn type-exception? (lambda () (fx+ 3 1/2 9))) (check-exn type-exception? (lambda () (fx+ 3 9 1/2)))
(check-exn fixnum-overflow-exception? (lambda () (fx+ ##max-fixnum 1))) (check-exn fixnum-overflow-exception? (lambda () (fx+ ##min-fixnum -1)))
How would one deal with this situation:
firefly:~/programs/gambit/marc/gambit> gsi Gambit v4.7.1
(atan +i)
*** ERROR IN (console)@1.1 -- (Argument 1) Out of range (atan +i) 1>
(atan -i)
*** ERROR IN ##atan -- (Argument 1) Out of range (log 0) 1>
where an "Out of range" exception is raised, but for the wrong function.
Brad
I have added a check-tail-exn to verify that the exception is raised in tail position. This should be the case of all primitives, so check-tail-exn should be used almost exclusively in all the unit tests. For example:
(check-tail-exn range-exception? (lambda () (atan -i)))
Marc