| 20 | ) |
| 21 | |
| 22 | func TestWriterMemUsage(t *testing.T) { |
| 23 | testMem := func(t *testing.T, fn func()) { |
| 24 | var before, after runtime.MemStats |
| 25 | runtime.GC() |
| 26 | runtime.ReadMemStats(&before) |
| 27 | fn() |
| 28 | runtime.GC() |
| 29 | runtime.ReadMemStats(&after) |
| 30 | t.Logf("%s: Memory Used: %dKB, %d allocs", t.Name(), (after.HeapInuse-before.HeapInuse)/1024, after.HeapObjects-before.HeapObjects) |
| 31 | } |
| 32 | data := make([]byte, 100000) |
| 33 | t.Run("stateless", func(t *testing.T) { |
| 34 | testMem(t, func() { |
| 35 | StatelessDeflate(io.Discard, data, false, nil) |
| 36 | }) |
| 37 | }) |
| 38 | for level := HuffmanOnly; level <= BestCompression; level++ { |
| 39 | t.Run(fmt.Sprint("level-", level), func(t *testing.T) { |
| 40 | var zr *Writer |
| 41 | var err error |
| 42 | testMem(t, func() { |
| 43 | zr, err = NewWriter(io.Discard, level) |
| 44 | if err != nil { |
| 45 | t.Fatal(err) |
| 46 | } |
| 47 | zr.Write(data) |
| 48 | }) |
| 49 | zr.Close() |
| 50 | }) |
| 51 | } |
| 52 | for level := HuffmanOnly; level <= BestCompression; level++ { |
| 53 | t.Run(fmt.Sprint("stdlib-", level), func(t *testing.T) { |
| 54 | var zr *flate.Writer |
| 55 | var err error |
| 56 | testMem(t, func() { |
| 57 | zr, err = flate.NewWriter(io.Discard, level) |
| 58 | if err != nil { |
| 59 | t.Fatal(err) |
| 60 | } |
| 61 | zr.Write(data) |
| 62 | }) |
| 63 | zr.Close() |
| 64 | }) |
| 65 | } |
| 66 | } |
| 67 | |
| 68 | func TestWriterRegression(t *testing.T) { |
| 69 | data, err := os.ReadFile("testdata/regression.zip") |