From 10d89c8f8f892ec0b465820082e525a6014ef9b9 Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Thu, 8 Dec 2011 17:03:44 -0500 Subject: [PATCH] Add TR support for gcd and lcm on rationals. original commit: b5d393d9393d59a4d31b2f8c4538433b40a3e489 --- .../tests/typed-racket/unit-tests/typecheck-tests.rkt | 10 ++++++++++ collects/typed-racket/base-env/base-env-numeric.rkt | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/collects/tests/typed-racket/unit-tests/typecheck-tests.rkt b/collects/tests/typed-racket/unit-tests/typecheck-tests.rkt index 5d6a4ada..e09d8c33 100644 --- a/collects/tests/typed-racket/unit-tests/typecheck-tests.rkt +++ b/collects/tests/typed-racket/unit-tests/typecheck-tests.rkt @@ -172,6 +172,16 @@ (tc-e (- -23524623547234734568) -PosInt) (tc-e (- 241.3) -NegFlonum) (tc-e (- -24.3) -PosFlonum) + + (tc-e (gcd 1/2) -PosRat) + (tc-e (gcd 3 1/2) -PosRat) + (tc-e (gcd (ann 3 Integer) 1/2) -NonNegRat) + (tc-e (gcd (ann 3 Integer) -1/2) -NonNegRat) + (tc-e (lcm 1/2) -PosRat) + (tc-e (lcm 3 1/2) -PosRat) + (tc-e (lcm (ann 3 Integer) 1/2) -NonNegRat) + (tc-e (lcm (ann 3 Integer) -1/2) -NonNegRat) + [tc-e/t (lambda: () 3) (t:-> -PosByte : -true-lfilter)] [tc-e/t (lambda: ([x : Number]) 3) (t:-> N -PosByte : -true-lfilter)] [tc-e/t (lambda: ([x : Number] [y : Boolean]) 3) (t:-> N B -PosByte : -true-lfilter)] diff --git a/collects/typed-racket/base-env/base-env-numeric.rkt b/collects/typed-racket/base-env/base-env-numeric.rkt index e2ab30be..43421ae3 100644 --- a/collects/typed-racket/base-env/base-env-numeric.rkt +++ b/collects/typed-racket/base-env/base-env-numeric.rkt @@ -1677,7 +1677,7 @@ (map binop (list -Flonum -SingleFlonum -InexactReal -Real)))] [gcd (from-cases (varop -Zero) - (varop -One) + (varop-1+ -One) (varop-1+ -PosByte) (varop -Byte) (varop-1+ -PosIndex) @@ -1686,6 +1686,8 @@ (varop -Fixnum -NonNegFixnum) (varop-1+ -PosInt) (varop -Int -Nat) + (varop-1+ -PosRat) + (varop -Rat -NonNegRat) ;; also supports inexact integers (varop-1+ -PosFlonum) (commutative-case -PosFlonum -PosReal -PosFlonum) @@ -1712,6 +1714,8 @@ (binop -Byte -Index) (varop (Un -PosInt -NegInt) -PosInt) (varop -Int -Nat) + (varop (Un -PosRat -NegRat) -PosRat) + (varop -Rat -NonNegRat) ;; also supports inexact integers (commutative-case -FlonumZero -Real -FlonumPosZero) (commutative-case -SingleFlonumZero -Real -SingleFlonumPosZero)