@@ -69,46 +69,6 @@ func TestEncoderEmptyWrite(t *testing.T) {
6969 t .Errorf ("Close()=%v, want nil" , err )
7070 }
7171}
72-
73- func TestWriter (t * testing.T ) {
74- for level := BestSpeed ; level <= BestCompression ; level ++ {
75- // Test basic encoder usage.
76- input := []byte ("<html><body><H1>Hello world</H1></body></html>" )
77- out := bytes.Buffer {}
78- e := NewWriterOptions (& out , WriterOptions {Quality : level })
79- in := bytes .NewReader ([]byte (input ))
80- n , err := io .Copy (e , in )
81- if err != nil {
82- t .Errorf ("Copy Error: %v" , err )
83- }
84- if int (n ) != len (input ) {
85- t .Errorf ("Copy() n=%v, want %v" , n , len (input ))
86- }
87- if err := e .Close (); err != nil {
88- t .Errorf ("Close Error after copied %d bytes: %v" , n , err )
89- }
90- if err := checkCompressedData (out .Bytes (), input ); err != nil {
91- t .Error (err )
92- }
93-
94- out2 := bytes.Buffer {}
95- e .Reset (& out2 )
96- n2 , err := e .Write (input )
97- if err != nil {
98- t .Errorf ("Write error after Reset: %v" , err )
99- }
100- if n2 != len (input ) {
101- t .Errorf ("Write() after Reset n=%d, want %d" , n2 , len (input ))
102- }
103- if err := e .Close (); err != nil {
104- t .Errorf ("Close error after Reset (copied %d) bytes: %v" , n2 , err )
105- }
106- if ! bytes .Equal (out .Bytes (), out2 .Bytes ()) {
107- t .Error ("Compressed data after Reset doesn't equal first time" )
108- }
109- }
110- }
111-
11272func TestIssue22 (t * testing.T ) {
11373 f , err := os .Open ("testdata/issue22.gz" )
11474 if err != nil {
@@ -149,6 +109,45 @@ func TestIssue22(t *testing.T) {
149109 }
150110}
151111
112+ func TestWriterV2 (t * testing.T ) {
113+ for level := BestSpeed ; level <= BestCompression ; level ++ {
114+ // Test basic encoder usage.
115+ input := []byte ("<html><body><H1>Hello world</H1></body></html>" )
116+ out := bytes.Buffer {}
117+ e := NewWriterV2 (& out , level )
118+ in := bytes .NewReader ([]byte (input ))
119+ n , err := io .Copy (e , in )
120+ if err != nil {
121+ t .Errorf ("Copy Error: %v" , err )
122+ }
123+ if int (n ) != len (input ) {
124+ t .Errorf ("Copy() n=%v, want %v" , n , len (input ))
125+ }
126+ if err := e .Close (); err != nil {
127+ t .Errorf ("Close Error after copied %d bytes: %v" , n , err )
128+ }
129+ if err := checkCompressedData (out .Bytes (), input ); err != nil {
130+ t .Error (err )
131+ }
132+
133+ out2 := bytes.Buffer {}
134+ e .Reset (& out2 )
135+ n2 , err := e .Write (input )
136+ if err != nil {
137+ t .Errorf ("Write error after Reset: %v" , err )
138+ }
139+ if n2 != len (input ) {
140+ t .Errorf ("Write() after Reset n=%d, want %d" , n2 , len (input ))
141+ }
142+ if err := e .Close (); err != nil {
143+ t .Errorf ("Close error after Reset (copied %d) bytes: %v" , n2 , err )
144+ }
145+ if ! bytes .Equal (out .Bytes (), out2 .Bytes ()) {
146+ t .Error ("Compressed data after Reset doesn't equal first time" )
147+ }
148+ }
149+ }
150+
152151func TestEncoderStreams (t * testing.T ) {
153152 // Test that output is streamed.
154153 // Adjust window size to ensure the encoder outputs at least enough bytes
@@ -576,6 +575,30 @@ func BenchmarkEncodeLevelsReset(b *testing.B) {
576575 }
577576}
578577
578+ func BenchmarkEncodeLevelsResetV2 (b * testing.B ) {
579+ opticks , err := ioutil .ReadFile ("testdata/Isaac.Newton-Opticks.txt" )
580+ if err != nil {
581+ b .Fatal (err )
582+ }
583+
584+ for level := BestSpeed ; level <= 7 ; level ++ {
585+ buf := new (bytes.Buffer )
586+ w := NewWriterV2 (buf , level )
587+ w .Write (opticks )
588+ w .Close ()
589+ b .Run (fmt .Sprintf ("%d" , level ), func (b * testing.B ) {
590+ b .ReportAllocs ()
591+ b .ReportMetric (float64 (len (opticks ))/ float64 (buf .Len ()), "ratio" )
592+ b .SetBytes (int64 (len (opticks )))
593+ for i := 0 ; i < b .N ; i ++ {
594+ w .Reset (ioutil .Discard )
595+ w .Write (opticks )
596+ w .Close ()
597+ }
598+ })
599+ }
600+ }
601+
579602func BenchmarkDecodeLevels (b * testing.B ) {
580603 opticks , err := ioutil .ReadFile ("testdata/Isaac.Newton-Opticks.txt" )
581604 if err != nil {
@@ -694,6 +717,10 @@ func BenchmarkEncodeM4Chain128(b *testing.B) {
694717 benchmark (b , "testdata/Isaac.Newton-Opticks.txt" , & matchfinder.M4 {MaxDistance : 1 << 20 , ChainLength : 128 , HashLen : 5 , DistanceBitCost : 57 }, 1 << 16 )
695718}
696719
720+ func BenchmarkEncodeM4Chain256 (b * testing.B ) {
721+ benchmark (b , "testdata/Isaac.Newton-Opticks.txt" , & matchfinder.M4 {MaxDistance : 1 << 20 , ChainLength : 256 , HashLen : 5 , DistanceBitCost : 57 }, 1 << 16 )
722+ }
723+
697724func TestEncodeM0 (t * testing.T ) {
698725 test (t , "testdata/Isaac.Newton-Opticks.txt" , matchfinder.M0 {}, 1 << 16 )
699726}
0 commit comments