Advertisement
DoromaAnim

1 i 3i 4

May 29th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. #lang racket
  2. (require quickcheck)
  3. (define-signature monoid^
  4. ((contracted
  5. [elem? (-> any/c boolean?)]
  6. [neutral elem?]
  7. [oper (-> elem? elem? elem?)])))
  8.  
  9. (define-unit monoid-lists@
  10. (import)
  11. (export monoid^)
  12.  
  13. (define (elem? x)
  14. (if (list? x)
  15. #t
  16. #f))
  17.  
  18. (define neutral
  19. null)
  20.  
  21. (define (oper xs ys)
  22. (append xs ys)))
  23.  
  24. (define-unit monoid-integers@
  25. (import)
  26. (export monoid^)
  27.  
  28. (define (elem? x)
  29. (if (integer? x)
  30. #t
  31. #f))
  32.  
  33. (define neutral
  34. 0)
  35.  
  36. (define (oper x y)
  37. (+ x y)))
  38.  
  39. ;(define-values/invoke-unit/infer monoid-lists@);
  40. ;(elem? (list 'a 'b))
  41.  
  42. (define lists-neutral-elem-left-right
  43. (property ([xs (arbitrary-list arbitrary-integer)])
  44. (equal? (oper xs neutral) (oper neutral xs))))
  45.  
  46. (define lists-assoc
  47. (property ([xs (arbitrary-list arbitrary-integer)]
  48. [ys (arbitrary-list arbitrary-integer)]
  49. [zs (arbitrary-list arbitrary-integer)])
  50. (equal? (oper xs (oper ys zs)) (oper (oper xs ys) zs))))
  51.  
  52. (define-values/invoke-unit/infer monoid-integers@);
  53.  
  54. (define integers-neutral-elem-left-right
  55. (property ([x arbitrary-integer])
  56. (equal? (oper x neutral) (oper neutral x))))
  57.  
  58. (define integers-assoc
  59. (property ([x arbitrary-integer]
  60. [y arbitrary-integer]
  61. [z arbitrary-integer])
  62. (equal? (oper x (oper y z)) (oper (oper x y) z))))
  63.  
  64.  
  65. (quickcheck integers-assoc)
  66. (quickcheck integers-neutral-elem-left-right)
  67.  
  68.  
  69.  
  70. (define/contract my-filter
  71. (parametric->/c [a] (-> procedure? (listof a) (listof a)))
  72. filter)
  73. (my-filter (lambda (x) (equal? x 1))
  74. '(1 2 3 4 5 6 1 2 3 1 2 3))
  75.  
  76. (define (close-enough-complex? x y)
  77. (< (magnitude (- x y)) 0.00001))
  78.  
  79. (define/contract (my-sqrt x)
  80. (->i ([n number?])
  81. [result (n) number?]
  82. #:post (n result)
  83. (close-enough-complex? (* result result) n))
  84. (sqrt x))
  85.  
  86. (define xddd
  87. (property ([x arbitrary-integer])
  88. (close-enough-complex? x (* (my-sqrt x)(my-sqrt x)))))
  89.  
  90. (quickcheck xddd)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement