=========================================================================== FuzzFindAllStdlib - Fuzz FindAll/FindAllString/FindAllIndex ===========================================================================
(f *testing.F)
| 304 | // =========================================================================== |
| 305 | |
| 306 | func FuzzFindAllStdlib(f *testing.F) { |
| 307 | // Add seed corpus |
| 308 | for _, p := range seedPatterns { |
| 309 | for _, i := range seedInputs { |
| 310 | f.Add(p, i) |
| 311 | } |
| 312 | } |
| 313 | |
| 314 | f.Fuzz(func(t *testing.T, pattern, input string) { |
| 315 | // Skip known differences: UTF-8 codepoint vs byte matching |
| 316 | if hasUTF8CodepointDifference(pattern, input) { |
| 317 | return |
| 318 | } |
| 319 | |
| 320 | // Skip invalid patterns |
| 321 | stdRe, err := regexp.Compile(pattern) |
| 322 | if err != nil { |
| 323 | return |
| 324 | } |
| 325 | |
| 326 | cgRe, err := Compile(pattern) |
| 327 | if err != nil { |
| 328 | t.Fatalf("coregex failed to compile valid pattern %q: %v", pattern, err) |
| 329 | } |
| 330 | |
| 331 | // Compare FindAll |
| 332 | stdFindAll := stdRe.FindAll([]byte(input), -1) |
| 333 | cgFindAll := cgRe.FindAll([]byte(input), -1) |
| 334 | if !equalByteSlices(stdFindAll, cgFindAll) { |
| 335 | t.Errorf("FindAll(%q, %q):\n stdlib: %v\n coregex: %v", |
| 336 | pattern, input, toStringSlice(stdFindAll), toStringSlice(cgFindAll)) |
| 337 | } |
| 338 | |
| 339 | // Compare FindAllString |
| 340 | stdFindAllStr := stdRe.FindAllString(input, -1) |
| 341 | cgFindAllStr := cgRe.FindAllString(input, -1) |
| 342 | if !reflect.DeepEqual(stdFindAllStr, cgFindAllStr) { |
| 343 | t.Errorf("FindAllString(%q, %q):\n stdlib: %v\n coregex: %v", |
| 344 | pattern, input, stdFindAllStr, cgFindAllStr) |
| 345 | } |
| 346 | |
| 347 | // Compare FindAllStringIndex |
| 348 | stdFindAllStrIdx := stdRe.FindAllStringIndex(input, -1) |
| 349 | cgFindAllStrIdx := cgRe.FindAllStringIndex(input, -1) |
| 350 | if !reflect.DeepEqual(stdFindAllStrIdx, cgFindAllStrIdx) { |
| 351 | t.Errorf("FindAllStringIndex(%q, %q):\n stdlib: %v\n coregex: %v", |
| 352 | pattern, input, stdFindAllStrIdx, cgFindAllStrIdx) |
| 353 | } |
| 354 | |
| 355 | // Test limited FindAll (n=3) |
| 356 | stdLimited := stdRe.FindAllString(input, 3) |
| 357 | cgLimited := cgRe.FindAllString(input, 3) |
| 358 | if !reflect.DeepEqual(stdLimited, cgLimited) { |
| 359 | t.Errorf("FindAllString(%q, %q, 3):\n stdlib: %v\n coregex: %v", |
| 360 | pattern, input, stdLimited, cgLimited) |
| 361 | } |
| 362 | }) |
| 363 | } |
nothing calls this directly
no test coverage detected