(b *testing.B, file string, workers int)
| 518 | } |
| 519 | |
| 520 | func benchmarkArchiveNaiveParallel(b *testing.B, file string, workers int) { |
| 521 | b.Helper() |
| 522 | |
| 523 | for range b.N { |
| 524 | r, err := sevenzip.OpenReader(filepath.Join("testdata", file)) |
| 525 | if err != nil { |
| 526 | b.Fatal(err) |
| 527 | } |
| 528 | |
| 529 | var once sync.Once |
| 530 | |
| 531 | f := func() { |
| 532 | if err := r.Close(); err != nil { |
| 533 | b.Fatal(err) |
| 534 | } |
| 535 | } |
| 536 | |
| 537 | defer once.Do(f) |
| 538 | |
| 539 | eg := new(errgroup.Group) |
| 540 | eg.SetLimit(workers) |
| 541 | |
| 542 | for _, f := range r.File { |
| 543 | eg.Go(func() (err error) { |
| 544 | var rc io.ReadCloser |
| 545 | |
| 546 | rc, err = f.Open() |
| 547 | if err != nil { |
| 548 | return fmt.Errorf("error opening file: %w", err) |
| 549 | } |
| 550 | |
| 551 | defer func() { |
| 552 | err = errors.Join(err, rc.Close()) |
| 553 | }() |
| 554 | |
| 555 | return extractFile(b, rc, crc32.NewIEEE(), f) |
| 556 | }) |
| 557 | } |
| 558 | |
| 559 | if err := eg.Wait(); err != nil { |
| 560 | b.Fatal(err) |
| 561 | } |
| 562 | |
| 563 | once.Do(f) |
| 564 | } |
| 565 | } |
| 566 | |
| 567 | func benchmarkArchive(b *testing.B, file, password string, optimised bool) { |
| 568 | b.Helper() |
no test coverage detected
searching dependent graphs…