Add file for carl.
This commit is contained in:
parent
bbae111229
commit
4578b926c0
70
collects/tests/typed-scheme/unit-tests/random-testing.ss
Normal file
70
collects/tests/typed-scheme/unit-tests/random-testing.ss
Normal file
|
@ -0,0 +1,70 @@
|
|||
#lang scheme/base
|
||||
|
||||
(require (planet cce/fasttest/random)
|
||||
"test-utils.ss")
|
||||
(require (private type-effect-convenience type-rep)
|
||||
scheme/match)
|
||||
|
||||
|
||||
|
||||
(define base (random-uniform (random-apply (lambda (n) #`(quote #,n)) (random-int-between 1 100))))
|
||||
|
||||
(define (N? t)
|
||||
(match t
|
||||
[(Base: 'Number) #t]
|
||||
[_ #f]))
|
||||
|
||||
(define (make-lam formals body)
|
||||
#`(#%plain-lambda #,formals #,body))
|
||||
|
||||
|
||||
(define random-id
|
||||
(random-apply datum->syntax #f (random-symbol)))
|
||||
|
||||
(define (make-app f . args)
|
||||
#`(#%plain-app #,f #,@args))
|
||||
|
||||
;; ty-gen : size -> generator[type]
|
||||
(define-generator (ty-gen max-depth)
|
||||
[3 N]
|
||||
[(if (< max-depth 1) 0 1)
|
||||
(random-apply (lambda (args ret) (args . ->* . ret))
|
||||
(random-list-of (ty-gen (sub1 max-depth)) (random-int-between 0 3))
|
||||
(ty-gen (sub1 max-depth)))])
|
||||
|
||||
;; base-gen : number -> generator[syntax]
|
||||
(define-generator (base-gen max-depth)
|
||||
[10 base]
|
||||
[(if (< max-depth 1) 0 1)
|
||||
(let*-random ([arg-tys (random-list-of (ty-gen (sub1 max-depth)) (random-int-between 0 (max 0 3 max-depth)))])
|
||||
(let* ([args (map (lambda (t) (term-gen t (sub1 max-depth))) arg-tys)])
|
||||
(random-apply
|
||||
apply
|
||||
make-app
|
||||
(term-gen (arg-tys . ->* . N) (sub1 max-depth))
|
||||
(map generate args))))])
|
||||
|
||||
|
||||
|
||||
;; term-gen : type size -> generator[syntax]
|
||||
(define-generator (term-gen ty max-depth)
|
||||
[1
|
||||
(match ty
|
||||
[(? N?) (base-gen (sub1 max-depth))]
|
||||
[(Function: (list (arr: args ret _ _ _ _)))
|
||||
(cond [(and (> (length args) 0) (andmap N? args))
|
||||
(random-uniform #'+ #'- #'* #'-)]
|
||||
[(andmap N? args)
|
||||
(random-uniform #'+ #'*)]
|
||||
[else
|
||||
(random-apply make-lam
|
||||
(random-list-of random-id (length args))
|
||||
(term-gen ret (sub1 max-depth)))])]
|
||||
[_ (error "epic fail")])])
|
||||
|
||||
(define (go [n 3])
|
||||
(generate (random-apply term-gen (ty-gen n) n)))
|
||||
|
||||
(go 0)
|
||||
|
||||
;(generate (base-gen 1))
|
Loading…
Reference in New Issue
Block a user