;;; -*- Mode:LISP; Package:USER; Readtable:ZL; Base:10 -*- (DEFUN TIMEIT (NAME F) (LET ((TIME (TIME))) (PROG1 (FUNCALL F) (SETQ TIME (QUOTIENT (TIME-DIFFERENCE (TIME) TIME) 60.0)) (COND ((LISTP NAME) (FORMAT T "~&~A took ~\scientific\seconds, ~\scientific\seconds per loop~%" (CAR NAME) TIME (QUOTIENT TIME (CADR NAME)))) ('ELSE (FORMAT T "~&~A took ~\scientific\seconds.~%" NAME TIME)))))) (DEFUN OPEN-READ-TEST (FILENAME) (LET ((STREAM) (L (LIST "READ THE FILE" NIL))) (UNWIND-PROTECT (PROGN (TIMEIT "OPEN FOR READ" #'(LAMBDA () (SETQ STREAM (OPEN FILENAME)))) (TIMEIT L #'(LAMBDA () (do ((buf) (from-stream stream) (offset) (limit) (N 0)) (()) (multiple-value (buf offset limit) (send from-stream :read-input-buffer)) (cond ((null buf) (return (setf (cadr l) n)))) (incf n (- limit offset)) (send from-stream :advance-input-buffer)))) (TIMEIT "CLOSE THE FILE" #'(LAMBDA () (CLOSE STREAM) (SETQ STREAM NIL)))) (AND STREAM (CLOSE STREAM))))) (DEFUN OPEN-WRITE-TEST (FILENAME) (LET ((STREAM) (ST (MAKE-STRING 1000))) (UNWIND-PROTECT (PROGN (TIMEIT "OPEN FOR WRITE" #'(LAMBDA () (SETQ STREAM (OPEN FILENAME :DIRECTION :OUTPUT)))) (TIMEIT '("WRITE 10^6 BYTES" 1000000) #'(LAMBDA () (DOTIMES (J 1000) (SEND STREAM :STRING-OUT ST)))) (TIMEIT "CLOSE FILE AFTER WRITE" #'(LAMBDA () (CLOSE STREAM) (SETQ STREAM NIL)))) (AND STREAM (CLOSE STREAM))))) (EVAL-WHEN (EVAL COMPILE LOAD) (IF (= 102 (SI:GET-SYSTEM-VERSION)) (SSTATUS FEATURE LMI-RELEASE-2))) #+LMI-RELEASE-2 FORMAT: (PROGN 'COMPILE (DEFFORMAT SCIENTIFIC (:ONE-ARG) (X IGNORE) (MULTIPLE-VALUE-BIND (NUMBER POWER NAME) (SCIENTIFIC-NUMBER X) (COND ((NOT NAME) (FORMAT T "~$*10^~D " NUMBER POWER)) ('ELSE (FORMAT T "~$ ~A" NUMBER NAME))))) (DEFVAR *SCIENTIFIC-NUMBER-POWER-TABLE* '((0 "") (-3 "milli") (-6 "micro") (-9 "nano") (-12 "fempto") (-15 "atto") (3 "kilo") (6 "mega") (9 "giga") (12 "tera"))) (DEFUN SCIENTIFIC-NUMBER (X) "return a number 1