Advertisement
Guest User

Untitled

a guest
Dec 12th, 2016
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.30 KB | None | 0 0
  1. OK! So I wrote my code and it looks good. There's my incredible sum function:
  2.  
  3. module Sum {
  4. sub sum($a, $b) {
  5. $a + $b
  6. }
  7. }
  8. Let's test it:
  9.  
  10. use Sum;
  11. say sum 2, 3; # 5
  12. That works!
  13.  
  14. But if I run something like:
  15.  
  16. use Sum;
  17. say sum "bla", "ble";
  18. I got an error:
  19.  
  20. Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏bla' (indicated by ⏏)
  21. in sub sum at sum.p6 line 1
  22. in block at sum.p6 line 7
  23.  
  24. Actually thrown at:
  25. in sub sum at sum.p6 line 1
  26. in block at sum.p6 line 7
  27. I think I didn't think every possibility of arguments. But there's a module to help us with stuff like that! Test::Fuzz is a perl6 module that implements the "technique" of generative testing/fuzz testing. It gets the signature of your functions and decides what generators it should use to test it. After that it runs your functions giving it (100, by default) entry data and testing if it will break.
  28.  
  29. To test that our function, its simple like doing this:
  30.  
  31. module Sum {
  32. use Test::Fuzz;
  33. sub sum($a, $b) is export is fuzzed {
  34. $a + $b
  35. }
  36. }
  37. sub MAIN(:$fuzz!) {
  38. Test::Fuzz.instance.run-tests
  39. }
  40. And run:
  41.  
  42. perl6 Sum.pm6 --fuzz
  43. It'll show a lot of errors:
  44.  
  45. Use of uninitialized value of type Thread in numeric context
  46. in sub sum at Sum.pm6 line 4
  47. Use of uninitialized value of type int in numeric context
  48. in sub sum at Sum.pm6 line 4
  49. ok 1 - sum(Thread, int)
  50. Use of uninitialized value of type X::IO::Symlink in numeric context
  51. in sub sum at Sum.pm6 line 4
  52. ok 2 - sum(X::IO::Symlink, -3222031972)
  53. Use of uninitialized value of type X::Attribute::Package in numeric context
  54. in sub sum at Sum.pm6 line 4
  55. ok 3 - sum(X::Attribute::Package, -9999999999)
  56. Use of uninitialized value of type Routine in numeric context
  57. in sub sum at Sum.pm6 line 4
  58. not ok 4 - sum(áéíóú, (Routine))
  59. ...
  60. What that means?
  61.  
  62. That means we should use one of the big features of perl6: Gradual typing. And $a and $b should have a types. So, let's modify the function and test again:
  63.  
  64. module Sum {
  65. use Test::Fuzz;
  66. sub sum(Int $a, Int $b) is export is fuzzed {
  67. $a + $b
  68. }
  69. }
  70. sub MAIN(:$fuzz!) {
  71. Test::Fuzz.instance.run-tests
  72. }
  73. ok 1 - sum(-2991774675, 0)
  74. ok 2 - sum(5471569889, 7905158424)
  75. ok 3 - sum(8930867907, 5132583935)
  76. ok 4 - sum(-6390728076, -1)
  77. ok 5 - sum(-3558165707, 4067089440)
  78. ok 6 - sum(-8930867907, -5471569889)
  79. ok 7 - sum(3090653502, -2099633631)
  80. ok 8 - sum(-2255887318, 1517560219)
  81. ok 9 - sum(-6085119010, -3942121686)
  82. ok 10 - sum(-7059342689, 8930867907)
  83. ok 11 - sum(-2244597851, -6390728076)
  84. ok 12 - sum(-5948408450, 2244597851)
  85. ok 13 - sum(0, -5062049498)
  86. ok 14 - sum(-7229942697, 3090653502)
  87. not ok 15 - sum((UInt), 1)
  88.  
  89. # Failed test 'sum((UInt), 1)'
  90. # at site#sources/FB587F3186E6B6BDDB9F5C5F8E73C55195B73C86 (Test::Fuzz) line 62
  91. # Invocant requires an instance of type Int, but a type object was passed. Did you forget a .new?
  92. ...
  93. A lot of OKs! \o/
  94.  
  95. But there're still some errors... We can't sum undefined values... So, let's change it again!
  96.  
  97. module Sum {
  98. use Test::Fuzz;
  99. sub sum(Int:D $a, Int:D $b) is export is fuzzed {
  100. $a + $b
  101. }
  102. }
  103. sub MAIN(:$fuzz!) {
  104. Test::Fuzz.instance.run-tests
  105. }
  106. ok 1 - sum(6023702597, -8270141809)
  107. ok 2 - sum(-8270141809, -3762529280)
  108. ok 3 - sum(242796759, -7408209799)
  109. ok 4 - sum(-5813412117, -5280261945)
  110. ok 5 - sum(2623325683, 2015644992)
  111. ok 6 - sum(-696696815, -7039670011)
  112. ok 7 - sum(1, -4327620877)
  113. ok 8 - sum(-7712774875, 349132637)
  114. ok 9 - sum(3956553645, -7039670011)
  115. ok 10 - sum(-8554836757, 7039670011)
  116. ok 11 - sum(1170220615, -3)
  117. ok 12 - sum(-242796759, 2015644992)
  118. ok 13 - sum(-9558159978, -8442233570)
  119. ok 14 - sum(-3937367230, 349132637)
  120. ok 15 - sum(5813412117, 1170220615)
  121. ok 16 - sum(-7408209799, 6565554452)
  122. ok 17 - sum(2474679799, -3099404826)
  123. ok 18 - sum(-5813412117, 9524548586)
  124. ok 19 - sum(-6770230387, -7408209799)
  125. ok 20 - sum(-7712774875, -2015644992)
  126. ok 21 - sum(8442233570, -1)
  127. ok 22 - sum(-6565554452, 9999999999)
  128. ok 23 - sum(242796759, 5719635608)
  129. ok 24 - sum(-7712774875, 7039670011)
  130. ok 25 - sum(7408209799, -8235752818)
  131. ok 26 - sum(5719635608, -8518891049)
  132. ok 27 - sum(8518891049, -242796759)
  133. ok 28 - sum(-2474679799, 2299757592)
  134. ok 29 - sum(5356064609, 349132637)
  135. ok 30 - sum(-3491438968, 3438417115)
  136. ok 31 - sum(-2299757592, 7580671928)
  137. ok 32 - sum(-8104597621, -8158438801)
  138. ok 33 - sum(-2015644992, -3)
  139. ok 34 - sum(-6023702597, 8104597621)
  140. ok 35 - sum(2474679799, -2623325683)
  141. ok 36 - sum(8270141809, 7039670011)
  142. ok 37 - sum(-1534092807, -8518891049)
  143. ok 38 - sum(3551099668, 0)
  144. ok 39 - sum(7039670011, 4327620877)
  145. ok 40 - sum(9524548586, -8235752818)
  146. ok 41 - sum(6151880628, 3762529280)
  147. ok 42 - sum(-8518891049, 349132637)
  148. ok 43 - sum(7580671928, 9999999999)
  149. ok 44 - sum(-8235752818, -7645883481)
  150. ok 45 - sum(6460424228, 9999999999)
  151. ok 46 - sum(7039670011, -7788162753)
  152. ok 47 - sum(-9999999999, 5356064609)
  153. ok 48 - sum(8510706378, -2474679799)
  154. ok 49 - sum(242796759, -5813412117)
  155. ok 50 - sum(-3438417115, 9558159978)
  156. ok 51 - sum(8554836757, -7788162753)
  157. ok 52 - sum(-9999999999, 3956553645)
  158. ok 53 - sum(-6460424228, -8442233570)
  159. ok 54 - sum(7039670011, -7712774875)
  160. ok 55 - sum(-3956553645, 1577669672)
  161. ok 56 - sum(0, 9524548586)
  162. ok 57 - sum(242796759, -6151880628)
  163. ok 58 - sum(7580671928, 3937367230)
  164. ok 59 - sum(-8554836757, 7712774875)
  165. ok 60 - sum(9524548586, 2474679799)
  166. ok 61 - sum(-7712774875, 2450227203)
  167. ok 62 - sum(3, 1257247905)
  168. ok 63 - sum(8270141809, -2015644992)
  169. ok 64 - sum(242796759, -3937367230)
  170. ok 65 - sum(6770230387, -6023702597)
  171. ok 66 - sum(2623325683, -3937367230)
  172. ok 67 - sum(-5719635608, -7645883481)
  173. ok 68 - sum(1, 6770230387)
  174. ok 69 - sum(3937367230, 7712774875)
  175. ok 70 - sum(6565554452, -5813412117)
  176. ok 71 - sum(7039670011, -8104597621)
  177. ok 72 - sum(7645883481, 9558159978)
  178. ok 73 - sum(-6023702597, 6770230387)
  179. ok 74 - sum(-3956553645, -7788162753)
  180. ok 75 - sum(-7712774875, 8518891049)
  181. ok 76 - sum(-6770230387, 6565554452)
  182. ok 77 - sum(-8554836757, 5356064609)
  183. ok 78 - sum(6460424228, 8518891049)
  184. ok 79 - sum(-3438417115, -9999999999)
  185. ok 80 - sum(-1577669672, -1257247905)
  186. ok 81 - sum(-5813412117, -3099404826)
  187. ok 82 - sum(8158438801, -3551099668)
  188. ok 83 - sum(-8554836757, 1534092807)
  189. ok 84 - sum(6565554452, -5719635608)
  190. ok 85 - sum(-5813412117, -2623325683)
  191. ok 86 - sum(-8158438801, -3937367230)
  192. ok 87 - sum(5813412117, -46698532)
  193. ok 88 - sum(9524548586, -2474679799)
  194. ok 89 - sum(3762529280, -2474679799)
  195. ok 90 - sum(7788162753, 9558159978)
  196. ok 91 - sum(6770230387, -46698532)
  197. ok 92 - sum(1577669672, 6460424228)
  198. ok 93 - sum(4327620877, 3762529280)
  199. ok 94 - sum(-6023702597, -2299757592)
  200. ok 95 - sum(1257247905, -8518891049)
  201. ok 96 - sum(-8235752818, -6151880628)
  202. ok 97 - sum(1577669672, 7408209799)
  203. ok 98 - sum(349132637, 6770230387)
  204. ok 99 - sum(-7788162753, 46698532)
  205. ok 100 - sum(-7408209799, 0)
  206. 1..100
  207. ok 1 - sum
  208. No errors!!!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement