Applying Random Testing to a Base Type Environment Experience Report Vincent St-Amour Neil Toronto PLT
ICFP 2013 - September 27th, 2013
Applying Random Testing to a Base Type Environment Experience - - PowerPoint PPT Presentation
Applying Random Testing to a Base Type Environment Experience Report Vincent St-Amour Neil Toronto PLT ICFP 2013 - September 27th, 2013 base e : base e : base e : base e : base e : first :
ICFP 2013 - September 27th, 2013
/* This macro is used to implement most all binary math and comparison functions (!): */ #define GEN_BIN_THING(rettype, name, scheme_name, \ iop, fop, fsop, bn_op, rop, wrap, combineinf, \ ...
base
base
base
base
(: sinh (case→ [Float-Zero → Float-Zero] [Positive-Float → Positive-Float] [Negative-Float → Negative-Float] ...))
(: sinh (case→ [Float-Zero → Float-Zero] [Positive-Float → Positive-Float] [Negative-Float → Negative-Float] ...)) τ₁ ∩ τ₂ ∩ …
(: sinh (case→ [Float-Zero → Float-Zero] [Positive-Float → Positive-Float] [Negative-Float → Negative-Float] ...)) τ₁ ∩ τ₂ ∩ …
2 2 2 2 2 2 2 2 2
5 5 5 5 5 5 5 5 5 10 10 10 10 10 10 10 10 10
(: sinh (case→ [Float-Zero → Float-Zero] [Positive-Float → Positive-Float] [Negative-Float → Negative-Float] ...)) τ₁ ∩ τ₂ ∩ …
2 2 2 2 2 2 2 2 2
5 5 5 5 5 5 5 5 5 10 10 10 10 10 10 10 10 10
(integers, complexes, exact rationals)
(: sinh (case→ [Float-Zero → Float-Zero] [Positive-Float → Positive-Float] [Negative-Float → Negative-Float] ...))
(: sinh (case→ [Float-Zero → Float-Zero] [Positive-Float → Positive-Float] [Negative-Float → Negative-Float] ...))
.0002 .0002 .0002 .0002 .0002 .0002 .0002 .0002 .0002 .0004 .0004 .0004 .0004 .0004 .0004 .0004 .0004 .0004
.0002 .0002 .0002 .0002 .0002 .0002 .0002 .0002 .0002 .0004 .0004 .0004 .0004 .0004 .0004 .0004 .0004 .0004
(: sinh (case→ [Float-Zero → Float-Zero] [Nonnegative-Float → Nonnegative-Float] [Nonpositive-Float → Nonpositive-Float] ...))
.0002 .0002 .0002 .0002 .0002 .0002 .0002 .0002 .0002 .0004 .0004 .0004 .0004 .0004 .0004 .0004 .0004 .0004
.0002 .0002 .0002 .0002 .0002 .0002 .0002 .0002 .0002 .0004 .0004 .0004 .0004 .0004 .0004 .0004 .0004 .0004
(: * (case→ ... [Positive-Real Positive-Real → Positive-Real] ...))
(: * (case→ ... [Positive-Real Positive-Real → Positive-Real] ...))
(: * (case→ ... [Nonnegative-Real Nonnegative-Real → Nonnegative-Real] ...))
(: * (case→ ... [Nonnegative-Real Nonnegative-Real → Nonnegative-Real] ...))
(: * (case→ ... [Nonnegative-Real Nonnegative-Real → (U Nonnegative-Real Float-Nan)] ...))
(define-language λv [e (e e ...) (if0 e e e) x v] [v (λ (x ...) e) number] [x (variable-except λ if0)])
(define-language λv [e (e e ...) (if0 e e e) x v] [v (λ (x ...) e) number] [x (variable-except λ if0)]) (define red (reduction-relation λv ...))
(define-language λv [e (e e ...) (if0 e e e) x v] [v (λ (x ...) e) number] [x (variable-except λ if0)]) (redex-check λv v (number? (term v))) counterexample found after 4 attempts: (λ () 1)
(define-language λv [e (e e ...) (if0 e e e) x v] [v (λ (x ...) e) number] [x (variable-except λ if0)]) (redex-check λv v (> (n-google-results (term v)) 20)) counterexample found after 15 attempts: (λ (x y) (+ (λ () 3) 2))
e ::= n | (+ e e) | ... Generate arithmetic expressions
e ::= n | (+ e e) | ... Γ ⊢ e : τ Typecheck using Typed Racket e ⊬
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Evaluate using Typed Racket e ⊬ e
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' Typecheck the result e ⊬ e v
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ Check consistency τ e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) Positive-Float e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) Positive-Float 0.0 e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) Positive-Float 0.0 Float-Zero e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) Positive-Float 0.0 Float-Zero Float-Zero ≮: Positive-Float e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) Positive-Float 0.0 Float-Zero Float-Zero ≮: Positive-Float e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) Positive-Float 0.0 Float-Zero Float-Zero ≮: Positive-Float e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) Positive-Float 0.0 Float-Zero Float-Zero ≮: Positive-Float e ⊬ e v τ' <: ≮:
e ::= n | (+ e e) | ... Γ ⊢ e : τ e →* v Γ ⊢ v : τ' τ' <: τ τ (sinh 1.2535e-17) Positive-Float 0.0 Float-Zero Float-Zero ≮: Positive-Float e ⊬ e v τ' <: ≮:
Random floating-point number generation 25% Laplace distribution 25% Uniform random bits 17.5% Close to 0 8.75% Close to ∞ 8.75% Close to -∞ 5% ∞ 5% -∞ 5% NaN
Random floating-point number generation 25% Laplace distribution 25% Uniform random bits 17.5% Close to 0 8.75% Close to ∞ 8.75% Close to -∞ 5% ∞ 5% -∞ 5% NaN