fix bad attempt to speed up rational comparisons, as well as th egap in the test suite

svn: r5472
This commit is contained in:
Matthew Flatt 2007-01-27 01:40:58 +00:00
parent 3946c25fd9
commit f31128cf11
4 changed files with 16 additions and 27 deletions

View File

@ -138,10 +138,10 @@ exec mzscheme -qu "$0" ${1+"$@"}
extract-mzscheme-times
clean-up-nothing
'())
(make-impl 'mzscheme3m
(make-impl 'mzschemecgc
mk-mzscheme
(lambda (bm)
(system (format "mzscheme3m -qu ~a.ss" bm)))
(system (format "mzschemecgc -qu ~a.ss" bm)))
extract-mzscheme-times
clean-up-nothing
'())
@ -161,10 +161,10 @@ exec mzscheme -qu "$0" ${1+"$@"}
extract-mzscheme-times
clean-up-nothing
'())
(make-impl 'mzscheme3m-tl
(make-impl 'mzschemecgc-tl
mk-mzscheme-tl
(lambda (bm)
(system (format "mzscheme3m -qr compiled/~a.zo" bm)))
(system (format "mzschemecgc -qr compiled/~a.zo" bm)))
extract-mzscheme-times
clean-up-zo
'(nucleic2))
@ -193,7 +193,7 @@ exec mzscheme -qu "$0" ${1+"$@"}
clean-up-fasl
'(maze))))
(define obsolte-impls '(mzscheme mzscheme-j mzscheme3m-tl mzc))
(define obsolte-impls '(mzscheme mzscheme-j mzschemecgc-tl mzc))
(define benchmarks
'(conform

View File

@ -22,11 +22,11 @@
("nestedloop.ss" "18")
("nsieve.ss")
("nsievebits.ss")
("partialsums.ss")
("partialsums.ss" "2500000")
("pidigits.ss")
("pidigits1.ss")
("random.ss" "900000")
("recursive.ss")
("recursive.ss" "11")
("regexmatch.ss")
("regexpdna.ss")
("reversecomplement.ss" #f ,(lambda () (mk-revcomp-input)))

View File

@ -193,6 +193,7 @@
(test-compare 0.5 1.2 2.3)
(test-compare 2/5 1/2 2/3)
(test-compare 1/4 1/3 1/2)
(test #t = 1/2 2/4)
(test #f = 2/3 2/5)
(test #f = 2/3 2/500000000000000000000000000)

View File

@ -200,31 +200,19 @@ static int rational_lt(const Scheme_Object *a, const Scheme_Object *b, int or_eq
Scheme_Rational *rb = (Scheme_Rational *)b;
Scheme_Object *ma, *mb;
#if 0
/* Avoid multiplication in simple cases: */
if (scheme_bin_lt_eq(ra->num, rb->num)
&& scheme_bin_gt_eq(ra->denom, rb->denom)) {
if (!or_eq) {
if (scheme_rational_eq(a, b))
return 0;
}
return 1;
} else
#endif
if (or_eq) {
if (scheme_rational_eq(a, b))
return 1;
}
/* Checking only for lt at this point */
ma = scheme_bin_mult(ra->num, rb->denom);
mb = scheme_bin_mult(rb->num, ra->denom);
if (SCHEME_INTP(ma) && SCHEME_INTP(mb)) {
return (SCHEME_INT_VAL(ma) < SCHEME_INT_VAL(mb));
if (or_eq)
return (SCHEME_INT_VAL(ma) <= SCHEME_INT_VAL(mb));
else
return (SCHEME_INT_VAL(ma) < SCHEME_INT_VAL(mb));
} else if (SCHEME_BIGNUMP(ma) && SCHEME_BIGNUMP(mb)) {
return scheme_bignum_lt(ma, mb);
if (or_eq)
return scheme_bignum_le(ma, mb);
else
return scheme_bignum_lt(ma, mb);
} else if (SCHEME_BIGNUMP(mb)) {
return SCHEME_BIGPOS(mb);
} else