changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/lib/q/tests/fuzz.lisp

changeset 698: 96958d3eb5b0
parent: 568c39371122
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
1 ;;; fuzz.lisp --- Q Fuzzers
2 
3 ;; Q Test Fuzzers
4 
5 ;;; Code:
6 (in-package :q/tests/fuzz)
7 
8 (defvar *fuzz-value-max-size* 32)
9 
10 ;; > schema, state, generator
11 (defclass query-fuzzer (fuzzer data-source) ())
12 
13 (defun generate-sql-type (state &optional (type :string))
14  (case type
15  (:integer (make-instance 'sql-number :value (random most-positive-fixnum)))
16  (:float (make-instance 'sql-number :value (random most-positive-single-float)))
17  (:double (make-instance 'sql-number :value (random most-positive-double-float)))
18  (:string (make-instance 'sql-string :value (rt:random-chars (random *fuzz-value-max-size* state))))))
19 
20 (defun generate-dql-type (state &optional (type :string)))
21 
22 (defclass sql-fuzzer (query-fuzzer) ()
23  (:default-initargs
24  :generator #'generate-sql-type))
25 
26 (defmethod fuzz ((self sql-fuzzer) &key type)
27  (funcall (fuzz-generator self) (fuzz-state self) type))
28 
29 (defclass dql-fuzzer (query-fuzzer) ()
30  (:default-initargs
31  :generator #'generate-dql-type))