sb-sprof: Move tests into test.lisp.
[sbcl.git] / contrib / sb-sprof / test.lisp
index 9a16960..43432ef 100644 (file)
@@ -1,13 +1,44 @@
 (in-package :cl-user)
+
 (require :sb-sprof)
 
+;;; silly examples
+
+(defun test-0 (n &optional (depth 0))
+  (declare (optimize (debug 3)))
+  (when (< depth n)
+    (dotimes (i n)
+      (test-0 n (1+ depth))
+      (test-0 n (1+ depth)))))
+
+(defun test ()
+  (sb-sprof:with-profiling (:reset t :max-samples 1000 :report :graph)
+    (test-0 7)))
+
+(defun consalot ()
+  (let ((junk '()))
+    (loop repeat 10000 do
+         (push (make-array 10) junk))
+    junk))
+
+(defun consing-test ()
+  ;; 0.0001 chosen so that it breaks rather reliably when sprof does not
+  ;; respect pseudo atomic.
+  (sb-sprof:with-profiling (:reset t :sample-interval 0.0001 :report :graph :loop nil)
+    (let ((target (+ (get-universal-time) 15)))
+      (princ #\.)
+      (force-output)
+      (loop
+         while (< (get-universal-time) target)
+         do (consalot)))))
+
 #-(or win32 darwin)                    ;not yet
-(sb-sprof::test)
+(test)
 #-(or win32 darwin)                    ;not yet
-(sb-sprof::consing-test)
+(consing-test)
 
 ;; For debugging purposes, print output for visual inspection to see if
 ;; the allocation sequence gets hit in the right places (i.e. not at all
 ;; in traditional builds, and everywhere if SB-SAFEPOINT-STRICTLY is
 ;; enabled.)
-(disassemble #'sb-sprof::consalot)
+(disassemble #'consalot)