[xsmith-dev] Examples
Paulo Matos
pmatos at linki.tools
Tue Mar 24 14:15:31 MDT 2020
Uh oh - sorry for this. I just noticed I installed xsmith from raco pkg which installs the very old 1.0 release and was trying to run the examples from the master branch. All good now...
Maybe it's time for a new minor release?
Paulo Matos
On 24 March 2020 15:50:06 CET, Paulo Matos <pmatos at linki.tools> wrote:
>Hi,
>
>I am playing with XSmith to try to create a simple fuzzer for a simple
>scheme. Initially I thought I would go for r7rs but I can see it's not
>as straightforward as I initially thought.
>
>Of course, with the schemely example things were going to be much quick
>but not only I cannot run the schemely example, I get:
>
>$ raco make schemely.rkt
>/home/pmatos/dev/xsmith/xsmith-examples/schemely/schemely.rkt:219.0:
>define-generic-type: expected identifier
> at: (type covariant)
> in: (define-generic-type list-type ((type covariant)))
> compilation context...:
> /home/pmatos/dev/xsmith/xsmith-examples/schemely/schemely.rkt
> context...:
> .../private/runtime-report.rkt:731:0: error/report
> .../private/runtime-report.rkt:28:0: call-current-failure-handler
> call-in-empty-metacontinuation-frame
> apply-transformer
> dispatch-transformer
> do-local-expand
> .../syntax/wrap-modbeg.rkt:46:4
> call-in-empty-metacontinuation-frame
> apply-transformer
> dispatch-transformer
> loop
> finish
> [repeats 37 more times]
> pass-1-and-2-loop
> module-begin-k
> expand-module
>
>My example stands as:
>
>----
>#lang racket/base
>
>(require xsmith
> racr
> xsmith/racr-convenience
> racket/pretty
> racket/random
> racket/list
> racket/class
> racket/string
> racket/port)
>
>;; XSMITH-based fuzzer for R7RS - following Rattle's
>;; support for R7RS
>
>(define-spec-component r7rs-core)
>
>(add-to-grammar
> r7rs-core
>
> [Expression #f ()
> #:prop may-be-generated #f]
>
> [Let Expression ([definitions : Definition * = 0 #;(random 3)]
> [body : DefinitionContext])
> #:prop strict-child-order? #t]
>
> [LiteralBool Expression ([v = (even? (random 2))])]
> [LiteralNumber Expression (v) #:prop may-be-generated #f]
> [LiteralInt LiteralNumber ()]
>
> [Not Expression ([Expression])]
>
>[If Expression ([test : Expression] [then : Expression] [else :
>Expression])
> #:prop strict-child-order? #t]
>
> )
>
>(add-prop r7rs-core fresh
> [LiteralInt (hash 'v (* (random 1000000)
> (if (equal? 0 (random 2)) -1 1)))])
>
>;; helper for render-node-info
>;(define (->se sym . children-refs)
>; (lambda (n)
>; `(,sym ,@(map (lambda (x) (render-node (ast-child x n)))
>; children-refs))))
>;
>;(define (->se* sym children-ref)
>; (lambda (n)
>; `(,sym ,@(map (lambda (x) (render-node x))
>; (ast-children (ast-child children-ref n))))))
>
>(add-prop
> r7rs-core
> render-node-info
>
>[Let (lambda (n) `(let (,@(map (lambda (d) `(,(string->symbol
>(ast-child 'name d))
> ,(render-node (ast-child 'Expression d))))
> (ast-children (ast-child 'definitions n))))
> ,@(render-node (ast-child 'body n))))]
>
> [LiteralBool (lambda (n) (ast-child 'v n))]
> [LiteralNumber (lambda (n) (ast-child 'v n))])
>
>;(add-prop
>; r7rs-core
>; render-hole-info
>; [#f (lambda (h) (list 'HOLE (ast-node-type h)))])
>
>;; Types
>(define number (base-type 'number))
>(define int (base-type 'int number))
>(define bool (base-type 'bool))
>
>(define (type-thunks-for-concretization)
> (list (lambda () int)
> (lambda () bool)))
>
>(add-prop
> r7rs-core
> type-info
>
> [Let [(fresh-type-variable) (lambda (n t)
> (hash 'body t
> 'definitions (lambda (c) (fresh-type-variable))))]]
>
> [LiteralBool [bool (no-child-types)]]
> [LiteralInt [int (no-child-types)]]
>
> [If [(fresh-type-variable)
> (lambda (n t)
> (hash 'test bool 'then t 'else t))]])
>
>(assemble-spec-components
> r7rs
> r7rs-core)
>
>(define (r7rs-generate)
> (parameterize ([current-xsmith-type-constructor-thunks
> (type-thunks-for-concretization)])
> (r7rs-generate-ast 'Expression)))
>
>(define (r7rs-format-render forms)
> (with-output-to-string
> (lambda ()
> (define (pp x)
> (pretty-print x (current-output-port) 1))
> (for ([form forms])
> (pp form)))))
>
>(module+ main
> (xsmith-command-line
> r7rs-generate
> #:format-render r7rs-format-render))
>
> ---
>
>but I am getting:
>render-node-info: Identifier not defined as a property. in:
>render-node-info
>
>Can someone provide some hints on how to get this to work? I am not
>sure
>I completely understand why this is happening. `add-prop` is supposed
>to
>add a new property with the name `render-node-info`, so getting that
>error is confusing me. Xsmith seems to expect the identifier
>`render-node-info` to have been previously marked as a property or
>something or the sort.
>
>Kind regards,
>
>Paulo Matos
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </listarchives/xsmith-dev/attachments/20200324/1cd9c073/attachment.html>
More information about the xsmith-dev
mailing list