Mercurial > core / lisp/lib/rt/fuzz.lisp
changeset 581: |
d3e2829521a3 |
parent: |
806c2b214df8
|
child: |
568c39371122 |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Tue, 06 Aug 2024 21:17:24 -0400 |
permissions: |
-rw-r--r-- |
description: |
tmux work, fuzzer |
1 ;;; fuzz.lisp --- RT Fuzz 8 ;; wiki: https://en.wikipedia.org/wiki/Fuzzing 13 (defvar *default-fuzz-generator* 15 (random most-positive-fixnum state))) 18 ((state :initform (make-random-state t) 20 :accessor fuzzer-state) 21 (generator :initform *default-fuzz-generator* 23 :type (function (state)) 24 :accessor fuzz-generator)) 25 (:documentation "An object which provides invalid, unexpected or random data as inputs to some 28 (defgeneric fuzz (self &key &allow-other-keys) 29 (:method ((self fuzzer) &key count) 32 (dotimes (i count ret) 33 (push (funcall (the function (fuzz-generator self)) (fuzzer-state self)) ret))) 34 (funcall (the function (fuzz-generator self)) (fuzzer-state self))))) 36 (defgeneric fuzz* (state generator &key &allow-other-keys) 37 (:method ((state list) (generator function) &key (count 1)) 39 (dotimes (i count ret) 40 (push (funcall generator state) ret)))) 41 (:method ((state vector) (generator function) &key (count 1)) 42 (let ((ret (make-array count :fill-pointer 0))) 43 (dotimes (i count ret) 44 (setf (aref ret i) (funcall generator state))))) 45 (:method ((state hash-table) (generator function) &key (count 1)) 46 (let ((ret (make-hash-table))) 47 (dotimes (i count ret) 48 (destructuring-bind (k v) (funcall generator state) 49 (setf (gethash k ret) v))))))