X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-introspect%2Fxref-test.lisp;h=a93740df318e023e2adde4bab377903bce2c5512;hb=e57523089c7ad0ce2c874c03ecfe721d299efbfb;hp=e1970900e985d2032e4a28c1d622fb227d5022b2;hpb=65dc8d30b1f8389faa549af10e72b9e677bec5d3;p=sbcl.git diff --git a/contrib/sb-introspect/xref-test.lisp b/contrib/sb-introspect/xref-test.lisp index e197090..a93740d 100644 --- a/contrib/sb-introspect/xref-test.lisp +++ b/contrib/sb-introspect/xref-test.lisp @@ -1,46 +1,146 @@ -(defpackage :sb-introspect-test/xref - (:use "SB-INTROSPECT" "CL")) +;;;; This software is part of the SBCL system. See the README file for +;;;; more information. +;;;; +;;;; This software is derived from the CMU CL system, which was +;;;; written at Carnegie Mellon University and released into the +;;;; public domain. The software is in the public domain and is +;;;; provided with absolutely no warranty. See the COPYING and CREDITS +;;;; files for more information. (in-package :sb-introspect-test/xref) -(load (compile-file (merge-pathnames "xref-test-data.lisp" *load-pathname*))) - -(labels ((natural< (a b) - (string< (princ-to-string a) (princ-to-string b)))) - (let ((tests '(((sb-introspect::who-calls 'foo) ()) - ((sb-introspect::who-calls 'bar) (xref/1 xref/3)) - ((sb-introspect::who-calls 'xref/1) (xref/2)) - ((sb-introspect::who-calls 'xref/2) - (xref/5 xref/6 xref/8 xref/8 xref/12 - (sb-pcl::fast-method xref/10 - (t t t t t t t t fixnum)) - (sb-pcl::fast-method xref/11 (fixnum)))) - ((sb-introspect::who-calls 'xref/3) - (inline/1 (sb-pcl::fast-method xref/11 (float)))) - ((sb-introspect::who-calls 'xref/4) ()) - ((sb-introspect::who-calls 'xref/5) ()) - ((sb-introspect::who-calls 'xref/6) (xref/7)) - ((sb-introspect::who-calls 'xref/7) ()) - ((sb-introspect::who-calls 'xref/8) ()) - ((sb-introspect::who-calls 'xref/10) ()) - ((sb-introspect::who-calls 'xref/11) ()) - ((sb-introspect::who-calls 'inline/1) (xref/12)) - ((sb-introspect::who-calls 'xref/12) (macro/1)) - ((sb-introspect::who-macroexpands 'macro/1) - (macro-use/1 macro-use/2 macro-use/3 macro-use/4 inline/2)) - ((sb-introspect::who-binds '*a*) (xref/2)) - ((sb-introspect::who-sets '*a*) (xref/2 xref/13)) - ((sb-introspect::who-references '*a*) - (xref/1 xref/2 xref/4 inline/1 xref/14)) - ((sb-introspect::who-references '+z+) - (inline/1))))) - (loop for x in tests - for form = (first x) - for wanted = (sort (second x) #'natural<) - for result = (sort (loop for name in (eval form) - collect (car name)) - #'natural<) - do (assert (equalp wanted result) - nil - "form=~a~%wanted=~a~%result=~a~%" form wanted result)))) +(defmacro define-xref-test (name form result) + `(deftest ,name + (sort (mapcar #'first ,form) #'string< :key #'princ-to-string) + ,(sort (copy-list result) #'string< :key #'princ-to-string))) +(define-xref-test who-calls.1 + (who-calls 'foo) + nil) +(define-xref-test who-calls.2 + (who-calls 'bar) + (xref/1 xref/3)) + +(define-xref-test who-calls.3 + (who-calls 'xref/1) + (xref/2)) + +(define-xref-test who-calls.4 + (who-calls 'xref/2) + (xref/5 + xref/6 + xref/8 + xref/8 + xref/12 + (sb-pcl::fast-method xref/10 (t t t t t t t t fixnum)) + (sb-pcl::fast-method xref/11 (fixnum)))) + +(define-xref-test who-calls.5 + (who-calls 'xref/3) + (inline/1 (sb-pcl::fast-method xref/11 (float)))) + +(define-xref-test who-calls.6 + (who-calls 'xref/4) + nil) + +(define-xref-test who-calls.7 + (who-calls 'xref/5) + nil) + +(define-xref-test who-calls.8 + (who-calls 'xref/6) + (xref/7)) + +(define-xref-test who-calls.9 + (who-calls 'xref/7) + nil) + +(define-xref-test who-calls.10 + (who-calls 'xref/8) + nil) + +(define-xref-test who-calls.11 + (who-calls 'xref/10) + nil) +(define-xref-test who-calls.12 + (who-calls 'xref/11) + nil) + +(define-xref-test who-calls.13 + (who-calls 'inline/1) + (xref/12)) + +(define-xref-test who-calls.14 + (who-calls 'xref/12) + (macro/1)) + +(define-xref-test who-calls.15 + (who-calls 'inline/3) + (inline/3-user/1 + inline/3-user/2 + inline/3-user/3 + inline/3-user/4)) + +(define-xref-test who-calls.16 + (who-calls 'inline/4) + (inline/4-user)) + + +(define-xref-test who-macroexpands.1 + (who-macroexpands 'macro/1) + (macro-use/1 + macro-use/2 + macro-use/3 + macro-use/4 + inline/2)) + + +(define-xref-test who-binds.1 + (who-binds '*a*) + (xref/2)) + + +(define-xref-test who-sets.1 + (who-sets '*a*) + (xref/2 xref/13)) + + +(define-xref-test who-references.1 + (who-references '*a*) + (xref/1 xref/2 xref/4 inline/1 xref/14)) + +(define-xref-test who-references.2 + (who-references '+z+) + (inline/1)) + + +(define-xref-test who-calls.struct-slot.1 + (who-calls 'struct-slot) + (source-user)) + +(define-xref-test who-calls.cmacro.1 + (who-calls 'cmacro) + (source-user)) + + +(define-xref-test who-specializes-directly.1 + (who-specializes-directly 'a-class) + ((method a-gf-1) + (method a-gf-2))) + +(define-xref-test who-specializes-directly.2 + (who-specializes-directly 'a-structure) + ((method a-gf-1) + (method a-gf-2))) + +(define-xref-test who-specializes-generally.1 + (who-specializes-generally 'a-class) + ((method a-gf-1) + (method a-gf-2) + (method a-gf-3))) + +(define-xref-test who-specializes-generally.2 + (who-specializes-generally 'a-structure) + ((method a-gf-1) + (method a-gf-2) + (method a-gf-3))) \ No newline at end of file