truncate-aux.lsp 3.62 KB
Newer Older
1 2 3 4 5
;-*- Mode:     Lisp -*-
;;;; Author:   Paul Dietz
;;;; Created:  Wed Aug 20 05:15:17 2003
;;;; Contains: Aux. functions associated with tests of TRUNCATE

6

7 8 9

(defun truncate.1-fn ()
  (loop for n = (- (random 2000000000)
sds's avatar
sds committed
10 11 12 13 14 15 16 17 18 19 20 21 22
                   1000000000)
        for d = (1+ (random 10000))
        for vals = (multiple-value-list (truncate n d))
        for (q r) = vals
        for n2 = (+ (* q d) r)
        repeat 1000
        unless (and (eql (length vals) 2)
                    (integerp q)
                    (= n n2)
                    (integerp r)
                    (if (>= n 0) (< -1 r d)
                      (< (- d) r 1)))
        collect (list n d q r n2)))
23 24 25

(defun truncate.2-fn ()
  (loop for num = (random 1000000000)
sds's avatar
sds committed
26 27 28 29 30 31 32 33 34 35 36 37 38
        for denom = (1+ (random 1000))
        for n = (/ num denom)
        for d = (1+ (random 10000))
        for vals = (multiple-value-list (truncate n d))
        for (q r) = vals
        for n2 = (+ (* q d) r)
        repeat 1000
        unless (and (eql (length vals) 2)
                    (integerp q)
                    (<= 0 r)
                    (< r d)
                    (= n n2))
        collect (list n d q r n2)))
39 40 41

(defun truncate.3-fn (width)
  (loop for n = (- (random width) (/ width 2))
sds's avatar
sds committed
42 43 44 45 46 47 48 49 50 51 52 53
        for vals = (multiple-value-list (truncate n))
        for (q r) = vals
        for n2 = (+ q r)
        repeat 1000
        unless (and (eql (length vals) 2)
                    (integerp q)
                    (= n n2)
                    (if (>= n 0)
                        (and (<= 0 r) (< r 1))
                      (and (< -1 r) (<= r 0)))
                    )
        collect (list n q r n2)))
54 55 56

(defun truncate.7-fn ()
  (loop for numerator = (- (random 10000000000) 5000000000)
sds's avatar
sds committed
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
        for denominator = (1+ (random 100000))
        for n = (/ numerator denominator)
        for vals = (multiple-value-list (truncate n))
        for (q r) = vals
        for n2 = (+ q r)
        repeat 1000
        unless (and (eql (length vals) 2)
                    (integerp q)
                    (rationalp r)
                    (= n n2)
                    (if (>= n 0)
                        (and (<= 0 r) (< r 1))
                      (and (< -1 r) (<= r 0)))
                    )
        collect (list n q r n2)))
72 73 74

(defun truncate.8-fn ()
  (loop for num1 = (- (random 10000000000) 5000000000)
sds's avatar
sds committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
        for den1 = (1+ (random 100000))
        for n = (/ num1 den1)
        for num2 = (- (1+ (random 1000000)))
        for den2 = (1+ (random 1000000))
        for d = (/ num2 den2)
        for vals = (multiple-value-list (truncate n d))
        for (q r) = vals
        for n2 = (+ (* q d) r)
        repeat 1000
        unless (and (eql (length vals) 2)
                    (integerp q)
                    (rationalp r)
                    (if (> n 0)
                        (and (<= 0 r) (< r (- d)))
                      (and (>= 0 r) (> r d)))
                    (= n n2))
        collect (list n q d r n2)))
92 93 94

(defun truncate.9-fn ()
  (loop for num1 = (- (random 1000000000000000) 500000000000000)
sds's avatar
sds committed
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
        for den1 = (1+ (random 10000000000))
        for n = (/ num1 den1)
        for num2 = (- (1+ (random 1000000000)))
        for den2 = (1+ (random 10000000))
        for d = (/ num2 den2)
        for vals = (multiple-value-list (truncate n d))
        for (q r) = vals
        for n2 = (+ (* q d) r)
        repeat 1000
        unless (and (eql (length vals) 2)
                    (integerp q)
                    (rationalp r)
                    (if (> n 0)
                        (and (<= 0 r) (< r (- d)))
                      (and (>= 0 r) (> r d)))
                    (= n n2))
        collect (list n q d r n2)))
112 113