{"body":"class Test::Fuzz {\n\tclass Fuzzer {\n\t\thas\t\t$.name;\n\t\thas \t\t@.data;\n\t\thas Block\t$.func;\n\t\thas \t\t$.returns;\n\n\t\tmethod run() {\n\t\t\tfor @.data -> @data {\n\t\t\t\tmy $return = $.func.(|@data);\n\t\t\t\tsay $return ~~ Failure;\n\t\t\t\tCATCH {\n\t\t\t\t\tdefault {\n\t\t\t\t\t\tnote \"{ $.name }({ @data.join(\", \") })  => { $return }\";\n\t\t\t\t\t\tdie do given .backtrace[*-1] { .file, .line, .subname };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tmy %generator =\n\t\tUInt\t=> {\n\t\t\tgather {\n\t\t\t\ttake 0;\n\t\t\t\ttake 1;\n\t\t\t\ttake 9999999999;\n\t\t\t\ttake $_ for (^10000000000).roll(*)\n\t\t\t}\n\t\t},\n\t\tInt\t=> {\n\t\t\tgather for %generator<UInt>() -> $int {\n\t\t\t\ttake $int;\n\t\t\t\ttake -$int unless $int == 0;\n\t\t\t}\n\t\t},\n\t;\n\n\tmy Fuzzer @fuzzers;\n\n\tmulti trait_mod:<is> (Routine $func, :$fuzzed!) is export {\n\t\t#note $func.signature;\n\t\tmy $counter\t= 10;\n\n\t\tmy @data = [X] $func.signature.params.map(-> \\param {\n\t\t\tmy $type = param.type;\n\t\t\t$?CLASS.generate($type, $counter)\n\t\t});\n\n\t\tmy $name\t= $func.name;\n\t\tmy $returns\t= $func.signature.returns;\n\n\t\t@fuzzers.push(Fuzzer.new(:$name:$func:@data:$returns))\n\t}\n\n\tmethod generate(Test::Fuzz:U: ::Type, Int \\index-num) {\n\t\tmy $ret;\n\t\tif %generator{Type.^name}:exists {\n\t\t\t$ret = %generator{Type.^name}()[^index-num]\n\t\t}\n\t\t$ret\n\t}\n\n\tmethod run-fuzz-tests(Test::Fuzz:U:) {\n\t\t#say @fuzzers;\n\t\tfor @fuzzers -> $fuzz {\n\t\t\t$fuzz.run;\n\t\t}\n\t}\n}\n\n\n\n\n\n\n\n\n#########################################\n# Use sample:\n\nperl6 -I. -MTest::Fuzz -e '\n\nsub bla (Int $bla, Int $ble --> Rat) is fuzzed {\n   1 / ($bla + $ble)\n}\nTest::Fuzz.run-fuzz-tests\n\n'","name":"","extension":"txt","url":"https://www.irccloud.com/pastebin/2OFsNbFN","modified":1458276106,"id":"2OFsNbFN","size":1490,"lines":89,"own_paste":false,"theme":"","date":1458276106}