tinygo.org/x/drivers@v0.27.1-0.20240509133757-7dbca2a54349/image/internal/compress/flate/inflate_test.go (about)

     1  // Copyright 2014 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package flate
     6  
     7  import (
     8  	"bytes"
     9  	"io"
    10  	"strings"
    11  	"testing"
    12  )
    13  
    14  func TestReset(t *testing.T) {
    15  	ss := []string{
    16  		"lorem ipsum izzle fo rizzle",
    17  		"the quick brown fox jumped over",
    18  	}
    19  
    20  	deflated := make([]bytes.Buffer, 2)
    21  	for i, s := range ss {
    22  		w, _ := NewWriter(&deflated[i], 1)
    23  		w.Write([]byte(s))
    24  		w.Close()
    25  	}
    26  
    27  	inflated := make([]bytes.Buffer, 2)
    28  
    29  	f := NewReader(&deflated[0])
    30  	io.Copy(&inflated[0], f)
    31  	f.(Resetter).Reset(&deflated[1], nil)
    32  	io.Copy(&inflated[1], f)
    33  	f.Close()
    34  
    35  	for i, s := range ss {
    36  		if s != inflated[i].String() {
    37  			t.Errorf("inflated[%d]:\ngot  %q\nwant %q", i, inflated[i], s)
    38  		}
    39  	}
    40  }
    41  
    42  func TestReaderTruncated(t *testing.T) {
    43  	vectors := []struct{ input, output string }{
    44  		{"\x00", ""},
    45  		{"\x00\f", ""},
    46  		{"\x00\f\x00", ""},
    47  		{"\x00\f\x00\xf3\xff", ""},
    48  		{"\x00\f\x00\xf3\xffhello", "hello"},
    49  		{"\x00\f\x00\xf3\xffhello, world", "hello, world"},
    50  		{"\x02", ""},
    51  		{"\xf2H\xcd", "He"},
    52  		{"\xf2H͙0a\u0084\t", "Hel\x90\x90\x90\x90\x90"},
    53  		{"\xf2H͙0a\u0084\t\x00", "Hel\x90\x90\x90\x90\x90"},
    54  	}
    55  
    56  	for i, v := range vectors {
    57  		r := strings.NewReader(v.input)
    58  		zr := NewReader(r)
    59  		b, err := io.ReadAll(zr)
    60  		if err != io.ErrUnexpectedEOF {
    61  			t.Errorf("test %d, error mismatch: got %v, want io.ErrUnexpectedEOF", i, err)
    62  		}
    63  		if string(b) != v.output {
    64  			t.Errorf("test %d, output mismatch: got %q, want %q", i, b, v.output)
    65  		}
    66  	}
    67  }
    68  
    69  func TestResetDict(t *testing.T) {
    70  	dict := []byte("the lorem fox")
    71  	ss := []string{
    72  		"lorem ipsum izzle fo rizzle",
    73  		"the quick brown fox jumped over",
    74  	}
    75  
    76  	deflated := make([]bytes.Buffer, len(ss))
    77  	for i, s := range ss {
    78  		w, _ := NewWriterDict(&deflated[i], DefaultCompression, dict)
    79  		w.Write([]byte(s))
    80  		w.Close()
    81  	}
    82  
    83  	inflated := make([]bytes.Buffer, len(ss))
    84  
    85  	f := NewReader(nil)
    86  	for i := range inflated {
    87  		f.(Resetter).Reset(&deflated[i], dict)
    88  		io.Copy(&inflated[i], f)
    89  	}
    90  	f.Close()
    91  
    92  	for i, s := range ss {
    93  		if s != inflated[i].String() {
    94  			t.Errorf("inflated[%d]:\ngot  %q\nwant %q", i, inflated[i], s)
    95  		}
    96  	}
    97  }