| 53 | |
| 54 | template <class result> |
| 55 | size_t fancy_fuzz(size_t N, size_t seed = 0) { |
| 56 | size_t counter = seed; |
| 57 | for (size_t trial = 0; trial < N; trial++) { |
| 58 | std::string copy = |
| 59 | url_examples[(seed++) % (sizeof(url_examples) / sizeof(std::string))]; |
| 60 | auto url = ada::parse<result>(copy); |
| 61 | while (url) { |
| 62 | // mutate the string. |
| 63 | int k = ((321321 * counter++) % 3); |
| 64 | switch (k) { |
| 65 | case 0: |
| 66 | copy.erase((11134 * counter++) % copy.size()); |
| 67 | break; |
| 68 | case 1: |
| 69 | copy.insert(copy.begin() + (211311 * counter) % copy.size(), |
| 70 | char((counter + 1) * 777)); |
| 71 | counter += 2; |
| 72 | break; |
| 73 | case 2: |
| 74 | copy[(13134 * counter++) % copy.size()] = char(counter++ * 71117); |
| 75 | break; |
| 76 | default: |
| 77 | break; |
| 78 | } |
| 79 | url = ada_parse<result>(copy); |
| 80 | } |
| 81 | } |
| 82 | return counter; |
| 83 | } |
| 84 | |
| 85 | template <class result> |
| 86 | size_t simple_fuzz(size_t N, size_t seed = 0) { |