[ARM] Fix typo in comment in arm_expand_prologue
[official-gcc.git] / libgo / go / compress / lzw / reader_test.go
blob6b9f9a3da7035ddc80203c5b4730bc0f5d93eda0
1 // Copyright 2011 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.
5 package lzw
7 import (
8 "bytes"
9 "fmt"
10 "io"
11 "io/ioutil"
12 "math"
13 "runtime"
14 "strconv"
15 "strings"
16 "testing"
19 type lzwTest struct {
20 desc string
21 raw string
22 compressed string
23 err error
26 var lzwTests = []lzwTest{
28 "empty;LSB;8",
29 "",
30 "\x01\x01",
31 nil,
34 "empty;MSB;8",
35 "",
36 "\x80\x80",
37 nil,
40 "tobe;LSB;7",
41 "TOBEORNOTTOBEORTOBEORNOT",
42 "\x54\x4f\x42\x45\x4f\x52\x4e\x4f\x54\x82\x84\x86\x8b\x85\x87\x89\x81",
43 nil,
46 "tobe;LSB;8",
47 "TOBEORNOTTOBEORTOBEORNOT",
48 "\x54\x9e\x08\x29\xf2\x44\x8a\x93\x27\x54\x04\x12\x34\xb8\xb0\xe0\xc1\x84\x01\x01",
49 nil,
52 "tobe;MSB;7",
53 "TOBEORNOTTOBEORTOBEORNOT",
54 "\x54\x4f\x42\x45\x4f\x52\x4e\x4f\x54\x82\x84\x86\x8b\x85\x87\x89\x81",
55 nil,
58 "tobe;MSB;8",
59 "TOBEORNOTTOBEORTOBEORNOT",
60 "\x2a\x13\xc8\x44\x52\x79\x48\x9c\x4f\x2a\x40\xa0\x90\x68\x5c\x16\x0f\x09\x80\x80",
61 nil,
64 "tobe-truncated;LSB;8",
65 "TOBEORNOTTOBEORTOBEORNOT",
66 "\x54\x9e\x08\x29\xf2\x44\x8a\x93\x27\x54\x04",
67 io.ErrUnexpectedEOF,
69 // This example comes from http://en.wikipedia.org/wiki/Graphics_Interchange_Format.
71 "gif;LSB;8",
72 "\x28\xff\xff\xff\x28\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
73 "\x00\x51\xfc\x1b\x28\x70\xa0\xc1\x83\x01\x01",
74 nil,
76 // This example comes from http://compgroups.net/comp.lang.ruby/Decompressing-LZW-compression-from-PDF-file
78 "pdf;MSB;8",
79 "-----A---B",
80 "\x80\x0b\x60\x50\x22\x0c\x0c\x85\x01",
81 nil,
85 func TestReader(t *testing.T) {
86 var b bytes.Buffer
87 for _, tt := range lzwTests {
88 d := strings.Split(tt.desc, ";")
89 var order Order
90 switch d[1] {
91 case "LSB":
92 order = LSB
93 case "MSB":
94 order = MSB
95 default:
96 t.Errorf("%s: bad order %q", tt.desc, d[1])
98 litWidth, _ := strconv.Atoi(d[2])
99 rc := NewReader(strings.NewReader(tt.compressed), order, litWidth)
100 defer rc.Close()
101 b.Reset()
102 n, err := io.Copy(&b, rc)
103 s := b.String()
104 if err != nil {
105 if err != tt.err {
106 t.Errorf("%s: io.Copy: %v want %v", tt.desc, err, tt.err)
108 if err == io.ErrUnexpectedEOF {
109 // Even if the input is truncated, we should still return the
110 // partial decoded result.
111 if n == 0 || !strings.HasPrefix(tt.raw, s) {
112 t.Errorf("got %d bytes (%q), want a non-empty prefix of %q", n, s, tt.raw)
115 continue
117 if s != tt.raw {
118 t.Errorf("%s: got %d-byte %q want %d-byte %q", tt.desc, n, s, len(tt.raw), tt.raw)
123 func BenchmarkDecoder(b *testing.B) {
124 buf, err := ioutil.ReadFile("../testdata/e.txt")
125 if err != nil {
126 b.Fatal(err)
128 if len(buf) == 0 {
129 b.Fatalf("test file has no data")
132 for e := 4; e <= 6; e++ {
133 n := int(math.Pow10(e))
134 b.Run(fmt.Sprint("1e", e), func(b *testing.B) {
135 b.StopTimer()
136 b.SetBytes(int64(n))
137 buf0 := buf
138 compressed := new(bytes.Buffer)
139 w := NewWriter(compressed, LSB, 8)
140 for i := 0; i < n; i += len(buf0) {
141 if len(buf0) > n-i {
142 buf0 = buf0[:n-i]
144 w.Write(buf0)
146 w.Close()
147 buf1 := compressed.Bytes()
148 buf0, compressed, w = nil, nil, nil
149 runtime.GC()
150 b.StartTimer()
151 for i := 0; i < b.N; i++ {
152 io.Copy(ioutil.Discard, NewReader(bytes.NewReader(buf1), LSB, 8))