From 7bc6e2e79ea2df24092bff17846b06f8f289d639 Mon Sep 17 00:00:00 2001 From: Sam Tobin-Hochstadt Date: Wed, 19 May 2010 11:12:13 -0500 Subject: [PATCH] Add test for PR 10318. Closes PR 10318. original commit: 3fd5c491728c720727785fec266d9893e163738b --- .../tests/typed-scheme/succeed/pr10318.rkt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 collects/tests/typed-scheme/succeed/pr10318.rkt diff --git a/collects/tests/typed-scheme/succeed/pr10318.rkt b/collects/tests/typed-scheme/succeed/pr10318.rkt new file mode 100644 index 00000000..aa1ae023 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/pr10318.rkt @@ -0,0 +1,35 @@ +#lang typed-scheme + +(define-struct: rect ((nw : Symbol) (width : Number) (height : Number))) +(define-struct: circ ((cntr : Symbol) (radius : Number))) +(define-struct: over ((top : Shape) (bot : Shape))) + +(define-type-alias Shape (Rec Shape (U Plain over [Listof Plain]))) +(define-type-alias Plain (U rect circ)) +;; (define-type-alias Rect (U (make-rect Posn Number Number))) +;; Circ = (make-circ Posn Number) + +(: area (Shape -> Number)) +;; the area of all rectangles in this s +(define (area s) + (cond + [(plain? s) (plain-area s)] + [(over? s) (+ (area (over-top s)) (area (over-bot s)))] + [else (apply + (map rect-area (filter rect? s)))])) + +(: plain? (Any -> Boolean : Plain)) +;; is this p a plain shape? +(define (plain? p) + (or (rect? p) (circ? p))) + +(: plain-area (Plain -> Number)) +;; the area of this plain shape s +(define (plain-area s) + (cond + [(rect? s) (rect-area s)] + [(circ? s) 0])) + +(: rect-area (rect -> Number)) +;; the area of this rectangle r +(define (rect-area s) + (* (rect-width s) (rect-height s))) \ No newline at end of file