diff --git a/collects/tests/mzscheme/contract-test.ss b/collects/tests/mzscheme/contract-test.ss index c3e1375102..651d8a7d81 100644 --- a/collects/tests/mzscheme/contract-test.ss +++ b/collects/tests/mzscheme/contract-test.ss @@ -4594,6 +4594,54 @@ (define/public (m) (set! f #f)))]) (send (new d%) m))) + (test/spec-passed + 'class/c-higher-order-override-1 + '(let* ([c% (contract (class/c (override [m (-> number? number?)])) + (class object% (super-new) + (define/public (m x) x) + (define/public (f x) (m x))) + 'pos + 'neg)] + [d% (class c% (super-new) + (define/override (m x) (add1 (super m x))))]) + (send (new d%) f 3))) + + (test/neg-blame + 'class/c-higher-order-override-2 + '(let* ([c% (contract (class/c (override [m (-> number? number?)])) + (class object% (super-new) + (define/public (m x) x) + (define/public (f x) (add1 (m x)))) + 'pos + 'neg)] + [d% (class c% (super-new) + (define/override (m x) (zero? (super m x))))]) + (send (new d%) f 3))) + + (test/neg-blame + 'class/c-higher-order-override-3 + '(let* ([c% (contract (class/c (override [m (-> number? number?)])) + (class object% (super-new) + (define/public (m x) (zero? x)) + (define/public (f x) (add1 (m x)))) + 'pos + 'neg)] + [d% (class c% (super-new) + (define/override (m x) (super m x)))]) + (send (new d%) f 3))) + + (test/pos-blame + 'class/c-higher-order-override-4 + '(let* ([c% (contract (class/c (override [m (-> number? number?)])) + (class object% (super-new) + (define/public (m x) x) + (define/public (f x) (add1 (m #f)))) + 'pos + 'neg)] + [d% (class c% (super-new) + (define/override (m x) (+ x (super m x))))]) + (send (new d%) f 3))) + ; ; ; ;; ;; ; ;;