From 9c49d475f548270314c88cc643615b35c612f49b Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 13 Jan 2015 21:07:42 +0100 Subject: [PATCH] Add compute-cpl tests * test-suite/tests/goops.test: Add tests for compute-cpl based on comments from goops.scm. * module/oop/goops.scm (compute-std-cpl): Remove comment, and add docstring. (compute-cpl): Improve comment. --- module/oop/goops.scm | 26 +++----------------------- test-suite/tests/goops.test | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/module/oop/goops.scm b/module/oop/goops.scm index e0721f47b..a8d1679ff 100644 --- a/module/oop/goops.scm +++ b/module/oop/goops.scm @@ -246,29 +246,8 @@ (define (is-a? obj class) (and (memq class (class-precedence-list (class-of obj))) #t)) - -;;; The standard class precedence list computation algorithm -;;; -;;; Correct behaviour: -;;; -;;; (define-class food ()) -;;; (define-class fruit (food)) -;;; (define-class spice (food)) -;;; (define-class apple (fruit)) -;;; (define-class cinnamon (spice)) -;;; (define-class pie (apple cinnamon)) -;;; => cpl (pie) = pie apple fruit cinnamon spice food object top -;;; -;;; (define-class d ()) -;;; (define-class e ()) -;;; (define-class f ()) -;;; (define-class b (d e)) -;;; (define-class c (e f)) -;;; (define-class a (b c)) -;;; => cpl (a) = a b d c e f object top -;;; - (define (compute-std-cpl c get-direct-supers) + "The standard class precedence list computation algorithm." (define (only-non-null lst) (filter (lambda (l) (not (null? l))) lst)) @@ -300,7 +279,8 @@ c-direct-supers) (list c-direct-supers)))))) -;; Bootstrap version. +;; This version of compute-cpl is replaced with a generic function once +;; GOOPS has booted. (define (compute-cpl class) (compute-std-cpl class class-direct-supers)) diff --git a/test-suite/tests/goops.test b/test-suite/tests/goops.test index 724c0eec0..7cf64fc52 100644 --- a/test-suite/tests/goops.test +++ b/test-suite/tests/goops.test @@ -599,3 +599,26 @@ (pass-if-equal 100 (slot-ref a 'test)) (pass-if-equal 100 (slot-ref b 'test)) (pass-if-equal 200 (slot-ref c 'test))))))) + +(define-class ()) +(define-class ()) +(define-class ()) +(define-class ()) +(define-class ()) +(define-class ( )) + +(define-class ()) +(define-class ()) +(define-class ()) +(define-class ( )) +(define-class ( )) +(define-class ( )) + +(with-test-prefix "compute-cpl" + (pass-if-equal "" + (list ) + (compute-cpl )) + + (pass-if-equal "" + (list ) + (compute-cpl ))) -- 2.20.1