Coverage report: /development/source/library/org/datagraph/spocq-shard/src/core/patches/sbcl-20150825.lisp
| Kind | Covered | All | % |
| expression | 48 | 57 | 84.2 |
| branch | 2 | 4 | 50.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;; -*- package: sb-kernel; -*-
3
(in-package :sb-kernel)
5
;; ensure that truncate treats unity rationals as whole
7
(SB-EXT:WITHOUT-PACKAGE-LOCKS
9
(defun truncate (number &optional (divisor 1))
10
(macrolet ((truncate-float (rtype)
11
`(let* ((float-div (coerce divisor ',rtype))
12
(res (%unary-truncate (/ number float-div))))
15
(* (coerce res ',rtype) float-div))))))
16
(number-dispatch ((number real) (divisor real))
17
((fixnum fixnum) (truncate number divisor))
18
(((foreach fixnum bignum) ratio)
19
(let ((q (truncate (* number (denominator divisor))
20
(numerator divisor))))
21
(values q (- number (* q divisor)))))
23
(bignum-truncate (make-small-bignum number) divisor))
24
((ratio (or float rational))
25
(when (eql (denominator number) 1)
26
(setf number (numerator number)))
27
(let ((q (truncate (numerator number)
28
(* (denominator number) divisor))))
29
(values q (- number (* q divisor)))))
31
(bignum-truncate number (make-small-bignum divisor)))
33
(bignum-truncate number divisor))
35
(((foreach single-float double-float)
36
(or rational single-float))
38
(let ((res (%unary-truncate number)))
39
(values res (- number (coerce res '(dispatch-type number)))))
40
(truncate-float (dispatch-type number))))
41
((double-float (or single-float double-float))
42
(truncate-float double-float))
43
((single-float double-float)
44
(truncate-float double-float))
45
(((foreach fixnum bignum ratio)
46
(foreach single-float double-float))
47
(truncate-float (dispatch-type divisor))))))